【基础巩固📔】- 带你搞懂CSS盒模型

简介: 它其实就是我们这篇文章的主角-盒模型。由这张图可以看出,盒模型包含了`margin`、`border`、`padding`、`content`这四个部分。>所有HTML元素都可以看作盒子,而我们平时就是盒子的搬运工。## 介绍标准模型和IE模型,以及他们的区别🍈它俩的**区别就一个,计算宽度(高度)的方式不一样。**
大家好,我是Ned👀,一个刚刚入门前端未满两年的大三小学生🌹

未来路还长🎉, 一起努力加油吧❤~

最近在准备春招了,复习一些基础的知识点,整合成一个专栏发出来,希望可以帮助到更多的小伙伴们~🥰

盒模型📦

先用一张图来说明一下我会怎么来介绍盒模型:
image.png

什么是盒模型🍇

其实我们大家都能经常看见它,尤其是我们前端的小伙伴们,在浏览器中打开f12就能看见这样一个动态变化的图。

image.png
它其实就是我们这篇文章的主角-盒模型。由这张图可以看出,盒模型包含了marginborderpaddingcontent这四个部分。

所有HTML元素都可以看作盒子,而我们平时就是盒子的搬运工。

介绍标准模型和IE模型,以及他们的区别🍈

它俩的区别就一个,计算宽度(高度)的方式不一样。

  • 标准盒模型

image.png
width = content

总宽度 = width + margin + border padding

margin包含mrgin-left与margin-right 其他同理
  • IE盒模型

image.png
width = content + border + padding

总宽度 = width + margin

CSS如何设置盒模型,以及计算对应的宽和高🍉

css中有一个属性:box-sizing,我们可以通过这个属性去设置标准盒模型(content-box)或者是IE盒模型(border-box),默认为标准盒模型。
详细参数可以去W3c去看一下,此处不做说明: box-sizing

如何去计算元素的宽(高)? 我们在得知它是哪种盒模型之后就可以依据我们上文的公式去计算了,可以打开F12,滑到图那里,去查阅该元素四部分(marginborderpaddingcontent)的值是多少,完后进行计算即可。

js如何设置获取盒模型对应的宽和高🍍

  • dom.style.width/height

这个方法只能获取写在行内样式中的宽度,写在style标签中和使用link外链都是获取不到的,我们下面来看一下:

<div id="div">这是一个div</div>
div{
    width:300px;
    margin-left:50px;
    border:25px;
    padding-right:60px;
    background-color:pink;
}
let divWidth = document.getElementById("div").style.width;
console.log(divWidth);

我将样式写在了style标签内,看看他是否能打印出来div的宽度。

image.png
是打不出来的,那在行内写一个宽度为100px再试试。

image.png
成功将宽度打印了出来。

如此之外还有三个api可以使用:

  • dom.currentStyle.width/height 取到的是最终渲染后的宽和高,只有IE支持此属性。
  • window.getComputedStyle(dom).width/height 同上一个但是多浏览器支持,IE9以上支持
  • dom.getBoundingClientRect().width/height 也是得到渲染后的宽和高,大多浏览器支持。IE9以上支持,除此外还可以取到相对于视窗的上下左右的距离。

根据盒模型解释边距重叠🍓

当两个外边距相遇时,他们将形成一个外边距,合并后的外边距高度等于两个发生合并的外边距的高度中的较大者。

注意:只有普通文档流中块框的垂直外边距才会发生外边距合并,行内框、浮动框或绝对定位之间的外边距不会合并。

再用一个demo来说明一下:

<div class="div1">这是一个div</div>
<div class="div2">这是一个div</div>
    .div1{
        width:300px;
        margin:70px;
        border:25px;
        padding-right:60px;
        background-color:pink;
    }
    .div1{
        width:300px;
        margin:50px;
        border:25px;
        padding-right:60px;
        background-color:pink;
    }

一个外边距是70px一个外边距是50px没有做其他布局的情况下这两个盒子应该是上下状堆在一起的,我们看一下他们两个间距到底是多少。

image.png
根据这两个箭头所指,我们可以看到上方橙色全部都是第一个divmargin,下方浏览器清晰的写出了margin值为70px,也就是说,产生了边距重叠,并且确实合并成了较大的那个

image.png

图画的是不是有点不忍直视emm,下次努力!!!

BFC(边距重叠解决方案,还有IFC)解决边距重叠🍋

有些时候我们不希望他发生边距重叠,我们采用BFC和IFC来解决。

先普及一下概念,FC就是Fomatting Context。它是页面中的一块渲染区域。而且有一套渲染规则,它决定了其子元素将怎样定位。以及和其它元素的关系和相互作用.BFC和IFC都是常见的FC。
分别叫做Block Fomatting Context 和Inline Formatting Context。

我是这样理解的:他指定了一块环境,在这块环境内部的元素布局与外界不产生相互影响

以BFC为例,来介绍一下它的渲染规则:

  • 内部盒子垂直排列,间距由margin决定
  • 在同一BFC下,相邻两个盒子会发生边距重叠现象
  • 计算BFC高度的时候,浮动元素也会参与计算
  • BFC的区域不会与浮动的区域重叠

介绍完规则再来介绍一下如何创建BFC:

  • overflow不为visible;
  • float的值不为none;
  • position的值为absolute或fixed;
  • display属性为inline-blocks,table,table-cell,table-caption,flex,inline-flex;

规则太多,我挑个举例子吧:

    <div class="left"></div>
    <div class="right"></div>
    div {
        width:300px;
    }
    .left {
        width: 100px;
        height: 150px;
        float: left;
        background: black;
    }
    .right {
        height:200px;
        background-color:red;
    }

image.png
可以看到浮动的地方与另一块内容重叠了,这个时候我们在红色区域创建一个BFC,使其不重叠。

.right {
  overflow:hidden;
  height:200px;
  background-color:red;
}

image.png

他们两个成功被分开了,证明我们的BFC区域创建成功了。

其余的规则如果也想验证一下可以自己尝试一下~

在证明一下BFC能够解决边距重叠问题:

    <div id="margin">
        <p>1</p>
        <div style="overflow: hidden">
            <p>2</p>
        </div>
        <p>3</p>
        <p>4</p>
    </div>
    * {
        padding: 0;
        margin: 0;
    }
    #margin {
        background: #000;
        overflow: hidden;
    }
    p {
        margin-top: 15px;
        margin-bottom: 25px;
        background: red;
    }

image.png
我们看2,它与1、3都没有边距重叠,这是因为它的父元素中具有overflow:hidden,这就创建了一个BFC使其不受外界环境影响。我们再看3、4。

image.png
可以看到3的下边距与4是发生了重叠的,这是因为它不具有BFC,就如同之前一样,边距会发生重叠最终合并成较大的那一个。

结束啦🎉

对于CSS来讲,最主要还是布局,在布局之中盒子模型有有着很重要的地位,所以先弄懂它,我们一步步来🏃~

梳理好每一个知识点,稳扎稳打,才不会被面试官问倒😰~

如果文章有误欢迎在评论区指出,感谢指正🔔

这是我面试专栏的第一篇文章,后续会陆陆续续继续整理的,欢迎大家关注📢

👉专栏地址:Ned的面试加油站👈

如果您觉得以上的内容还不错,不妨点个赞支持一下哦~~😇

我们下期再见👋

相关文章
|
2月前
|
前端开发
CSS语言的盒模型
CSS语言的盒模型
|
4月前
|
前端开发 JavaScript Java
【面试题】面试官:说说你对 CSS 盒模型的理解
【面试题】面试官:说说你对 CSS 盒模型的理解
|
5月前
|
前端开发
【前端|CSS系列第3篇】CSS盒模型、浮动及定位
【前端|CSS系列第3篇】CSS盒模型、浮动及定位
|
8天前
|
前端开发
【专栏:CSS基础篇】CSS盒模型:理解网页布局的核心
【4月更文挑战第30天】CSS盒模型是网页布局关键,将HTML元素视为内容、内边距、边框和外边距的矩形。内容决定元素大小,padding增加内部空间,border设置线条样式,margin控制元素间距。理解盒模型及其计算方式(内容+padding+border+margin)有助于布局设计。通过调整相关属性,实现浮动、Flexbox或定位布局,创建响应式网页。
|
23天前
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
27 2
|
1月前
|
前端开发 开发者
CSS面试考点:盒模型、选择器、单位和像素概念
【4月更文挑战第2天】 CSS面试考点:盒模型、选择器、单位和像素概念
26 12
|
3月前
|
Web App开发 存储 前端开发
【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解
【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解
|
3月前
|
前端开发
css3基础语法与盒模型
css3基础语法与盒模型
16 0
|
3月前
|
前端开发 JavaScript API
CSS基础框盒模型:打造炙手可热的网页布局!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。 ———————————————— 版权声明:本文为博主原创文
|
4月前
|
前端开发 容器
CSS Flex 弹性盒模型
当元素设置了display: flex样式时,表示当前元素开启了flex布局,这个元素成为一个 flex 容器(flex container)。这个元素不会脱离文档流,元素中的内容沿着两个轴的方向进行布局。 开启了flex布局的元素就是一个伸缩容器(flex 容器),伸缩容器中所有的子元素就是伸缩项目。