使用 CSS 3 垂直对齐

Posted

技术标签:

【中文标题】使用 CSS 3 垂直对齐【英文标题】:Align vertically using CSS 3 【发布时间】:2011-07-21 17:44:19 【问题描述】:

使用 CSS 3,是否有任何方法可以垂直对齐块元素?你有一个例子吗? 谢谢。

【问题讨论】:

这不是 CSS 3 方式... @Tho 是的。 CSS 3 是 CSS 2 的超集。 好吧,你是对的,我同意你的肯定......但是css3提供了一些更简单的东西吗?谢谢。 CSS3 的另一个例子是一个被过度炒作的流行语。 CSS3 只是 CSS 级别 3。任何 CSS1 和 CSS2.x 代码也是有效的 CSS3,克服它 slides.html5rocks.com/#flex-box-2 【参考方案1】:

使用弹性盒:

<style>
  .container 
    display: flex;
    align-items: center; /* Vertical align */
    justify-content: center; /* Horizontal align */
  
</style>

<div class="container">
  <div class="block"></div>
</div>

container 内垂直(和水平)居中block

浏览器支持:http://caniuse.com/flexbox

【讨论】:

【参考方案2】:

我总是使用this article 的教程来集中注意力。太好了

div.container3 
   height: 10em;
   position: relative               /* 1 */
div.container3 p 
   margin: 0;
   position: absolute;               /* 2 */
   top: 50%;                         /* 3 */
   transform: translate(0, -50%)    /* 4 */

基本规则是:

    使容器相对定位,这将其声明为绝对定位元素的容器。 使元素本身绝对定位。 将其放在容器的中间位置,并带有“顶部:50%”。 (注意这里的 50%' 是指容器高度的 50%。) 使用平移将元素向上移动一半高度。 ('translate(0, -50%)' 中的 '50%' 是指元素本身的高度。)

【讨论】:

您可以使用 translateY(-50%) 来设置 Y 轴。设置变换样式:preserve-3d;以防止半像素值上的文本模糊,并确保为 transform 和 transform-style 包含供应商前缀。 通过找到 w3 中心示例找到了这个答案。然后通过找到这个答案找到了 w3 中心示例。 Excel 说得最好;检测到圆形参考!【参考方案3】:

注意:此示例使用draft version of the Flexible Box Layout Module。已经被不兼容的modern specification.取代了

同时使用 box-align 和 box-pack 属性使 div 框的子元素居中。

例子:

div

width:350px;
height:100px;
border:1px solid black;

/* Internet Explorer 10 */
display:-ms-flexbox;
-ms-flex-pack:center;
-ms-flex-align:center;

/* Firefox */
display:-moz-box;
-moz-box-pack:center;
-moz-box-align:center;

/* Safari, Opera, and Chrome */
display:-webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;

/* W3C */
display:box;
box-pack:center;
box-align:center;
 

【讨论】:

这就是我一直在寻找的:对 CSS(即 CSS3)的新添加,使其比所有旧的 CSS1/2 hack 更容易。谢谢。【参考方案4】:

有一种简单的方法可以在css中垂直和水平对齐一个div。

只需为您的 div 设置一个高度并应用此样式

.hv-center 
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;

希望这会有所帮助。

【讨论】:

这需要定位父级(即position: relative)。【参考方案5】:

试试这个也很好用:

html:

   <body>
    <div id="my-div"></div>
   </body>

css:

#my-div                
    position: absolute;
    height: 100px;
    width: 100px;    
    left: 50%;
    top: 50%;
    background: red;
    display: table-cell;
    vertical-align: middle


【讨论】:

【参考方案6】:

最近在看这个问题,试过了:

HTML:

<body>
    <div id="my-div"></div>
</body>

CSS:

#my-div                
    position: absolute;
    height: 100px;
    width: 100px;    
    left: 50%;
    top: 50%;
    background: red;
    transform: translate(-50%, -50%);    
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);

这是小提琴:

http://jsfiddle.net/sTcp9/6/

它甚至可以在使用“宽度/高度:自动”代替固定尺寸时工作。 在 Firefox、Chrome 和 IE 上的最新版本上进行了测试 (* gasp *)。

【讨论】:

有史以来最好的解决方案。不要忘记使用 Modernizr 的 csstransforms 检测 :-) 对这种方法要非常小心。翻译元素使用 GPU,最终将像素计算为浮点数。因此,您最终可能会以亚像素值移动对象并获得模糊的结果。查看这篇文章了解更多详情:martinkool.com/post/27618832225/beware-of-half-pixels-in-css 为避免“半像素”问题导致结果模糊,请尝试将transform-style: preserve-3d; 添加到父元素(来源:zerosixthree.se/…)。 好像 w3.org 喜欢你的方法。他们把这个放在他们的网站上w3.org/Style/Examples/007/center.en.html#vertical很好的解决方案伙伴:) @n611x007 您不需要将左侧样式设置为垂直对齐。设置 left 和 translateX 将水平对齐内容,设置 top 和 translateY 将垂直对齐内容。【参考方案7】:

你可以通过设置一个元素来显示垂直对齐:inline-block,然后设置vertical-align:middle;

【讨论】:

其实不远了。您可以在此之前添加另一个元素(或在父元素上使用 :before 伪元素)。然后让该新元素具有 100% 的高度和 1px 的宽度以及 margin-left:-1px。然后给它一个 inline-block 和 vertical-align:middle css 属性。然后你必须确保父元素有一个定义的高度。【参考方案8】:

几种方法:

1.绝对定位——你需要有一个声明的高度才能使这项工作:

<div>
   <div class='center'>Hey</div>
</div>

div height: 100%; width: 100%; position: relative
div.center 
     width: 100px;
     height: 100px;
     top: 50%;
     margin-top: -50px;

*2.使用显示:tablehttp://jsfiddle.net/B7CpL/2/*

<div>
     <img src="/img.png" />
     <div class="text">text centered with image</div>
</div>


div 
     display: table;
     vertical-align: middle


div img,
div.text 
     display: table-cell;
     vertical-align: middle

    使用 display: table 的更详细教程

http://css-tricks.com/vertically-center-multi-lined-text/

【讨论】:

以上是关于使用 CSS 3 垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 3 / CSS:如何在面板标题中正确垂直对齐

css 只用3行CSS垂直对齐任何东西

css如何使div里面的文字垂直对齐

css #CSS:只用3行CSS垂直对齐任何东西

text 垂直对齐文本与3行的CSS

垂直对齐 Bootstrap 3 列的内容