给body加上border属性后border为什么会变大(算上了margin)?

本文通过两个实例探讨了CSS中不同元素之间的边界、填充及边距如何相互作用,特别是当涉及盒子模型时,如何影响父级元素的高度。
  • 代码如下:
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="utf-8" />
    <title>linear-gradient()_CSS参考手册_web前端开发参考手册系列</title>
    <meta name="author" content="Joy Du(飘零雾雨), dooyoe@gmail.com, www.doyoe.com" />
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body {
            border: 1px solid yellow;
        }
        div {
            width: 200px;
            height: 100px;
            margin-top: 10px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
<div class="test"></div>
</body>
</html>

给body加上border: 1px solid yellow;样式后,body的高度为div的高度加上margin-top,不加border: 1px solid yellow;时body的高度和div的高度一样。
为什么呢?


大盒子套小盒子

  • 代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            display: inline-block;
        }
        .big {
            border: 1px solid #000;
            cursor: pointer;
        }
        .small {
            width: 200px;
            height: 200px;
            background-color: blue;
            padding: 10px;
            margin: 10px;
        }
    </style>
</head>
<body>
<div class="big">
    <div class="small"></div>
</div>
</body>
</html>

大盒子没有border属性时,高度为220px,即height加padding,但是当大盒子加上border属性时,会包括小盒子的margin,所以变大。

在CSS中,当子元素有`margin`、`padding`、`border`等盒模型属性,且`width`设置为100%时,是否受影响取决于盒模型的计算方式,主要有以下两种情况: ### 标准盒模型(`box-sizing: content-box`) 在标准盒模型下,`width`属性只表示内容区域(`content`)的宽度。当子元素设置`width: 100%`时,其内容区域宽度会等于父元素的宽度,而`padding`、`border`和`margin`会在这个基础上额外增加元素的整体占用空间,可能会导致子元素溢出父元素。 示例代码如下: ```html <!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>Standard Box Model</title> <style> .parent { width: 300px; background-color: lightblue; } .child { width: 100%; padding: 10px; border: 5px solid black; margin: 5px; background-color: lightcoral; } </style> </head> <body> <div class="parent"> <div class="child">This is a child element.</div> </div> </body> </html> ``` 在上述代码中,`.child`元素的内容区域宽度是300px,但由于有`padding`、`border`和`margin`,其整体占用的宽度会超过300px,从而溢出父元素。 ### 怪异盒模型(`box-sizing: border-box`) 在怪异盒模型下,`width`属性表示的是内容区域(`content`)、内边距(`padding`)和边框(`border`)三者的总宽度。当子元素设置`width: 100%`时,`padding`和`border`会包含在这100%的宽度内,不会额外增加元素的整体宽度,但`margin`仍然会在元素外部占用空间。 示例代码如下: ```html <!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>Border Box Model</title> <style> .parent { width: 300px; background-color: lightblue; } .child { width: 100%; padding: 10px; border: 5px solid black; margin: 5px; background-color: lightcoral; box-sizing: border-box; } </style> </head> <body> <div class="parent"> <div class="child">This is a child element.</div> </div> </body> </html> ``` 在上述代码中,`.child`元素的内容区域、`padding`和`border`的总宽度是300px,`padding`和`border`不会导致元素溢出父元素,但`margin`会在元素外部增加额外的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值