css - 为什么位置属性会影响显示属性?
问题描述
- 在给定的代码中,在
div.text
我分配的部分position: absolute
中,display: block
属性变为非活动状态,我必须设置width: 100%
将文本居中对齐。什么原因? - 为什么我必须先将
relative
容器的位置属性设置为才能将子元素的位置设置为absolute
?如果我没有设置position: relative
父容器的,则元素相对于 body 标签定位。为什么?
body,
html {
height: 100%;
margin: 0;
}
div.first-div {
background-image: url(louis-lo-275893-unsplash.jpg);
height: 100%;
opacity: 0.7;
background-size: cover;
position: relative;
}
div.text {
position: absolute;
top: 45%;
left: 0;
display: block;
width: 100%;
text-align: center;
}
span.border {
color: cornsilk;
font-family: "Lato", sans-serif;
letter-spacing: 8px;
font-size: 50px;
background-color: black;
padding: 8px 30px;
height: 100px;
}
<body>
<div class="first-div">
<div class="text">
<span class="border">Hello</span>
</div>
</div>
</body>
解决方案
为什么我必须先设置位置属性...
的默认值position
是static
,它显示元素出现时,或者换句话说:未定位。Absolute
定位会将一个元素放置relative
到它的第一个定位(不是static
)祖先元素。如果没有定位,<body>
则它是最上面的元素。这就是需要设置 parent 的position
地方relative
。从static
到relative
使其“定位”,现在具有absolute
位置的子对象将与其祖先绑定,而不是<body>
。来自https://www.w3schools.com/cssref/pr_class_position.asp
...我必须设置 width: 100% 以使文本居中对齐。什么原因?
当您从中删除position: absolute
样式时div.text
,不会影响display:block
(block
与 相反inline
,表示元素不“喜欢”与其他元素相邻)<div>s
或分区是块元素并且<span>s
是内联的。所以设置display:block
any<div>
是多余的。将宽度设置为 100% 会<div>
占用整行而不是默认值:尽可能少的空间。不指定宽度不会取消文本居中,它只是居中在<div>
完美契合的内部。