CSS宽度/高度与HTML宽度/高度属性具有不同的效果,具体取决于元素类型

时间:2015-08-10 20:44:50

标签: html css

例如,它们会导致与自动边距完全不同的行为。

看看这个小提琴:https://jsfiddle.net/L1rk46xy/

<style>
.fixed {
    display:fixed;
    top:0px;
    left:0px;
    right:0px;
    bottom:0px;
}
.centered {
    position:absolute;
    margin:auto;
    top:0;
    left:0;
    right:0;
    bottom:0;
}
</style>
<div class="fixed">
    <div class="centered" style="width:100px;height:30px;" width="200" height="30">
        CENTERED
    </div>
</div>

它有一个固定的元素来填充视口,里面有一些居中的文本。在我的实际网络应用程序中,这是一个加载指示器,它应该以内容为中心。为了使margin:auto工作,居中元素需要将top / right / bottom / left设置为零,并且需要具有宽度和高度。 (注意:我明确地避免使用顶部/左边的替代居中方法:50%,因为它需要大小的硬编码负半偏移,而此方法适用于任何大小的对象)。

在小提琴中注意带有文本的div元素是如何居中的。现在,删除设置宽度/高度的样式属性,并在居中的div上仅保留HTML宽度/高度属性。 div元素不再居中。

此外,如果用img替换div,则HTML宽度/高度属性足以使其居中。这里发生了什么?为什么CSS与HTML属性以及DIV和IMG标签之间存在差异?无论这些元素是块还是内联,都会发生这种情况(例如,无论如何都使用绝对定位)。

1 个答案:

答案 0 :(得分:1)

答案是div元素没有heightwidth属性。如果在标记中指定这些属性,则会完全忽略它们。你只能通过CSS样式调整div的大小。

另一方面,

img元素确实具有这些属性。

请参阅div vs img