05_CSS-继承-层叠-类型

111 阅读6分钟

CSS-继承-层叠-类型

CSS的某些属性具有继承性(Inherited):

  1. 如果一个属性具备继承性, 那么在该元素上设置后, 它的后代元素都可以继承这个属性,相当于给每一个后代元素都设置了相同的样式

  2. 当然, 如果后代元素自己有设置该属性, 那么优先使用后代元素自己的属性(不管继承过来的属性权重多高)

  3. 常见的文本和字体相关的样式 (例如: font-size/font-family/font-weight/line-height/color/text-align等类似于font-*text-*格式的属性 ) 都具有继承性

    但并不是全部的文本和字体相关的样式都会被继承(例如: text-decoration等属性没有继承性)

层叠

对于一个元素来说, 相同一个属性我们可以通过不同的选择器给它进行多次设置

对应的属性值会被一层层覆盖上去

最终只有最后一个或者优先级最高的那个会生效

判断标准

  1. 选择器的权重, 权重大的生效, 根据权重可以判断出优先级
  2. 先后顺序, 权重相同时, 后面设置的生效

选择器权重

按照经验,为了方便比较CSS属性的优先级,可以给CSS属性所处的环境定义一个权值(权重)

选择器权重
!important10000
内联样式1000
id选择器100
类选择器、属性选择器、伪类10
元素选择器、伪元素1
通配符0

层级可以被累加

Snipaste_2022-10-19_14-00-42.png

HTML元素的类型

在前面我们会经常提到div是块级元素会独占一行, span是行内级元素会在同一行显示.

到底什么是块级元素, 什么是行内级元素呢?

HTML定义元素类型的思路:

HTML元素有很多, 比如h元素/p元素/div元素/span元素/img元素/a元素等等

对于一个h1元素的标题, 我们必然是希望它独占一行的, 其他的内容不应该和我的标题放在一起

对于一个p元素的段落, 必然也应该独占一行, 其他的内容不应该和我的段落放在一起

而类似于img/span/a元素, 通常是对内容的某一个细节的特殊描述, 没有必要独占一行

所以, 为了区分哪些元素需要独占一行, 哪些元素不需要独占一行, HTML将元素区分(本质是通过CSS的)成了两类:

  1. 块级元素(block-level elements): 独占父元素的一行
  2. 行内级元素(inline-level elements): 多个行内级元素可以在父元素的同一行中显示

对于任何的块级元素或者行内级元素而言,属性的默认值一般为auto

例如: width和height的默认值即为auto

表示的是自己不进行任何的设置,其具体的值由浏览器来自主进行决定

display

CSS中有个display属性,能修改元素的显示类型,有4个常用值

属性说明描述
block让元素显示为块级元素1. 在父级元素中独占一行 2. 可以设置宽度和高度 3. 高度默认由内容来决定 4. 即使设置了元素的宽度,元素依旧独占一行
inline让元素显示为行内级元素1. 可以和其它行内级元素在同一行 2. 不可以为行内非替换元素设置宽度和高度 3. 默认的宽度和高度由元素内容的宽度和高度决定
inline-block让元素同时具备行内级、块级元素的特征1. 可以和其它行内级元素在同一行 2. 可以设置元素的宽度和高度 3. 默认的宽度和高度由元素内容的宽度和高度决定
none隐藏元素隐藏元素

注意事项

元素类型描述
块级元素,行内块元素1. 一般情况下,可以包含其他任何元素(比如块级元素、行内级元素、inline-block元素) 2. 特殊情况,p元素不能包含其他块级元素
行内级元素一般情况下,只能包含行内级元素
  1. 块级元素和行内块元素可以嵌套其它元素
  2. P元素不能嵌套div元素, 否则渲染会混乱
  3. 行内元素不能嵌套块级元素, 否则渲染会混乱

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

  <!-- h1/p/div -->
  <!-- span/a/img/strong -->

  <div>
    <h1></h1>
    <p></p>
    <a href=""></a>
    <img src="" alt="">
  </div>

  <!-- 特殊: 不要在p元素中放div元素 -->
  <p>
    123
    <div>我是div元素</div>
    abc
  </p>

  <!-- 行内级元素中不要放块级元素 -->
  <span>
    321
    <div></div>
    <p></p>
    cba
  </span>

</body>
</html>
  1. 在严格意义上讲,并不是所有的行内级元素(inline level)都不可以设置宽度和高度

    而是仅仅只有行内非替换元素(例如a, span等)这类元素是不可以设置元素的宽度和高度的

    但是对于行内替换元素(例如img,input等)这类元素是可以设置元素的宽度和高度的

隐藏元素的方式

方式描述备注
display: none元素不显示出来, 并且也不占据位置, 不占据任何空间(和不存在一样) 元素本身还是存在于DOM树中只能设置元素是显示还是隐藏
visibility: hidden设置为hidden, 虽然元素不可见, 但是会占据元素应该占据的空间 visibility属性的默认值为visible 元素本身还是存在于DOM树中只能设置元素是显示还是隐藏
rgba设置颜色,将alpha的值设置为0可以通过此方法实现文本或某些特定元素的透明 元素本身还是存在于DOM树中,会占据元素应该占据的空间 元素本身还是可以被选中的可以设置元素透明度不影响子元素 不推荐使用 该属性只能使文本或某些特定元素透明,局限性过大
opacity: 0设置整个元素的透明度, 会影响当前元素和当前元素下的所有子元素 元素本身还是存在于DOM树中 会占据元素应该占据的空间可以设置元素透明度 可以设置元素自身和元素下所有子元素的透明度

overflow

overflow用于控制内容溢出时的行为

描述
visible溢出的内容照样可见 --- 默认值
hidden溢出的内容直接裁剪
scroll溢出的内容被裁剪,但可以通过滚动机制查看 会一直显示滚动条区域,滚动条区域占用的空间属于width、height 默认情况下会同时显示水平滚动条和垂直滚动条
auto自动根据内容是否溢出来决定是否提供滚动机制
  1. 如果在容器中出现了滚动条,那么这个滚动条在默认情况下,会需要占据一定的空间

  2. 溢出的文本并不占位,不会影响标准流中的其它元素的布局

    所以如果后边有其它元素,那么后边的其它元素会覆盖在溢出的文本上

  3. 设置overflow后可能会对当前元素的line-height产生一点点的增加