CSS:将元素集中在y轴上的标准(动态)方式

w6mmgewl  于 2023-06-07  发布在  其他
关注(0)|答案(8)|浏览(162)

我的问题或多或少是不言自明的,我试图找到一种标准的动态方法来集中y轴上的元素,就像:

margin: auto;

对于x轴。有什么想法吗
我说的是下面这段代码,空页,在中间对齐一个图像。

<div id="main" style="display: block;"> 
    <img style="margin: auto; display: block;" 
    src="http://www.example.com/img.jpg" />
</div>

任何帮助将不胜感激!:)

qv7cva1a

qv7cva1a1#

给予吧,在这一个上使用表格,使用vertical-align: middle。您可以只使用一个单行、单单元格的表,而不会感到太内疚(我对此睡得像个婴儿)。这不是世界上最语义化的东西,但是你更愿意维护什么,一个小的单格table,还是计算出确切的高度并使用负边距进行绝对定位?

5kgi1eie

5kgi1eie2#

如果知道要居中的元素的高度,则可以执行以下操作:

img {
  display: block;
  height: 500px;
  position: absolute;
  top: 50%;
  margin-top: -250px; /* 50% of your actual height */
}
gijlo24d

gijlo24d3#

我只知道一个办法:

#mydiv {
   position: fixed;
   top: 50%;
   left: 50%;
   width: 100px;
   height: 100px;
   margin-top: -50px;
   margin-left: -50px;
}

这是针对x轴和y轴的-但是必须为每个元素更改宽度/高度和边距。我讨厌它:-)
此外,如果元素大于浏览器窗口,则会出现问题。

4c8rllxm

4c8rllxm4#

最著名的方法是使用绝对定位。您将顶部金额设置为50%,然后将边距顶部设置为元素的负一半。

#main {
    position: relative;
}
#main img {
    position: absolute;
    top: 50%;
    margin-top: -(half your image height)px;
}
svgewumm

svgewumm5#

下面是使用vertical-align的变体
http://jsfiddle.net/audetwebdesign/r46aS/
它有一个缺点,即您需要为line-height指定一个值,该值还将定义包含元素的高度,该元素的作用类似于视口(用蓝色边框表示)。

注意:您可以通过设置body或html元素的高度(100%)来解决窗口高度问题,但您需要尝试一下(参见第3篇参考文献)。

然而,好的一面是,您不必根据图像的尺寸进行一些数学运算。
以下是一些与垂直对齐相关的参考资料:
http://css-tricks.com/what-is-vertical-align
http://blog.themeforest.net/tutorials/vertical-centering-with-css
http://www.jakpsatweb.cz/css/css-vertical-center-solution.html
有时候我必须记住基本的东西,所以我重读:
http://www.w3.org/TR/CSS21/visudet.html
这可能不能解决OP的问题,但在其他上下文中可能有用。

0dxa2lsx

0dxa2lsx6#

在我的样式表中使用#menu img { vertical-align: middle; }对于最新版本的FireFox、Opera、Safari和Chrome都很好用,但在IE9中就不行了。我必须手动添加style="vertical-align: middle"到每一行img代码。例如:

<li><a href="../us-hosts.php">
    <img src="../images/us-button.png" width="30" height="30"
         alt="US Hosts" style="vertical-align: middle;"/>&nbsp; US Hosts</a>
</li>
t5fffqht

t5fffqht7#

试试这个CSS:

margin-top:auto;
margin-bottom:auto;
display:block;
txu3uszq

txu3uszq8#

答案有点过时了,所以这里有一个更现代的解决方案:

display: flex;
align-items: center;

相关问题