【问题标题】:CSS vertical align [duplicate]CSS垂直对齐[重复]
【发布时间】:2011-06-14 17:25:50
【问题描述】:

我在浮动 div 中有一个 img,但我不知道如何垂直居中。

<div style="height: 300px">
   <img style="height: 50px" src="something" />
</div>

vertical-align: middle 当然不行。

http://jsfiddle.net/wKQYj/

【问题讨论】:

标签: html css vertical-alignment


【解决方案1】:

要在父元素中垂直对齐文本,并记住 img 是一个内联元素,因此其行为与文本相似,您只需将 line-height 设置为父元素的height

div {
    height: 300px;
    line-height: 300px;
}

JS Fiddle demo.

【讨论】:

    【解决方案2】:

    vertical-align CSS 样式指定文本在其文本行内的对齐方式。例如,这允许您将文本指定为上标或下标。

    所以它实际上并不是要垂直对齐框内的元素。

    但有一个明确的例外——表格单元格(即&lt;td&gt;&lt;th&gt; 元素)使用vertical-align 样式来做到这一点:在单元格内对齐单元格的内容。

    这个例外有点奇怪——它真的不应该存在。 CSS 设计者把它放在那里是为了让 CSS 重现表格元素的 valign 属性,在基于表格的布局的黑暗时代,设计者通常使用该属性。

    对于其他元素,将盒子的内容垂直对齐在盒子的中间可能是一门艺术。有几种技术:

    1. 对于单行文本,只需使line-height 与整个框的高度相同。你可能甚至不需要vertical-align

    2. 使用display:table-cell; 使元素模拟表格单元格,然后使用vertical-align。这可行,但可能会产生意想不到的后果(您可能不想模拟表格单元格的其他属性)。

    3. 如果您知道要垂直对齐的元素的高度,则可以将其定位为 50% 减去其高度的一半,如下所示:

      position:absolute;
      top:50%;
      height:200px;
      margin-top:-100px; /* half the height */
      

    还有其他一些,但这些应该可以帮助您入门。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      对于不使用表格的更现代 (IE8+) 解决方案,我最喜欢 this one

      <style>
      /* Can be any width and height */
      .block {
        height:500px;
        text-align: center;
      }
      
      /* The ghost, nudged to maintain perfect centering */
      .block:before {
        content: '';
        display: inline-block;
        height: 100%;
        vertical-align: middle;
        margin-right: -0.25em; /* Adjusts for spacing */
      }
      
      /* The element to be centered, can be any width or height */ 
      .centered {
        display: inline-block;
        vertical-align: middle;
        width: 300px;
      }
      </style>
      
      <div class="block"><div class="centered">Centered Content</div></div>
      

      【讨论】:

      • 确实是最好的解决方案,因为它不需要知道内容的高度并且不使用表格单元 css。感谢分享!
      • 有没有办法做到这一点,而 .centered 是百分比宽度(实际上可能是 100%)。
      【解决方案4】:

      使用 translate 属性,它很简单,即使在 IE 中也可以使用:

      img {
        position: relative;
        top: 50%;
        transform: translateY(-50%);
      }
      

      【讨论】:

        【解决方案5】:

        vertical-align 属性仅在 td 元素上真正有用。尝试类似:

        <table>
         <tr>
          <td style='height:300px; vertical-align:center'>
           <img src='something'>
          </td>
         </tr>
        </table>
        

        或者因为你知道img的高度和宽度:

        <div style='height:300px;'>
         <img style='height:50px; position:relative; top:50%; margin-top:-25px'>
        </div>
        

        【讨论】:

        • ZOMG,以上这些对我来说似乎都不好,我的意思是css中存在严重的漏洞,它们正在产生阴影等,我们必须使用表格或div中的div来垂直居中.. 。 天啊。我必须使用 div。而且我不能使用第二个代码,因为用户会更改 div 的高度。所以我迷路了。
        • @anonymous:你能使用 JavaScript 或任何 JS 库(MooTools、Scriptaculous、jQuery、Glow...)吗?
        【解决方案6】:

        漂亮cool and modern approach(指定高度):

        .Absolute-Center {
          margin: auto;
          position: absolute;
          top: 0; left: 0; bottom: 0; right: 0;
        }
        

        【讨论】:

          【解决方案7】:

          我正在使用 display:box 属性:

          #container {
              display: box;
              box-orient: vertical;
              box-pack: center;  
          }
          
          #text {
              vertical-align: middle;
          }
          

          在此处查看 js-fiddle:verical align js-fiddle

          【讨论】:

            【解决方案8】:

            Javascript 可能是让图像在每个案例的垂直中心居中的最佳选择。如果你可以使用像 jQuery 这样的库,那只需要几行代码。

            $(function(){
                var containerHeight = $('#container').outerHeight();
                var imgHeight = $('#logo img').outerHeight();
            
                var difference = (containerHeight - imgHeight)/2;
                $('#logo img').css({'position' : 'relative', 'top' : difference + 'px'});
            

            });

            【讨论】:

            • 所以他需要包含完整的 jQuery 库,加上这个脚本?只是为了集中一些东西似乎有点矫枉过正。
            • 如果他必须多次居中并且他不知道 A) 父 div 的高度是多少,以及 B) 图像的高度是多少,这将每次工作,在任何情况下工作
            【解决方案9】:

            我正在使用 flex 来使元素居中。它可以有效地使页面更具响应性。

            div {
                display: flex;
                align-items: center;
            }
            

            请查看here 了解如何垂直居中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-03-14
              • 2015-09-06
              • 2011-10-03
              • 1970-01-01
              • 2018-11-04
              • 2011-02-19
              相关资源
              最近更新 更多