gpt4 book ai didi

html - 为什么 CSS 宽度和高度属性不调整填充?

转载 作者:技术小花猫 更新时间:2023-10-29 12:56:27 25 4
gpt4 key购买 nike

所以首先要设置场景:

HTML

<div id="container">
<div id="inner">test</div>
</div>

CSS

#container {
width:300px;
height:150px;
background-color:#d7ebff;
}

#inner {
width:100%;
height:100%;
padding:5px;
background-color:#4c0015;
opacity:.3;
}

这将产生在所有现代浏览器中看起来像这样的东西:

CSS interior width test showing the inner box exceeding the container

现在我知道这是符合标准的行为(正如我之前所知,但在 this post 中再次确认,我也知道如果我在内部 CSS 声明中包含此代码:

box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box

...它将采用“边界框”模型并获得对我来说似乎更直观的行为,但我只是发现自己试图从逻辑上证明为什么会这样,但我无法做到去做。

在我看来(从表面上看)更合乎逻辑的是,无论内框的填充或边框如何,内框始终将容器填充到容器宽度的 100%。当我尝试将文本区域的宽度设置为 100% 并具有边框或类似 4px 内部填充的东西时,我一直遇到这个问题......文本区域总是会溢出容器。

所以我的问题是......设置默认行为以在设置宽度时忽略元素的边框和填充背后的逻辑是什么?

最佳答案

CSS 使用盒子模型的原因是:

+---------------------
| Margin
| +-------------------
| | Border
| | +-----------------
| | | Padding
| | | +---------------
| | | | Width x Height

是因为 CSS 是一种文档样式语言。它(最初)是根据研究论文和其他正式文件设计的,而不是作为制作漂亮图形的一种方式。因此,模型围绕着内容,而不是容器。

CSS 不是一种编程语言,它是一种样式语言。它没有明确告诉文档应该如何显示,它建议浏览器应该遵循的一些准则。所有这些都可以被一种实际的编程语言覆盖和修改:JavaScript。

回到内容模型的想法,考虑以下 CSS:

p
{
background-color: #EEE;
border: 1px solid #CCC;
color: #000;
margin: 10px;
padding: 9px;
width: 400px;
}

height 没有指定,因为 content 定义了高度,它可能长,也可能短,但这是未知的,也不重要。 width 设置为 400px,因为这是 content(文本)的宽度。

padding 只是一种扩展背景颜色的方法,这样文本可以远离边缘清晰可辨,就像在纸上书写/打印时留出空间一样。

border 是一种围绕某些内容以将其与其他背景区分开来的方法,或者在各种元素之间提供边框(见图)。

margin 告诉段落在边缘之间留出一些空间,并且通过 margin-collapsing,每个组将保持均匀间隔,而不必为第一个或最后一个元素指定不同的边距。

为了保持流畅性,width 默认为 auto,这意味着宽度将尽可能宽:

  1. 不会不合理地压缩内容
  2. 没有超出其容器的填充

当然,在边缘情况下,填充会超出其容器,因为内容可能会被压扁。 一切都与内容有关。

关于html - 为什么 CSS 宽度和高度属性不调整填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com