CSS非常直观且标准的CSS,看看::
header {
position: relative;
}
header img {
display: block;
max-width: 100%;
}
.location-search-container {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.input-group {
margin-top: -17px;
top: 50%;
position: absolute;
}
现在这完全实现了我想要实现的目标,但同样的人,提出了另一个不寻常的解决方案,使用填充,我真的很喜欢填充解决方案,因为它不那么麻烦,但我不能理解或掌握什么正在发生,这是填充::
的解决方案header {
position: relative;
}
header img {
display: block;
max-width: 100%;
}
.location-search-container {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding-top: 30%;
}
.input-group {
margin-top: -17px;
}
注意padding-top:30%
如何做到这一点。我真的想了解这是如何工作的,有人可以给我一个基本的想法吗?这是一种更清洁,更优雅的解决方案。当我向同一个人询问解决方案的确切运作方式时,他说了以下内容:
正如我所说,顶部填充使用父宽度作为基础。根据 在宽高比上,它必须大于或小于父母的一半 身高。
但我再也不能理解了。有人可以简化这个。
谢谢。
亚历-Z。
答案 0 :(得分:2)
图像的原始尺寸为1200 x 700像素。它的大小适合窗口宽度。例如,假设窗口宽度为1000像素。在这种情况下,图像的高度将是700 x 1000/1200或583像素。在所有情况下,高度与宽度的比率将为0.583,或大致为60%。
规则padding:top: 30%
告诉浏览器添加顶部填充等于容器宽度的30%。 (填充属性是不寻常的,因为百分比总是被视为 width 的百分比,即使在padding-top
的情况下,它可能会影响垂直位置和大小。)< / p>
30%是(大约)60%的一半。瞧!
答案 1 :(得分:1)
这只是同一解决方案的两种变体。绝对定位一个元素并将其向下推到页面的百分比。清洁工,第二个使用%,消除了抵消的需要。原件推得比需要的还要多,然后稍稍拉回来。
另一种方法是使用transform: translateY(-50%);
虽然对浏览器方面有一点限制。有很多方法可以在CSS中实现。一些更有效的&#39;比其他人。
答案 2 :(得分:1)
在计算保证金值的百分比时,浏览器会使用父级宽度。这看起来有点令人困惑。
但我认为这在逻辑上是正确的,因为假设边距用于将一个元素与其他元素分开,并且您通常希望这些分色在所有方面都相同。
对于对齐,您可以设置元素top, left, bottom, right
属性,它们应为position: absolute;
。
当与百分比一起使用时,此属性相应地使用非position: static;
父项高度和宽度
在您的情况下,您可以top: 50%;
使用.location-search-container
并使用负margin-top:-17px;
来补偿元素来源到中心。或者设置transform: translateY(-50%)
。这样,您就不需要知道元素的大小(以像素为单位),如果您不支持旧浏览器。
这是[FIDLE] [1]示例,它将您的元素纵向和横向居中。您可以将transform属性更改为margin,但应设置元素宽度和高度的一半(以像素为单位)