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. 使用shell脚本往文件中加一列

      上午大学同学问了我一个脚本的问题,大概需求就是看到所有端口的开启情况,还要知道每个端口的应用程序路径,而且要和之前的数据齐平,就是再加一列数据.我腚眼一看,非常容易嘛,但由于当时忙,所以就说中午给他发 ...

    2. codeforces——contest 864 problemE

      Polycarp is in really serious trouble — his house is on fire! It's time to save the most valuable it ...

    3. HDU 1284 钱币兑换问题 (dp)

      题目链接 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法.   Input 每行只有一个正整数N,N小于327 ...

    4. bzoj 1588 bst

      用set存下就好了. /************************************************************** Problem: 1588 User: BLADE ...

    5. Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶

      简介 github地址:https://github.com/isnowfy/snownlp SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的 ...

    6. 数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作

      AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树.   2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1).   也就是说,AVL树,本质上 ...

    7. linux irq 自动探测

      前言 编写驱动的时候,经常会用到中断,这时候我们在驱动初始化时就得申请中断,那么问题来了,中断号是多少呢?以前的中断号在板级相关的头文件里面已经静态定义好了,bsp的代码在内核启动过程也会根据那个帮我 ...

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

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

    9. 在LINUX平台上手动创建多个实例(oracle11g)

      在LINUX平台上手动创建多个实例(oracle11g) http://blog.csdn.net/sunchenglu7/article/details/39676659 ORACLE linux ...

    10. Percona XtraDB Cluster(PXC)原理

      Percona XtraDB Cluster(PXC)原理 介绍: PXC曾经属于一套近乎最完美的mysql高可用集群解决方案(现mgr总体上要优于pxc),相比传统的基于主从复制模式的集群架构MHA ...