【问题标题】:CSS vertically align floating divsCSS 垂直对齐浮动 div
【发布时间】:2022-03-26 17:23:41
【问题描述】:

我有一个 div (#wrapper),其中包含并排放置的 2 个 div。

我希望右 div 垂直对齐。我在我的主包装器上尝试了 vertical-align:middle 但它不起作用。它快把我逼疯了!

希望有人可以提供帮助。

http://cssdesk.com/LWFhW

HTML:

<div id="wrapper">
  <div id="left-div">
    <ul>
      <li>One</li>
      <li>Two</li>
    </ul>
  </div>  
  <div id="right-div">
    Here some text...
  </div>
</div>

CSS:

#wrapper{
  width:400px;
  float:left;
  height:auto;
  border:1px solid purple;}

#left-div{
  width:40px;
  border:1px solid blue;
  float:left;}

#right-div{
  width:350px;
  border:1px solid red;
  float:left;}

ul{
  list-style-type: none;
  padding:0;
  margin:0;}

【问题讨论】:

    标签: html css


    【解决方案1】:

    浮动元素不会让你走运。他们不服从vertical-align

    你需要display:inline-block

    http://cssdesk.com/2VMg8


    小心!

    注意display: inline-block;,因为它将元素之间的空白解释为真正的空白。它不会像display: block 那样忽略它。

    我推荐这个:

    将包含元素的font-size 设置为0(零),并将font-size 重置为元素中所需的值,如下所示

    ul {
        margin: 0;
        padding: 0;
        list-style: none;
        font-size: 0;
    }
    ul > li {
        font-size: 12px;
    }
    

    在此处查看演示:http://codepen.io/HerrSerker/pen/mslay


    CSS

    #wrapper{
      width:400px;
      height:auto;
      border:1px solid green;
      vertical-align: middle;
      font-size: 0;
    }
    
    #left-div{
      width:40px;
      border:1px solid blue;
      display: inline-block;
      font-size: initial;
      /* IE 7 hack */
      *zoom:1;
      *display: inline;
      vertical-align: middle;
    }
    
    #right-div{
      width:336px;
      border:1px solid red;
      display: inline-block;  
      font-size: initial;
      /* IE 7 hack */
      *zoom:1;
      *display: inline;
      vertical-align: middle;
    }
      
    

    【讨论】:

    • 如果 #wrapper 高度是固定的,这将不起作用。 #right-div 居中相对于#left-div,而不是相对于包装元素。 (inline-block 使其行为类似于具有 align 属性集的内联 img
    • @Costa 我认为应该是这样。
    • 但是您的解决方案也不起作用,因为您不能仅仅决定不使用浮点数..重点是在使用浮点数时以某种方式垂直对齐。
    • 但是互联网上的人们都因为标题而发现了这个问题,而您的回答对他们没有任何帮助......如果您在其中做一个技巧,则可以垂直对齐浮动,我会尽快发布测试页面
    • 我的意思是,有时 inline-block 不是一个选项,它提供了一个用例来帮助可能最终从 Google 访问此页面的其他人。没有必要粗鲁。
    【解决方案2】:

    您可以使用显示表格和显示表格单元轻松完成此操作。

    #wrapper {
        width: 400px;
        float: left;
        height: auto;
        display: table;
        border: 1px solid green;
    }
    
    #right-div {
        width: 356px;
        border: 1px solid red;
        display: table-cell;
        vertical-align: middle;
    }
    

    编辑:实际上很快就为您在 CSS Desk 上搞砸了 - http://cssdesk.com/RXghg

    另一个编辑:使用 Flexbox。这会起作用,但它已经过时了 - http://www.cssdesk.com/davf5

    #wrapper {
        display: flex;
        align-items: center;
        border:1px solid green;
    }
    
    #left-div {
        border:1px solid blue;
    }
    
    #right-div {
        border:1px solid red;
    }
    

    【讨论】:

    • 你好 SpaceBeers。您的建议对我不起作用,因为我隐藏了 right-div 的溢出(我刚刚将代码添加到 css 桌面)。使用您的解决方案,溢出不会被隐藏,div 会扩大其宽度...
    【解决方案3】:

    我意识到这是一个古老的问题,但我认为发布浮动垂直对齐问题的解决方案会很有用。

    通过围绕您要浮动的内容创建一个包装器,您可以使用 ::after 或 ::before 伪选择器在包装器内垂直对齐您的内容。您可以随意调整该内容的大小,而不会影响对齐。唯一的问题是包装器必须填充 容器的 100% 高度。

    http://jsfiddle.net/jmdrury/J53SJ/

    HTML

    <div class="container">
        <span class="floater">
            <span class="centered">floated</span>
        </span>
        <h1>some text</h1>
    </div>
    

    CSS

    div {
        border:1px solid red;
        height:100px;
        width:100%;
        vertical-align:middle;
        display:inline-block;
        box-sizing: border-box;
    }
    .floater {
        float:right;
        display:inline-block;
        height:100%;
        box-sizing: border-box;
    }
    .centered {
        border:1px solid blue;
        height: 30px;
        vertical-align:middle;
        display:inline-block;
        box-sizing: border-box;
    }
    h1 {
        margin:0;
        vertical-align:middle;
        display:inline-block;
        box-sizing: border-box;
    }
    .container:after, .floater:after, .centered:after, h1:after {
        height:100%;
        content:'';
        font-size:0;
        vertical-align:middle;
        display:inline-block;
        box-sizing: border-box;
    }
    

    【讨论】:

    • 我不确定您在做什么,但是在删除 centered 类并从该 CSS 中清除大量冗余内容之后,它仍然可以很好地垂直对齐,只是(对不起格式丢失!...):div { border:1px solid red; height:100px; } .floater { float:right; height:100%; } h1 { vertical-align:middle; } .container:after, .floater:after, .centered:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; }
    【解决方案4】:

    一种可能的解决方案是使包装器divflexcenter 上对齐的项目https://spin.atomicobject.com/2016/06/18/vertically-center-floated-elements-flexbox/ 指定。

    【讨论】:

      【解决方案5】:

      我尽我所能避免使用浮动...但是 - 在需要时,我使用以下行垂直对齐到中间:

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

      【讨论】:

        【解决方案6】:

        我修改的唯一缺点是您设置了 div 高度...我不知道这是否对您有问题。

        http://cssdesk.com/kyPhC

        【讨论】:

        • 你好肖恩。谢谢,但我正在尝试使用灵活的解决方案,因此希望避免这种解决方案......
        猜你喜欢
        • 2010-11-04
        • 2011-05-31
        • 2013-09-03
        • 2012-06-13
        • 2015-11-05
        • 2013-12-18
        • 2023-03-14
        • 2015-02-20
        • 1970-01-01
        相关资源
        最近更新 更多