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. Spring Web 项目Junit测试报错问题

      测试对象是Web项目的Service类,参照网上查到的资料,按如下方式执行时报错, //使用junit4进行单元测试 @RunWith(SpringJUnit4ClassRunner.class) / ...

    2. 【LA】5135 Mining Your Own Business

      [算法]点双连通分量 [题解]详见<算法竞赛入门竞赛入门经典训练指南>P318-319 细节在代码中用important标注. #include<cstdio> #includ ...

    3. 小程序var that=this

      小程序的js函数中,一般第一句就是var that=this,那么此语句的必要性是什么呢?下面用一段代码来解释这个问题 Page({ //页面的初始数据 loadUsers: function () ...

    4. python初步学习-python数据类型之number(数值)

      数据类型之 Number python number 数据类型用于存储数值. 数据类型是不容许改变的. 这就意味着如果改变 number 数据类型的值,将重新分配内存空间. python支持四种不同数 ...

    5. Python参数输入模块-optparse

      废话: 模块名是optparse, 很多人打成optparser.以至于我一直导入导入不了.搞的不知所以. 模块的使用: import optparse #usage 定义的是使用方法,%prog 表 ...

    6. 基于Django Form源码开发自定义Form组件

      import copy import re class ValidateError(Exception): def __init__(self, detail): self.detail = deta ...

    7. 64_l6

      lightdm-qt5-devel-1.22.0-1.fc26.i686.rpm 19-May-2017 11:11 22854 lightdm-qt5-devel-1.22.0-1.fc26.x86 ...

    8. linux加载指定目录的so文件

      linux加载指定目录的so文件 http://blog.csdn.net/win_lin/article/details/8286125 download urlhttp://download.ch ...

    9. tornado当用户输入的URL无效时转入设定的页面

      今天做web的测验..坑爹的要用tornado...作为一个比较新的用的人还不多的东东...查资料好麻烦.. 下面是当用户输入非法 url时, 显示一个自定义 404 页面提示用户,其访问的页面不存在 ...

    10. 用JavaScript校验日期的合法性

      校验表单时可能会遇到校验日期是否正确.可以利用JS的内置对象Date帮助我们完成日期校验. 思路是首先用被校验日期(假设为A,可能为字符串或数字)创建一个Date对象(假设为B). 然后判断A和B的年 ...