【问题标题】:How to center absolute div horizontally using CSS?如何使用 CSS 将绝对 div 水平居中?
【发布时间】:2013-08-01 08:51:22
【问题描述】:

我有一个 div 并希望它水平居中 - 尽管我给它 margin:0 auto; 它没有居中...

.container {
    position: absolute;
    top: 15px;
    z-index: 2;
    width:40%;
    max-width: 960px;
    min-width: 600px;
    height: 60px;
    overflow: hidden;
    background: #fff; 
    margin:0 auto;
}

【问题讨论】:

标签: css html center absolute


【解决方案1】:

你需要设置left: 0right: 0

这指定从窗口边缘偏移边缘边缘的距离。

类似于 'top',但指定框的右边距边缘相对于框的包含块的 [right/left] 边缘的 [left/right] 偏移多远。

来源: http://www.w3.org/TR/CSS2/visuren.html#position-props

注意:元素的宽度必须小于窗口,否则它将占据窗口的整个宽度。

如果您可以使用媒体查询来指定最小边距,然后过渡到auto 以获得更大的屏幕尺寸。


.container {
  left:0;
  right:0;

  margin-left: auto;
  margin-right: auto;

  position: absolute;
  width: 40%;

  outline: 1px solid black;
  background: white;
}
<div class="container">
  Donec ullamcorper nulla non metus auctor fringilla.
  Maecenas faucibus mollis interdum.
  Sed posuere consectetur est at lobortis.
  Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
  Sed posuere consectetur est at lobortis.
</div>

【讨论】:

  • 注意:width 是必须的!
  • 是的。这是正确的......使用“文本对齐:中心;”和一个“左:0;右:0;”将允许您绝对定位一个 div,同时保持它水平居中。
  • @AlexG 我刚刚在 IE11 中加载了小提琴,它可以工作。你能澄清一下吗?
  • @AlexG 它确实在 IE11 中工作,但是如果你不声明 width,它不会工作。我有同样的问题。您必须使用示例中所示的宽度。
  • 还需要 margin: auto 才能在我们的案例中工作
【解决方案2】:

这在 IE8 中不起作用,但可能是一个可以考虑的选项。如果您不想指定宽度,这主要是有用的。

.element
{
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

【讨论】:

  • 这可能取决于他的项目要求。
  • 此时,还需要一个带有 -webkit- 前缀的规则才能在 Safari 中工作。
  • 不幸的是,它以某种方式将周围 div 的透明度也应用于里面的文本..
  • 这绝对是答案。对我来说,专门设置宽度是绝对不行的。
  • 完全同意@Mike
【解决方案3】:

虽然上面的答案是正确的,但为了让新手更简单,你需要做的就是设置边距,左右。如果 width 已设置 并且 position 是绝对的,则以下代码将执行此操作:

margin: 0 auto;
left: 0;
right: 0;

如果您不想使用单位设置值,也可以使用其他宽度值,例如 max-contentfit-content

演示:

.centeredBox {
    margin: 0 auto;
    left: 0;
    right: 0;
   
   
   /** Position should be absolute */
    position: absolute;
    /** And box must have a width, any width */
    width: 40%;
    background: #faebd7;
   
   }
&lt;div class="centeredBox"&gt;Centered Box&lt;/div&gt;

【讨论】:

  • 这非常适合一行引导列中的绝对图像
【解决方案4】:
.centerDiv {
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    text-align:center;
}

【讨论】:

    【解决方案5】:

    弹性盒?你可以使用 flexbox。

    .box {
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
      
      -webkit-justify-content: center;
      justify-content: center;
    
    }
    
    .box div {
      border:1px solid grey;
      flex: 0 1 auto;
      align-self: auto;
      background: grey;
    }
    <div class="box">
      <div class="A">I'm horizontally centered.</div>
    </div>

    【讨论】:

    • 这实际上对我的独特案例非常有效。 left: 0; right: 0; 扩展到 100%,这不是一个选项,因为子元素有背景颜色,left: 50%; transform: translateY(-50%); 不起作用,因为这将子元素限制为 50% 宽度。这是唯一保留孩子灵活尺寸的解决方案(仅限于浏览器支持)。谢谢!
    【解决方案6】:

    如此简单,只使用边距和左右属性:

    .elements {
     position: absolute;
     margin-left: auto;
     margin-right: auto;
     left: 0;
     right: 0;
    }
    

    您可以在此提示中看到更多内容 => How to set div element to center in html- Obinb blog

    【讨论】:

      【解决方案7】:

      这是一个链接,如果位置是绝对的,请使用它来使 div 居中。

      HTML:

      <div class="bar"></div>
      

      CSS:

      .bar{
        width:200px;
        border-top:4px solid red;
        position:absolute;
        margin-left:auto;
        margin-right:auto;
        left:0;
        right:0;
      }
      

      Example jsfiddle

      【讨论】:

        【解决方案8】:

        垂直和水平居中 使用left:50%;top:50%; transform: translate(-50%, -50%);

        .centeredBox {
            margin: 0 auto;
            left: 50%;
            top:50%;
           
           
           /** Position should be absolute */
            position: absolute;
            /** And box must have a width, any width */
            width: 40%;
            background: #faebd7;
            text-align: center;
            padding:10px;
            transform: translate(-50%, -50%);
           
           }
        &lt;div class="centeredBox"&gt;Centered Box&lt;/div&gt;

        【讨论】:

          【解决方案9】:

          你不能在position:absolute;元素上使用margin:auto;,如果你不需要它就删除它,但是,如果你这样做,你可以使用left:30%; ((100%-40%)/2 ) 和媒体查询最大值和最小值:

          .container {
              position: absolute;
              top: 15px;
              left: 30%;
              z-index: 2;
              width:40%;
              height: 60px;
              overflow: hidden;
              background: #fff;
          }
          
          @media all and (min-width:960px) {
          
              .container {
                  left: 50%;
                  margin-left:-480px;
                  width: 960px;
              }
          
          }
          
          @media all and (max-width:600px) {
          
              .container {
                  left: 50%;
                  margin-left:-300px;
                  width: 600px;
              }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2016-03-04
            • 2023-01-23
            • 1970-01-01
            • 2013-11-19
            • 2014-04-08
            • 1970-01-01
            • 1970-01-01
            • 2010-10-11
            相关资源
            最近更新 更多