CSS 面试题 目录

请解释 * { box-sizing: border-box; } 的作用。

推荐答案

* { box-sizing: border-box; } 的作用是将所有元素的盒模型都设置为 border-box。这意味着元素的总宽度和总高度包括了元素的 contentpaddingborder,而不是只包含 content。默认情况下,元素的盒模型是 content-box,这意味着设置元素的 paddingborder 会增加元素的总尺寸。使用 border-box 可以更容易地控制元素的尺寸,避免出现布局错乱,尤其是在响应式布局中。

本题详细解读

盒模型概念回顾

在 CSS 中,每个 HTML 元素都被看作是一个矩形盒子,这个盒子由四个部分组成:

  1. content (内容):元素的内容,例如文本、图片等。
  2. padding (内边距):内容和边框之间的空白区域。
  3. border (边框):围绕内容和内边距的边框。
  4. margin (外边距):边框之外的空白区域,用于控制元素之间的距离。

CSS 定义了两种盒模型:content-boxborder-box

content-box (默认盒模型)

这是 CSS 元素的默认盒模型。当元素的 box-sizing 属性设置为 content-box 时,设置元素的 widthheight 属性仅仅决定了元素内容区域的大小。元素的总宽度和高度会包括内容区域的宽度和高度,以及 paddingborder 的宽度。

公式如下:

  • 元素总宽度 = width + padding-left + padding-right + border-left + border-right
  • 元素总高度 = height + padding-top + padding-bottom + border-top + border-bottom

这种盒模型在布局时,容易产生意想不到的元素尺寸变化,尤其是在设置了 paddingborder 时,元素总宽度和高度会超过预期的值。

border-box (替代盒模型)

当元素的 box-sizing 属性设置为 border-box 时,元素的 widthheight 属性决定了包括内容区域、paddingborder 在内的总尺寸。

公式如下:

  • 元素总宽度 = width (已经包含了 padding 和 border)
  • 元素总高度 = height (已经包含了 padding 和 border)

如果元素设置了 padding 或者 border, 那么内容区content将会减小, 总宽度/高度仍然是设置的 width 和 height。

这种盒模型更符合我们对元素尺寸的直观理解,设置了 width 和 height 就是元素总的尺寸,不会因为 padding 和 border 的改变而发生变化,更容易控制元素的尺寸,使得布局更直观、更容易维护。

* { box-sizing: border-box; } 的意义

* 是 CSS 中的通用选择器,它会选中页面上的所有元素。因此,* { box-sizing: border-box; } 会把页面上所有元素的 box-sizing 属性都设置为 border-box

这种做法的优点是:

  1. 避免尺寸计算复杂性: 所有元素的尺寸计算方式都是统一的,都使用 border-box 模型,避免了 content-box 盒模型带来的尺寸计算复杂性。
  2. 简化布局: border-box 盒模型能够使我们更直观地控制元素的尺寸,更容易进行响应式布局,避免在不同屏幕尺寸下出现布局错乱。
  3. 提高可维护性: 所有元素都使用同一套盒模型,降低了维护难度,也使得团队成员更容易理解和协作。

因此,在现代 CSS 开发中,通常都会在 CSS 文件开头加上 * { box-sizing: border-box; } 来进行全局的盒模型设置。

纠错
反馈