《CSS世界》笔记

193 阅读3分钟

块级元素

常见的块级元素有 divlitable 等。

块级元素display 为 block 的元素 不是一个概念。例如,li 元素默认的 display 值是 list-item, table 元素默认的 display 值是table,但是它们均是“块级元素”,因为它们都符合块级元素的基本特征,也就是一个水平流上只能单独显示一个元素,多个块级元素则换行显示。

正是由于“块级元素”具有换行特性,因此理论上它都可以配合clear属性来清除浮动带来的影响。

每个元素都有两个盒子,外在盒子内在盒子。外在盒子负责元素是可以一行显示,还是只能换行显示;内在盒子负责宽高、内容呈现什么的。

在CSS中,盒子分内在盒子和外在盒子,显示也分“内部显示”和“外部显示”,同样地,尺寸也分 内部尺寸外部尺寸。其中“内部尺寸”英文写作“Intrinsic Sizing”,表示 尺寸由内部元素决定;还有一类叫作“外部尺寸”,英文写作“Extrinsic Sizing”,宽度由外部元素决定

内在盒子”又被分成了4个盒子,分别是 content boxpadding boxborder boxmargin box

width的默认值是auto,它具有以下几种表现:

  1. 充分利用可用空间

  2. 浮动、绝对定位、inline-block 元素或 table 元素,取决于内部元素宽度

  3. 最小宽度

  4. 超出父容器宽度

position属性值为absolutefixed的元素中。在默认情况下,绝对定位元素的宽度表现是“包裹性”,宽度由内部尺寸决定。

当 left/right 或 top/bottom 对立方位的属性值同时存在的时候,元素的宽度表现为“格式化宽度”,其宽度大小相对于最近的具有定位特性(position属性值不是static)的祖先元素计算。

包裹性

指的是元素尺寸由内部元素决定,但永远小于“包含块”容器的尺寸(除非容器尺寸小于元素的“首选最小宽度”)

宽度分离原则

在 css 中,当我们给一个盒子的width设置为一个具体的数值时,我们希望这个盒子的宽度就固定为这个值不要改变,但是widthheight都是作用在 content box 上,而由于paddingborder的存在使得盒子的实际大小会比我们设置的width大小要大,而我们不希望出行这种情况。这时就可以使用宽度分离原则

所谓“宽度分离原则”,就是CSS中的width属性不与影响宽度的padding/border(有时候包括margin)属性共存。

本来是在一个盒子里面设置 widthpaddingborder

<div class="box"></div>
.box {
  width: 200px;
  padding: 0 20px;
  border: 10px solid pink;
}

现在分开写,在元素外面再嵌套一层标签,父元素定宽,子元素width使用的是默认值auto,所以会自动填满父级容器,这样不管怎么设置paddingborder,盒子的整体宽度都不会变化。

<div class="father">
   <div class="box"></div>
</div>
.father {
  width: 200px;
  
  .box {
    margin: 0 20px;
    padding: 0 20px;
    border: 10px solid pink;
  }
}

box-sizing 属性

box-sizing属性可以改变width属性作用的盒子,默认情况下width作用于 content box,当我们将box-sizing的值设置为border-box时,这个时候width就作用于 border box 了,也就是说这时我们再设置paddingborder,盒子的宽度不会改变。

width 属性 跟 height 属性的不同点

一个盒子的height属性的属性值如果是百分比,它的父级必须具有具体的高度值才会生效。

width属性则不同,就算父级元素没有设置具体的宽度,百分比值也可以生效。

内联元素

内联盒模型