【问题标题】:How do you align a div vertically without using float?如何在不使用浮动的情况下垂直对齐 div?
【发布时间】:2012-02-06 08:42:56
【问题描述】:

当做这样的事情时:

<div style="float: left;">Left Div</div>
<div style="float: right;">Right Div</div>

我必须用一个空的 div 和

clear: both;

我觉得很脏。

那么,有没有不使用浮动对齐的方法呢?

这是我的代码:

.action_buttons_header a.green_button{
 
}
<div class="change_requests_container" style="width:950px !important">
    <div class="sidebar">
        
            
                <a href="/view/preview_unpublished_revision/422?klass=Proposal" class="preview sidebar_button_large action_button" name="preview" onclick="window.open(this.href);return false;">Preview New Version</a>
            
        
        
    </div>
    <div class="content_container">
        <div class="content">
                        
                <div class="action_buttons_header">
                    <a href="/changes/merge_changes/422" class="re_publish publish green_button" style="
    margin: 5px 0px 5px auto;
">Apply Changes</a>
                </div>
            
            


            <div id="change_list_container">    

<div class="changes_table">
    
        
            
            <style type="text/css">
                #original_492 .rl_inline_added {
                    display: none;
                }
                
                #492.change_container .actial_suggested_text_container{
                    display: none;
                }
            </style>
            <div class="content_section_header_container">
                <div class="content_section_header">
                    <a href="#" class="collapse" name="492"></a>
                    The Zerg | 
                    Overview
                    <div class="status" id="492_status">
                        <div id="492_status_placeholder">
                            
                        </div>
                    </div>
                </div>
            </div>
            <div class="change_container" id="492">
                
            </div>
        </div>
    </div>
</div>

我想要它所在的水平条右侧的绿色按钮,但尽可能以最干净的方式。

只是想学习如何优雅、干净地做 CSS 等等。

【问题讨论】:

  • 如果您只是想消除空的div,那么您可以使用clear fix class

标签: html css


【解决方案1】:

今天在我的项目中应用了非常有用的东西。一个 div 必须右对齐,没有应用浮动。

应用代码实现了我的目标:

.div {
  margin-right: 0px;
  margin-left: auto;
}

【讨论】:

    【解决方案2】:

    另一种做类似事情的方法是在包装元素上使用 flexbox,即,

     .row {
            display: flex;
            justify-content: space-between;
        }
      <div class="row">
            <div>Left</div>
            <div>Right</div>
        </div>
    
       

    【讨论】:

    • flex 是显示选项吗? O.o developer.mozilla.org/en-US/docs/Web/CSS/display 哇。自从我上次检查以来,有很多。
    • 浏览器的支持也相当不错,虽然偶尔你需要加前缀。这是一个非常好的学习 flex 的网站:flexboxfroggy.com
    • @myrcutio 非常感谢。正是我需要的,而且非常干净。
    • @myrcutio plus 1
    • 这太棒了!
    【解决方案3】:

    无需添加额外的元素。虽然 flexbox 使用非常不直观的属性名称,但如果您知道它可以做什么,您会发现自己经常使用它。

    <div style="display: flex; justify-content: space-between;">
    <span>Item Left</span>
    <span>Item Right</span>
    </div>
    

    计划经常需要这个吗?

    .align_between {display: flex; justify-content: space-between;}
    

    我看到其他人在主要位置使用辅助词,这会使信息层次结构混乱。如果 align 是主要任务,而 rightleft 和/或 between 是次要任务,则类 应该.align_outer不是.outer_align,因为当你垂直扫描你的代码时它会有意义:

    .align_between {}
    .align_left {}
    .align_outer {}
    .align_right {}
    

    随着时间的推移,良好的习惯会让你早点睡觉。

    【讨论】:

      【解决方案4】:

      您可以使用 display: inline-block 之类的东西,但我认为您需要设置另一个 div 来将其移动,如果按钮左侧没有任何内容,您可以使用边距将其移动到位。

      另外但不是一个好的解决方案,您可以定位标签;将包含的 div 设为position: relative,然后将按钮的 div 设为position: absolute; right: 0,但就像我说的那样,这可能不是最好的解决方案

      HTML

      <div class="parent">
        <div>Left Div</div>
        <div class="right">Right Div</div>
      </div>
      

      CSS

      .parent {
        position: relative;
      }
      .right {
          position: absolute;
          right: 0;
      }
      

      【讨论】:

      • 老实说,我认为这是最好的解决方案。显示块外部容器以填充空间,显示 inline-block 内部容器以文本右对齐,跳过所有浮动头痛,仍然可以获得诸如边距和填充之类的好东西。
      • 我也喜欢(并赞成)这个,但确实有缺点,一个严重的问题是absolute 会从计算.parent 的尺寸中删除.right,所以以防万一类似absolute 兄弟元素的容器(例如,在我的情况下是一些窗口控件小部件),然后 .parent 将像空一样折叠。
      【解决方案5】:

      另一种解决方案可能类似于以下内容(取决于您元素的显示属性):

      HTML:

      <div class="left-align">Left</div>
      <div class="right-align">Right</div>
      

      CSS:

      .left-align {
        margin-left: 0;
        margin-right: auto;
      }
      .right-align {
        margin-left: auto;
        margin-right: 0;
      }
      

      【讨论】:

      • 非常酷的解决方案,不需要包装元素或向父元素添加样式。
      • “取决于你元素的显示属性”——它在哪种配置中起作用?我想父母是block,孩子是inline-block...但它只是做了同样的事情,没有任何边距(不足为奇)。
      【解决方案6】:

      您可以只使用带有百分比的 margin-left。

      HTML

      <div class="goleft">Left Div</div>
      <div class="goright">Right Div</div>
      

      CSS

      .goright{
          margin-left:20%;
      }
      .goleft{
          margin-right:20%;
      }
      

      (goleft 与默认相同,但如果需要可以反转)

      text-align 并不总是按布局选项的预期工作,它主要仅适用于文本。 (但也经常用于表单元素)。

      这样做的最终结果将与带有 float:right; 的 div 产生类似的效果。和宽度:80% 设置。除了,它不会像漂浮物那样聚集在一起。 (为后面的元素保存默认显示属性)。

      【讨论】:

        【解决方案7】:

        最好使用overflow: hidden; hack:

        <div class="container">
          <div style="float: left;">Left Div</div>
          <div style="float: right;">Right Div</div>
        </div>
        
        .container { overflow: hidden; }
        

        或者,如果你打算做一些花哨的 CSS3 投影,但上面的解决方案遇到了麻烦:

        http://web.archive.org/web/20120414135722/http://fordinteractive.com/2009/12/goodbye-overflow-clearing-hack

        PS

        如果你想干净,我宁愿担心内联 javascript 而不是 overflow: hidden; hack :)

        【讨论】:

        • 为什么它必须是一个黑客?难道没有一些适当的、干净的方法吗?
        • @TheLindyHop 不可靠,不 :-) 但至少使用 overflow: hidden hack,您不必添加额外的(非语义)元素。
        • idk,我会玩一会儿。至于内联 js,我正在开发的应用程序在很大程度上是一个正在进行的事情。而且是非常模块化的,所以有时候需要有内联js在调用ajax替换的时候执行=D
        • @TheLindyHop 这些并不是使用内联 js 的真正理由。实际上,恕我直言,没有任何充分的理由这样做:-)
        • ruby on rails 的 link_to 和 link_to_remote 使用它=\
        【解决方案8】:

        在您的情况下,如果您想右对齐那个绿色按钮,只需更改一个 div 以使所有内容都右对齐:

        <div class="action_buttons_header" style="text-align: right;">
        

        div 已经占据了该部分的整个宽度,因此只需通过右对齐文本将绿色按钮向右移动即可。

        【讨论】:

        • 我试过这个......它工作正常......但按钮没有垂直边距将其向下推到垂直居中。也许还有别的问题jsfiddle.net/58pRG/2
        • 添加行高:38px;到标题类: .action_buttons_header{ text-align: right;行高:38px; }
        猜你喜欢
        • 2010-11-04
        • 2011-05-31
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 2015-11-05
        • 1970-01-01
        相关资源
        最近更新 更多