当前位置: 首页 > 面试题库 >

为什么CSS的width和height属性不适合填充?

葛宏爽
2023-03-14
问题内容

因此,首先要设置场景:

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内部宽度测试,显示内箱超出了容器

现在,我知道这是符合标准的行为(正如我之前所知道的,但在本文中再次确认,并且我还知道是否在内部CSS声明中包含以下代码:

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

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

对于我来说(似乎从表面上看),使内盒始终将容器完全填充到容器宽度的100%,而不管内盒的填充或边框如何。当我尝试将textarea的宽度设置为100%且具有边框或类似4px的内部填充的内容时,我总是遇到这个问题。textarea总是会溢出
容器。

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


问题答案:

CSS使用box模型的原因是:

+---------------------
|       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未指定,因为内容定义了高度,它可能会很长,可能会很短,但这是未知且无关紧要的。该width设置,因为这是有多宽400像素的内容(文本)应该是。

该padding仅仅是延长的背景颜色,使的手段文字可以从边缘清晰漂亮了,就像你如何留出空间上的一张纸上写时/打印。

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

该margin通知段落离开边缘之间一定的空间,并与容限塌陷,每组将保持均匀,而不必隔开指定不同的余量为所述第一或最后一个元素。

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

不会不合理地压缩内容没有填充物超出其容器当然,在边缘情况下,填充内容将扩展到其容器之外,因为内容可能会被压缩。这都是关于内容的。



 类似资料:
  • 问题内容: HTML 元素可以具有 width / height 属性,还可以具有CSS width / height 属性: HTML属性和CSS属性之间有什么区别,它们应具有相同的效果吗? 问题答案: 可以在此处找到有关该主题的热门讨论:图像标签和CSS的Width属性 把它们加起来: 声明宽度值和高度值(可能不是图像的原始物理尺寸)或css声明(例如width:[valueX]; heigh

  • 问题内容: CSS 和属性可接受的最大有效值是多少? (我目前正在构建一个Web应用程序,该应用程序会创建一个非常大的可缩放容器元素,我想知道实际的限制是什么。) 问题答案: 在宽度和高度为10000000000px的元素上使用某些浏览器随附的CSS检查器:

  • 问题内容: 可以在这里找到代码: 我发现有内标记,也有内标签。它们都是必需的吗?(在这种情况下,CSS似乎覆盖了HTML属性)关于它们之间的区别是否有任何解释? 问题答案: 我检查了文档,但是它们并不清楚如果同时设置了它们。 那藏在这里的某个地方: UA可以选择使用HTML源文档中的表示属性。如果是这样,则将这些属性转换为对应的CSS规则,其特异性等于0,并且将其视为在作者样式表的开头插入。因此,

  • 问题内容: 这是什么意思?我猜这是一个浏览器黑客,但我一直无法找到确切的功能。 的意义是什么? 问题答案: 是特定于Internet Explorer 7、8和9的“ CSS hack”。 这只是意味着CSS的特定行以代替,仅在IE 7、8和9中有效。 在您的示例中 表示仅在使用IE 7、8和9时才应用500像素的宽度(与相同的结果)。 所有其他浏览器将完全忽略,因此根本不适用于该元素。 如果您的

  • 问题内容: 让我们考虑以下代码: 我们定义了两个具有相同的宽度/高度,相同的边框和。我们可以清楚地看到,使用CSS属性的画布是尊重的(边界从宽度/高度减小),但是用属性定义的第一个忽略(边界被添加到宽度/高度)。 我首先认为这与属性的使用有关,但似乎与使用or 时不一样。 为什么这样的行为与元素? 经过一番搜索,我发现应该避免在画布上使用width / height属性,因为它将缩放画布并且不会像

  • 描述 (Description) 调整大小操作会将width, height, data-width and data-height属性设置为“img”/“video”或“a”标记。 这样,您的图像将以请求的大小显示。 例子 (Example) ![](video.mp4?resize = 400, 220) 输出 (Output) 上面的代码将生成以下输出&