CSS经验总结

377 阅读6分钟

float flex grid 选择思路

  • 个人项目,不太考虑兼容性,grid
  • 公司项目,适度考虑兼容性,flex
  • 政府项目,非常考虑兼容性,float

!important

  • 如果同一个元素被两处不同的描述方式的selector所选中,时,且都有color:red!important,那么就需要比较选择器权重了

CSS的语法中一共只有两种写法

  • selector{}
  • @xxx{} @font-face(...); @media(...); @import(...); 注意分号是一定要有的

如何学写CSS布局

  • 第一遍先听课抄一遍大致记住思路
  • 第二遍,忘记一切,只记住思路,自己写一遍
  • 第三遍,对比一下区别,再手写一遍完美的,加深理解

body的backgorund会扩散至整个网页

  • 即使body的宽高没有到全屏,body的backgorund依旧会扩散至整个网页

initial,inherit,unset,

initial inherit

  • 使用 initial 来完全消除任何样式继承
  • inherit 确保元素在它一整条父元素链上找最近的父元素上来继承样式。
  • 因为当下的这个element很可能被其他写法的css给覆盖
  • 类似下面,前者广泛作用于tr,后者更细节作用于某一个tr
body tr{...}
tr:nth-child(1){...}

initial inherit 例子 initial inherit 终极理解

  • 不是所有的css属性都具有继承性
  • initial 关键字用于设置 CSS 属性为它的默认值,由浏览器默认设定来定义
  • 假设是一个父->wrapper-子的结构
  • 如果父上设置了可继承的属性,那么这样的属性正常情况下也会作用于warapper和子元素
  • 但如果在wrapper上对父上的属性(具有继承性的)设置initial,则wrapper与子元素都会不受父属性的影响

unset

  • unset表示如果该属性为可继承属性,则值为inherit;否则值为initial。实际上,设置unset相当于不设置。没什么用 unset例子

选择器中的坑

:last-of-type

  • type指的是element type 比如 p h2 div其实就是tagName
  • 根据selector先找到element
  • 根据element去找他最近的父元素
  • 从这个父元素往里找最后一个element即可
  • 直接看实例,没上面那个坑

一道考题:


可以用这个去测试

flex

三句话让div中仅有的一个物体垂直且水平居中

垂直水平居中

三句话让单个元素水平居中

让单个元素水平居中

平均布局

最好的平均布局写法(不一定要加wrapper)

最好的平均布局写法

最好的平均布局写法

  • 结构:父元素>wrapper>子元素
  • wrapper设置flex
  • wrapper设置flex换行,不然所有item挤一行
  • 一行之中,item与item之间的间距需要自己去算
  • 中间包的这一层的负margin-right,值为item之间间距

简化版本(用于一行item数小于等于2)

简化版本(用于一行item数小于等于2)

  • 结构:父元素>子元素
  • 可使用space-between

外边距合并

之前有总结过

width:100%的注意事项

  • width:100% 在实际使用过程中很可能会不如你意

提问,一个元素身上的width100%究竟是取父元素什么数值的100%?

  • 结论如下
    • 给子元素写上width100%后,一定是从父元素的cW拿值
    • 如果子元素盒模型是CB 那么父元素的cW百分百作用于子元素的cW
    • 如果子元素盒模型是BB 那么父元素的cW百分百作用于子元素的cW+pW+bW 在线示例深度分析

width auto 与 100%之前的区别是什么

width auto 与 100%之前的区别是什么

line-height通常用1.2 而不是120% 百分数形式

  • 两者对于子元素的继承影响是不同的
  • 如果line-height:1.2仅仅写在父元素身上,且子元素有自己的font-size:20px
    • 前者会让子元素的line-height为1.2*20=24px
    • 而后者会让子元素的line-height为父元素的line-height计算后的结果(父元素font-size*120%),而不是根据子元素自身去动态调整
  • line-height通常用1.2 而不是120% 百分数形式

css div border 绘制三角形 梯形

css div border 绘制三角形 梯形

渐变 padding 画渐变边框的圆形

渐变 padding 画渐变边框的圆形

水平居中的最简单方式margin: 0 auto

first-child nth-child 彻底理解

先理解选择器1 :first-child选择器1 :nth-child(n)

  • 选择器1 所有后代中的 第1个 第n个

然后同等理解选择器1>:first-child选择器1>:nth-child(n)

  • 选择器1 直系后代中的 第1个 第n个

再理解选择器1 选择器2:first-child选择器1 选择器2:nth-child(n)

  • 选择器1 所有后代中的 第1个 第n个位置 还必须是满足 选择器2

然后同等理解选择器1>选择器2:first-child选择器1>选择器2:nth-child(n)

  • 选择器1 直系后代中的 第1个 第n个位置 还必须是满足 选择器2

再理解选择器1:first-child选择器1:nth-child(n)

  • 连父元素都不指定了,表示所有结构下的第1个 第n个元素 还必须是满足选择器1的

.box :nth-of-type(2){

  • 先找.box类
  • 空格表示全结构扫描
  • nth-of-type表示需要对标签名进行归类
  • 归类完成之后在每个类之中寻找第二项

如何制作图标外有一层圆形

左定宽,右auto,中间拿剩余所有的常用栏目布局

flex

如何制作这样一个flex,用到margin-right:auto

// 父
display: flex;
justify-content: space-between;
align-content: center;
/ 子, 用了flex布局的item还是可以设置marginmargin-right: auto; // 用这个比用flex-grow:1 好得多

max-width: 40vw; // 以下几句用于设置文字过长显示省略号
text-overflow: ellipsis; 
white-space: nowrap;
overflow: hidden;

grid

左边定宽,右边auto,中间拿剩余所有空间即1fr

列表样式优化

  • list-style-position:inside 把圆点子塞到里面去
  • margin-left: 1em; 向右移一个字 (推荐这种) 列表样式优化

让列表由垂直变水平不一定要用浮动,可以用 display:inline-block