前端八股之CSS

91 阅读3分钟

斜线为重点掌握内容

盒子模型

什么是盒模型?

在css中的盒子, 把HTML的元素封装成盒子用来设计和布局时使用, 包含以下元素

image.png

从外到内, 依次为margin border padding content

详细说明: 内容(content):盒子的内容,主要用来显示文字和图像 。

填充(padding):也叫内边距,用来清除内容周围的区域,它是透明的。

边框(border):围绕在内边距和内容外的边框,盒子的外壳。

边距(margin):也叫外边距,用来清除边框外的区域,它跟填充一样都是透明的。

标准盒模型,怪异盒模型?

标准盒模型: W3C标准,

内盒尺寸: width+ padding+ border 外盒尺寸: width+ padding+ border + margin

怪异盒模型:IE盒模型

内盒模型: width 外盒模型: width+padding

image.png

CSS选择器

  1. 元素选择器(Type Selector)  选取所有相同类型的HTML元素。

    p {
      color: blue;
    }
    
  2. 类选择器(Class Selector)  选取含有特定类的元素。

    .important {
      font-weight: bold;
    }
    
  3. ID选择器(ID Selector)  选取特定ID的元素。

    #header {
      background-color: #333;
    }
    
  4. 属性选择器(Attribute Selector)  选取带有特定属性的元素。

    [disabled] {
      cursor: not-allowed;
    }
    
  5. 后代选择器(Descendant Selector)  选取位于另一个元素内的元素。

    div p {
      color: red;
    }
    
  6. 子选择器(Child Selector)  选取作为另一元素的直接子元素的元素。

    ul > li {
      font-size: 14px;
    }
    
  7. 相邻同胞选择器(Adjacent Sibling Selector)  选取紧随另一元素后的元素,且二者有相同父元素。

    h1 + p {
      margin-top: 0;
    }
    
  8. 通用同胞选择器(General Sibling Selector)  选取位于另一元素后的所有元素,且二者有相同父元素。

    h1 ~ p {
      font-size: 16px;
    }
    
  9. 伪类选择器(Pseudo-class Selector)  选取处于特定状态的元素。

    a:hover {
      color: #ff00ff;
    }
    
  10. 伪元素选择器(Pseudo-element Selector)  选取元素的特定部分。

    p::first-line {
      font-weight: bold;
    }
    
  11. 分组选择器(Grouping Selector)  同时选取多个选择器。

    h1, h2, h3 {
      text-align: center;
    }
    

CSS选择器权值比较

  1. 内联样式( Inline style )的权值最高,例如 style="color: blue;" 在HTML元素中定义的样式。
  2. ID选择器的权值次之,每个ID选择器加权值为100
  3. 类选择器、属性选择器和伪类选择器的权值再次之,每个此类选择器加权值为10
  4. 元素(类型)选择器和伪元素选择器的权值最低,每个此类选择器加权值为1

例如,对于以下CSS规则:

#header .menu li a {
  color: blue;
}

权值计算如下:

  • ID选择器 #header 加权 100
  • 类选择器 .menu 加权 10
  • 元素选择器 li 加权 1
  • 元素选择器 a 加权 1

总权值为 100 + 10 + 1 + 1 = 112

对于复杂的选择器,权值是累积的。例如:

div#header > ul.menu > li.active a {
  color: green;
}

权值计算如下:

  • 元素选择器 div 加权 1
  • ID选择器 #header 加权 100
  • 类选择器 .menu 加权 10
  • 类选择器 .active 加权 10
  • 元素选择器 li 加权 1
  • 元素选择器 a 加权 1

总权值为 1+100 + 10 + 10 + 1 + 1 = 123

需要注意的是,伪元素选择器(如 ::before 和 ::after)的权值与它们所附加的选择器的权值分开计算。例如:

css

复制

#header::before {
  content: "Header";
}

权值为 100 + 1 = 101

在CSS中,权值高的规则会覆盖权值低的规则。如果两个规则的权值相同,后面的规则会覆盖前面的规则(即CSS中的“层叠”特性)。

CSS浮动及清浮动 以及 BFC

见此篇文章, 写的非常好 CSS面试常考题:清除浮动 - 掘金 (juejin.cn)

BFC, 定位, Flex定位, 浮动等布局问题

应用: 圣杯和双飞翼模型, 水平垂直居中

见此篇文章, 写的非常好:圣杯布局/双飞翼布局/flex/grid等,实现CSS三栏自适应布局的几种方法 - 掘金 (juejin.cn)

CSS3新特性