1.CSS盒模型

当对一个文档进行布局的时候,浏览器的渲染引擎会根据盒模型将所有元素表示为一个个矩形的盒子,CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸…)

每个盒子有4个区域:从内到外是content、padding、border、margin。margin区域用于分开相邻元素。

border使用box-sizing来指定要使用的盒模型。

box-sizing:content-box为标准盒子模型,可通过(min、max)height、width来控制内容区域的大小。

box-sizing:border-box为IE盒子模型,通过(min、max)height、width来控制边框区域的大小。常用于避免padding和border造成的元素显示的大小改变。

盒子的背景会延申到边框外延,可通过 background-clip 来改变。

2.盒的基本类型

块级元素(block)特性:

总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示;

宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;

内联元素(inline)特性:

和相邻的内联元素在同一行;

宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变,就是里面文字或图片的大小;

内联块元素(display:inline-block):表现为同行显示并可修改宽高内外边距等属性。

inline-block常用于将div元素并列显示,相比于使用float、position,不需要去除环形围绕clear。

inline-block并列显示的div元素vertical-align默认为bottom,div元素间的换行符会产生缝隙。

inline-block还常用于水平菜单,用于li或a标签。

块级元素主要有:

address , blockquote , center , dir , div , dl , fieldset , form , h1-h6, hr , isindex , menu , noframes , noscript , ol , p , pre , table , ul , li

内联元素主要有:

a , abbr , acronym , b , bdo , big , br , cite , code , dfn , em , font , i , img , input , kbd , label , q , s , samp , select , small , span , strike , strong , sub , sup ,textarea , tt , u , var

可变元素(根据上下文关系确定该元素是块元素还是内联元素):

applet ,button ,del ,iframe , ins ,map ,object , script

3.去除inline-block元素间间距

产生原因:HTML中的换行符、空格符、制表符等空白符,字体大小不为0的情况下,空白符占据一定宽度,使用inline-block会产生元素间的空隙。

  • 使用margin负值

  • 设置父容器的font-size为0

  • 设置父容器的letter-spacing或word-spacing为负值

  • 在书写代码时留意去掉空白符,如:

    <div class="space">
    <a href="##">
    惆怅</a><a href="##">
    淡定</a>
    </div>
    <div class="space">
    <a href="##">惆怅</a
    ><a href="##">淡定</a>
    </div>
    <div class="space">
    <a href="##">惆怅</a><!--
    --><a href="##">淡定</a>
    </div>

    原文链接

    4.CSS Hack

    CSS hack为不同版本的浏览器定制编写不同的CSS效果,使你的CSS代码兼容不同的浏览器.

    有条件hack,属性hack,选择符hack。

    5.优雅降级和渐进增强

    渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

    优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

    区别:

    a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

    b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

    c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

    6.rgba与opacity

    有opacity属性的所有后代元素都会继承 opacity 属性,而RGBA后代元素不会继承不透明属性

    7.BFC块级格式化上下文

    8.白屏和FOUC

    9.两栏布局与三栏布局

    布局的时候,常会用到float、负margin、relative定位、transform的translate,还有flex弹性盒子、grid网格布局,方法很多。

    三栏布局(圣杯布局)

    左右两栏定宽,中间主体自适应宽度,优先渲染主体部分。

    基本思路:主体部分放前面,三栏左浮动,将左右的padding设为左右两栏的宽度,使用负外边距和相对布局移动左右两栏到主体左右的padding区域。

    细节:box-sizing要设置为boeder-box,这样各栏border和padding的调整不会影响整体布局。

    父容器要设置min-width,要计算,如果设置小了,在小型设备上布局会崩掉。

    我放在codepen上的代码,可以自己fork一个调一下感受。

    https://codepen.io/bluehat999/pen/QoYzjo

    可以改父容器的width来模拟小型设备。

    代码:

    <div class="body">
    <div id="header">header</div>
    <div id="container">
    <div id="center" class="column">OK</div>
    <div id="left" class="column">LEFT</div>
    <div id="right" class="column">RIGHT</div>
    </div>
    <div id="footer">footer</div> </div>
    div{
    border:1px solid #eeeeee;
    text-align:center;
    box-sizing:border-box;
    }
    .body{
    min-width:554px;
    width:300px;
    /* box-sizing:border-box; */
    }
    #container {
    padding-left: 200px; /* LC width */
    padding-right: 150px; /* RC width */
    }
    #container .column {
    position: relative;
    float: left;
    height:100px;
    }
    #center {
    width: 100%;
    }
    #left {
    width: 200px; /* LC width */
    right: 200px; /* LC width 左列与左填充对齐*/
    margin-left: -100%; /*100%是容器的中心宽度*/
    }
    #right {
    width: 150px; /* RC width */
    /* margin-left: -154px; */
    /* left:153px; */
    margin-right:-150px; /*这个值如何设置*/
    }
    #footer {
    clear: both;
    }

    两栏布局

    Codepen两栏布局8种实现在线演示

    原文链接是 https://segmentfault.com/a/1190000010698609

    不同的方案各有优劣,参考原文说明,在codepen上自行调整体会。

    【前端必备】二、CSS篇的更多相关文章

    1. web前端知识大纲:系列二 css篇

      web前端庞大而复杂的知识体系的组成:html.css和 javascript 二.css 1.CSS选择器 CSS选择器即通过某种规则来匹配相应的标签,并为其设置CSS样式,常用的有类选择器.标签选 ...

    2. 前端开发之CSS篇二

      主要内容: 一.CSS的继承性和层叠性 二.盒模型 三.padding属性 四.border属性 五.margin属性 六.标准文档流 七.行内元素和块状元素转换 1️⃣  CSS的继承性和层叠性 1 ...

    3. 前端开发之css篇

      一.css简介 css(Cascading Style Sheets)层叠样式表,是一种为html文档添加样式的语言,主要有两个功能:渲染和布局.使用css主要关注两个点:查找到标签,属性操作 二.c ...

    4. 前端深入之css篇丨2020年前,彻底掌握css动画【animation】

      写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...

    5. 前端深入之css篇丨初探【transform】,手把手带你实现1024程序员节动画

      写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...

    6. 前端深入之css篇丨2020年前,彻底掌握css动画

      马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所以就导致了 ...

    7. [转] Web前端优化之 CSS篇

      原文链接: http://lunax.info/archives/3097.html Web 前端优化最佳实践第四部分面向 CSS.目前共计有 6 条实践规则.另请参见 Mozilla 开发者中心的文 ...

    8. 前端开发之CSS篇四

      一.相对定位 二.绝对定位 三.固定定位 四.z-index 前言 定位有三种:1.相对定位 2.绝对定位 3.固定定位 这三种定位,每种都暗藏玄机,所以要每个单独剖析. 1️⃣   相对定位 1.三 ...

    9. 前端开发之CSS篇三

      主要内容:  一.CSS布局之浮动     二.清除浮动带来的问题     三.margin塌陷问题和水平居中     四.善用父级的的padding取代子级的margin     五.文本属性和字体 ...

    10. 前端深入之css篇|link和@import到底有什么区别?

      写在前面 在真正的前端开发中,我们很少去写行内样式和内嵌样式,通常都是去引用外部样式. 而在我们学习之初的外部样式表都是用link引入的,但是当后来我们学习的逐渐深入,发现@import也可以引入样式 ...

    随机推荐

    1. 任务调度 Quartz 学习(二) CronTrigger

      在Quartz中Trigger有 SimpleTrigger与CronTrigger两种: SimpleTrigger:当需要的是一次性的调度(仅是安排单独的任务在指定的时间及时执行),或者你需要在指 ...

    2. spring常用管理bean注解

      spring提供了多个注解声明Bean为spring管理的Bean @Controller 声明此类是一个MVC类,通常与@RequestMapping一起使用 @Controller @Reques ...

    3. 图书馆排序(Library Sort)

      思路简介,大概意思是说,排列图书时,如果在每本书之间留一定的空隙,那么在进行插入时就有可能会少移动一些书,说白了就是在插入排序的基础上,给书与书之间留一定的空隙,这个空隙越大,需要移动的书就越少,这是 ...

    4. jsp05 指令与动作

      JSP7个动作指令如下 : jsp:forward: 执行页面转向,将请求的处理转发到下一个页面. jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用. jsp:include: 用 ...

    5. 【点分治练习题·不虚就是要AK】点分治

      不虚就是要AK(czyak.c/.cpp/.pas)  2s 128M  by zhb czy很火.因为又有人说他虚了.为了证明他不虚,他决定要在这次比赛AK. 现在他正在和别人玩一个游戏:在一棵树上 ...

    6. 【NOIP】提高组2012 同余方程

      [算法]扩展欧几里德算法 [题解]学完扩欧就可以随便水了... 转化为不定方程ax-by=1. 因为1且题目保证有解,所以方程有唯一解. 紫书曰:同余方程的一个解其实指的是一个同余等价类. 所以满足x ...

    7. FileReader 与canvas结合使用显示图片

      话不多少,直接上代码 function fileChange() { var file = this.files[0]; var imageType = /^image\//; //是否是图片 if ...

    8. Python学习笔记 - day14 - Celery异步任务

      Celery概述 关于celery的定义,首先来看官方网站: Celery(芹菜) 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具. 简单来看,是一个基于pyt ...

    9. 2017多校第8场 HDU 6133 Army Formations 线段树合并

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6133 题意:给你一棵n个节点的二叉树,每个节点有一个提交任务的时间,每个节点总的提交任务的罚时为:提交 ...

    10. ACE_INET_Addr类 API

      ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内.方便用户 ...