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. 2015/9/3 Python密码输入屏蔽字符

      在使用Python的过程中,想输入账号和密码,但是密码会随着输入显示在屏幕上,为了解决这个问题需要用到msvcrt模块 这里是使用代码 import msvcrt, sys def pwd_input ...

    2. Item27--优先考虑泛型方法

      类型推导:发生在以下三个地方.1.Java编译器根据泛型方法传入的参数,推导出具体的类型.2.Java编译器,根据泛型构造器传入的类型来推导出实际要构造的实例类型.3.Java编译器根据表达式的目标类 ...

    3. 【bzoj1594-猜数游戏】线段树

      题解: 矛盾只有两种情况: 一.先前确定了x在区间(l,r),但是现在发现x在区间(l1,r1),并且两个区间不相交. 二.一个区间的最小值是x,这个区间中有一个子区间的最小值比x更小. 首先可以明确 ...

    4. 【BZOJ1038】【ZJOI2008】瞭望塔 [模拟退火]

      瞭望塔 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 致力于建设全国示范和谐小村庄的H村村 ...

    5. 【BZOJ1560】【JSOI2009】火星藏宝图 [DP]

      火星藏宝图 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Samp ...

    6. HDU 2639 Bone Collector II (dp)

      题目链接 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in ...

    7. poj 1797

      2013-09-08 09:48 最大生成树,输出生成树中最短的边儿即可 或者对边儿排序,二份答案+BFS判断是否1连通N 时间复杂度都是O(NlogN)的 附最大生成树pascal代码 //By B ...

    8. 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

      转载自:https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html 目标环境: 比如,目标存在一个上 ...

    9. java===编译引用第三方文件的类(原创)

      http://blog.csdn.net/m53931422/article/details/42174609 http://blog.csdn.net/u012450329/article/deta ...

    10. mongodb 学习笔记 2 --- 修改器

      修改器是为了爱update文档时,不需要传入整个文档就能修改当前文档的某个属性值,修改器用法如下: 假设数据库中foo集合中存在如下文档:{"name":"jack&qu ...