使用CSS在视口中垂直居中

str*_*ger 16 css

我希望<div>在视口(浏览器窗口)中垂直居中,而不需要使用Javascript(仅限纯HTML和CSS).我有几个限制:

  • div必须垂直于视口的中心. 方法我看到只支持在另一个内部支持<div>,这不是我想要的.
  • 高度div不详.

其他限制:

  • div必须靠右对齐.
  • div具有恒定的宽度.
  • div必须支持填充.
  • 其他元素将放在网页上.该div充当菜单.
  • div必须支持背景颜色/图像.

这让我接近我想要的,但不完全是:

#nav {
    position: fixed;
    right: 0;
    top: 50%;
}
Run Code Online (Sandbox Code Playgroud)

但是,导航的顶部位于导航的中间,而不是导航的中间.

是否有一些技术可以让我以div这些约束为中心?

Mat*_*lar 24

那是什么?用了8年才能得到问题的答案太多了?

好吧,迟到总比没有好!

真的很接近解决方案.我这样做transform: translate():

#nav {
    position: fixed;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
}
Run Code Online (Sandbox Code Playgroud)

根据我可以使用吗?除了IE8和Opera Mini之外的所有东西都支持它(老实说,这是一个非常好的支持).

我建议你过度使用它,只需添加所有供应商前缀(只是为了确保!):

#nav {
    position: fixed;
    right: 0;
    top: 50%;

    -webkit-transform: translateY(-50%);
       -moz-transform: translateY(-50%);
        -ms-transform: translateY(-50%);
         -o-transform: translateY(-50%);
            transform: translateY(-50%);
}
Run Code Online (Sandbox Code Playgroud)

这是一个片段,向您展示:

#nav {
    right: 0;
    top: 50%;
    position: fixed;
    -webkit-transform: translateY(-50%);
       -moz-transform: translateY(-50%);
        -ms-transform: translateY(-50%);
         -o-transform: translateY(-50%);
            transform: translateY(-50%);

    background-color: #ccc;
    padding: 20px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="nav">
    ABC<br/>
    DEFGH<br/>
    IJKLMNO<br/>
    PQRS<br/>
    TUVWXYZ
</div>
Run Code Online (Sandbox Code Playgroud)

希望它仍然与你相关!(我在开玩笑,已经8年了)


小智 7

您可以将其用作解决方案之一。

   <style>
   #containter {
     height: 100vh; //vh - viewport height
     display: flex;
     flex-direction: column;
     align-items: center; 
     justify-content: center;
   }
   #content {}
  </style>

 <div id="containter">
  <div id="content">
    any text<br>
    any height<br>
    any content, for example generated from DB<br>
    everything is vertically centered
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)