当前位置: 首页 > news >正文

【面试题】面试官:说说你对 CSS 盒模型的理解

前言

CSS 盒模型是 CSS 基础的重点难点,因此常被面试官们拿来考察候选人对前端基础的掌握程度,这篇文章将对 CSS 盒模型知识点进行全面的梳理。

我们先看个例子:下面的 div 元素的总宽度是多少呢?

js

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> <title>CSS 盒模型(https://github.com/webharry/fe-interview)</title>
<style>
div {background-color: lightgrey;width: 200px;border: 10px solid yellow;padding: 10px;margin: 20px;
}
</style>
</head>
<body><div>这里是盒子内的实际内容。有 10px 内间距,20px 外间距、10px 黄色边框。</div>
</body>
</html>

要回答这个问题,我们首先得弄明白 CSS 盒模型。

什么是 CSS 盒模型?

每个HTML元素都由一个矩形框(盒子)组成,称为盒模型。CSS 盒模型定义了一个 HTML 元素的尺寸和边距。

盒模型的各个部分

CSS 中组成一个盒子需要:

  • Content box: 这个区域是用来显示内容,大小可以通过设置 width 和 height
  • Padding box: 包围在内容区域外部的空白区域;大小通过 padding 相关属性设置。
  • Border box: 边框盒包裹内容和内边距。大小通过 border 相关属性设置。
  • Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。

如图所示:

CSS 有两种盒模型:标准盒模型和IE盒模型。

  • 标准盒模型:元素的宽度和高度只包括内容(content),不包括内边距(padding)、边框(border)和外边距(margin)。
  • IE盒模型:元素的宽度和高度包括内容(content)、内边距(padding)和边框(border),但不包括外边距(margin)。

两种盒模型的区别是什么?

这两种盒模型的区别在于它们如何计算元素的宽度和高度,以及如何处理元素的内边距、边框和外边距。

  • 在标准盒模型中,元素的宽度和高度只包括内容,因此设置宽度和高度时需要考虑内边距、边框和外边距对它们的影响。
    • 如图:

  • 而在IE盒模型中,元素的宽度和高度包括内边距和边框,因此设置宽度和高度时不需要考虑内边距和边框对它们的影响。
    • 如图:

重要:  当您指定一个 CSS 元素的宽度(width)和高度(height)属性时,你只是设置内容区域(content)的宽度和高度。

两种盒模型间如何转换?

可以通过设置 CSS 的 box-sizing 属性来指定使用哪种盒模型。默认情况下,box-sizing 属性的值为 content-box,即使用标准盒模型。可以将其设置为 border-box,即使用IE盒模型。

写在最后

现在,我们再来看文章开头的例子,答案显而易见。因为在默认情况下,box-sizing 属性的值为 content-box,即使用标准盒模型。所以例子中的 div 元素总宽度是 200+10x2+10x2=240px。

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

http://www.lryc.cn/news/68559.html

相关文章:

  • 【ROS2】学习笔记
  • Springboot +Flowable,流程表单应用之外置表单(JSON形式)(二)
  • JavaScript如何使用if语句
  • XSS攻击以及java应对措施
  • yolo 训练
  • 谷歌chrome浏览器升级新版后字体显示不清楚解决方案
  • 在外包干了三年,我废了……不吹不黑!
  • 【Vue】学习笔记-消息的订阅与发布
  • 大疆无人机 MobileSDK(遥控器/手机端)开发 v5版<1>
  • azkaban介绍
  • 自学黑客(网络安全)必学内容
  • Java每日一练(20230518) 移除元素、跳跃游戏II、复原IP地址
  • diff命令和vimdiff命令
  • AcWing 797.差分(C++)
  • Python每日一练(20230515) 只出现一次的数字 I\II\III
  • 基于【EasyDL】【图像分类】实现农作物病害识别小程序
  • 元宇宙又“死”了!Epic老板:你当6亿用户是摆设?
  • 阶段小结2022
  • linux0.12-8-11-vsprintf.c
  • Node.js 与 WebAssembly
  • OpenCL编程指南-4.4矢量操作符
  • 索洛模型(二)
  • 【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)
  • 使用Atmel Studio开发Arduino的ATmega328P单片机
  • docker基础命令
  • 数组名+1和数组名+1的区别
  • 开放原子训练营(第三季)inBuilder低代码开发实验室初体验
  • sql数据定义语句(cascade,set,null,no action的区别)
  • Java进程(基础)
  • Android之 Activity活动详解