CSS 的难点与套路
难点
CSS 的难就难在它的不正交,不同属性有时候会相互影响。
border影响margin合并
上下方向的相邻元素会出现 margin 合并的情况,这时候如果两者的之间有个空白的 div 元素,这个 div 元素没有 height、margin 以及 padding,只是设置 border-top 或者 border-bottom,即可化解 margin 合并。或者设置该 div 为 display: table 或者 display: flex
父子元素之间的 margin 合并的解决方法,可以给父元素添加display:flex 、display: table 、overflow: hidden或者添加上下方向的 padding 和 border
- 
    
给
li元素设置display: block的话,li自带的 list-style 就不见了。display: inline、display: inline-block、display: flex,display: table一样会出现这种情况。 - 
    
position: absolute影响display: inline和display: inline-block的元素。对某元素使用position: absolute后 ,该元素由原本的display: inline或者display: inline-block转变为display: block的元素。 - 
    
transform影响position:如果子元素为position:fixed如果父元素使用了transform属性,例如transform: scale(1.1)则子元素相对于父元素进行固定定位,而不是之前的效果。 - 
    
flow元素影响inline元素,inline元素里的文字似乎能够感知到flow元素,不会被flow元素遮挡文字。 
套路
float 布局和 flex 布局可以胜任绝大部分的情况。
float 对 IE 兼容好,flex 兼容手机浏览器、现代的浏览器。
水平居中的套路
对于 block 元素:
child 宽度不确定:左右方向 margin 给一个确定数值。
child 宽度确定:左右方向的 margin 为 auto。
对于 inline 元素:parent 设置 text-align:center,child 设置 display:inline 或者 display:inline-block。
垂直居中的套路
child 高度确定以及不确定:设置 padding-top,padding-bottom。
parent 高度确定:table 布局 和 flex 布局可以胜任绝大部分的情况。IE 使用 table 或者用 div 模拟 table。flex 兼容手机浏览器、现代的浏览器。