【问题标题】:Make an element centred when it is alone, but aligned to the right when with another element使一个元素单独居中,但与另一个元素对齐时向右对齐
【发布时间】:2010-09-20 20:45:20
【问题描述】:

我们的页面通常有两个并排排列的元素。尽管为此探索了几个角度,但我们似乎无法让它发挥作用。我们并不反对使用 JavaScript,只是觉得基于 CSS 的解决方案应该是可能的。当element2 单独出现时,有没有办法只使用 CSS(必要时还可以使用额外的标记)来使其居中?

示例

有时我们有两个并排的元素。

<div id="container">
  <div id="element1">content</div>
  <div id="element2">content</div>
</div>

但在某些情况下,页面上只有element2,例如:

<div id="container">
  <div id="element2">content</div>
</div>

【问题讨论】:

    标签: html css user-interface layout


    【解决方案1】:

    有一个纯 css 解决方案,但它不适用于 IE 低于 7 的版本,因为它无法理解兄弟选择器 (+),因此您可能需要考虑 JavaScript 解决方案(也许是 Dean Edwards 'IE7)。无论如何,一些示例css:

    div#element2{
      width:100px;
      margin:0 auto;
    }
    div#element1{
      width:50px;
      float:left;
    }
    div#element1 + div#element2{
      width:50px;
      float:left;
      margin:0;
    }
    

    关键是 div#element1 + div#element2 行,它选择 div#element2,因为它直接跟在 div#element1 之后。

    【讨论】:

    • 啊,好主意!这很可能是仅使用 css 的最接近的解决方案。巧妙使用伪选择器我喜欢。
    【解决方案2】:

    严格的 CSS2 解决方案:

    #container {
        text-align:center;
    }
    #element1, #element2 {
        display:inline-block;
    }
    

    内部元素应该像 #container 内的内联文本一样布局,但在内部保持块。

    这是标准 CSS,但获得浏览器支持可能需要 some trickery

    【讨论】:

      【解决方案3】:

      这不是很酷的解决方案,因为表格不再“流行”,但它完全解决了问题(在所有 ie 下)

      <style>
          #container {
              margin:0 auto;
              width:100px;
          }
      
          #container table{
              width: 100%;
              text-align:center;
          }
      
          #element1{ 
              background-color:#0000ff;
          }
      
          #element2 {
              background-color: #ff0000;
          }
      </style>
      
      <div id=container>
          <table cellspacing=0 cellpadding=0>
              <tr>
                  <td id="element1">content</td>
                  <td id="element2">content</td>
              </tr>
          </table>
      </div>
      

      【讨论】:

        【解决方案4】:

        我认为 Phil 是在正确的轨道上,但你应该尝试使用 CSS last-child 伪类。据我所知,first-childlast-child 是 CSS 中逼近 if 构造的唯一方法。

        div#container div#element2:last-child {
            width:100px;
            margin:0 auto;
        }
        
        div#element1{
            width:50px;
            float:left;
        }
        
        div##element2{
            width:50px;
            float:left;
            margin:0;
        }
        

        上面的 CSS 基本上说“如果 element2 是其父元素的最后一个子元素,则使用这组样式,否则使用这些其他样式。

        这甚至应该在 IE7 中工作。

        【讨论】:

        • 我的方法也应该在 IE7 中工作,但是这两种方法在 IE6 中都失败了。选择哪一个是个人喜好问题,但也是不错的选择。
        • 天啊!我停止测试 IE6。 尴尬 :)
        • 其实我刚查了一下,last-child 来自 CSS2。它应该在 IE6 中工作。无论如何,他们现在使用的是什么版本的 IE?有人可以检查吗?我应该把这个作为一个问题发布在......哦,是的。
        • 几乎没有任何伪类可以在 IE6 中工作!我们很幸运,我们可以在链接上做悬停样式(你不能在任何其他元素上)!当前发布的 IE 版本是 7,8 是 beta 2,但是仍然有相当多的 IE6 用户拒绝更改。
        • 嘿,比尔,谢谢你的建议,我认为这也是解决这个问题的好方法。关于兼容性,我想你会发现 IE6 只支持 :link :hover :visited 和 :active。
        猜你喜欢
        • 2014-09-18
        • 1970-01-01
        • 2015-12-08
        • 2014-11-30
        • 2012-08-27
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多