【问题标题】:CSS alternative to centerCSS替代中心
【发布时间】:2012-12-26 12:47:33
【问题描述】:

人们不喜欢center 标签,但对我来说它总是工作正是我想要的方式。尽管如此,center 已被弃用,所以我会努力。

现在我看到很多人建议使用神秘的 CSS margin: 0 auto;,但我什至无法让它工作(参见小提琴 here)。其他人会去修改positiondisplay,但这总是会破坏其他东西。

如何使用 css 将 span 居中,使其行为与 center 标记完全相同?

<div class="container">
  <span class='btn btn-primary'>Click me!</span>
</div>

【问题讨论】:

    标签: center css


    【解决方案1】:

    Span 是内联元素,用于居中的margin: 0 auto 仅适用于宽度小于 100% 的非内联元素。

    一种选择是在容器上设置对齐方式,尽管在这种情况下这可能不是您想要的:

    div.container { text-align: center }
    

    http://jsfiddle.net/MgcDU/1270/

    另一个选项是更改span的显示属性:

    /* needs some extra specificity here to avoid the display being overwritten */
    span.btn.btn-primary { 
      display: table;
      margin: 0 auto;
    }
    

    使用display: table 消除了对特定宽度进行硬编码的需要。它会根据其内容缩小或增长。

    http://jsfiddle.net/MgcDU/1271/

    【讨论】:

    • 这就是我讨厌 CSS 的地方。 display: table,WTF?
    • 嗯,它有效。 Table 只是一个选择不当的值名称,并没有像其他一些显示属性值(inline、block、inline-block 等)那样真正描述它的流动方式。
    • 另外需要注意的是,如果有的话,你需要用float: none; 删除任何floats。
    • 不,谢谢,我会坚持使用旧的&lt;center&gt;,它更容易、更快捷……是否已弃用。
    【解决方案2】:

    您可以设置.container { text-align:center; },以便div.container 中的所有内容都居中。

    一般来说,有两种方法可以使事物居中。

    1. 要将内联元素(如文本、跨度和图像)置于其父级内的中心,请在父级上设置 text-align: center;
    2. 要使块级元素(例如标题、div 或段落)居中,它必须首先具有指定的宽度(例如width: 50%;)。然后将左右边距设置为自动。您的margin: 0 auto; 示例说上边距和下边距应该为0(这对于居中无关紧要)广告左右边距应该是自动的——它们应该彼此相等。

    &lt;center&gt; 元素实际上只是带有text-align:center; 的块级元素。如果你在上面发送border: solid red 1px;,你可以看到它是 100% 宽的,并且里面的所有东西都是居中的。如果将text-align 更改为左,则其子项不再居中。示例:http://jsfiddle.net/KatieK/MgcDU/1275/。也许你应该只考虑你的&lt;div class="container"&gt;text-align:center; } 等同于&lt;center&gt;

    【讨论】:

    • 你是说如果同级元素不居中,则需要将内联元素包裹在父元素中以便居中?
    • 如果同级元素不居中,内联元素反对会居中吗?
    • 为了让我回答正确的问题,你能举个例子,包括center吗?
    • 其他以联合国为中心的兄弟姐妹如何融入您的榜样?
    • 新的span.btn 元素不是&lt;span class='btn btn-primary'&gt; 的兄弟;它是&lt;center&gt; 的兄弟姐妹。 &lt;center&gt; 元素充当div.container,上面设置了height: 100%;text-align:center;
    【解决方案3】:

    你将 span 块设置为水平,给它一个宽度以便 margin:auto 工作

    看到这个fiddle

    .center {
             display:block;
             margin:auto auto;
             width:150px; //all rules upto here are important the rest are styling
             border:1px solid black;
             padding:5px;
             text-align:center;
    }
    

    更新:为了不指定宽度并在跨度上具有元素的自然宽度,您必须在父级上使用 textalign

    看到这个fiddle

    .container{text-align:center}
    .center {
      border:1px solid black;
      padding:5px;
    }
    

    【讨论】:

    • 没有。我不想只为居中指定宽度。没办法。
    • @Randomblue 好吧,如果它没有指定宽度,它仍然居中 - 它只是占据了整个宽度!想一想……没有宽度,什么是居中的。
    • 我希望它采用“自然宽度”。 CSS真的那么难吗? center 保留“自然宽度”。
    • 或者你可以使用 display:table;边距:0 自动;正如另一张海报所建议的那样(虽然可疑;))
    • @PaulSullivan width: 0px; 不会产生使块元素居中的效果。例如,请参阅jsfiddle.net/5c4ecDIV 变为 0 像素宽,但内容(按钮)从以 DIV 为中心的 0 像素宽的左侧延伸。 display: inline-block; 更接近“自然宽度”,但它不以 margin: 0 auto; 为中心。在这种情况下,最好的解决方案是将元素包装在一个应用了text-align: center; 的新元素中。 margin: 0 auto; 几乎专门用于您知道居中元素宽度的情况。
    【解决方案4】:

    &lt;span&gt; 是一个内联元素。 &lt;div&gt; 是一个块元素。这就是它没有居中的原因。

    <div class="container" style='float:left; width:100%; text-align:center;'>
      <span class='btn btn-primary'>Click me!</span>
    </div>
    

    只有将 span 的内容转换为块时,才能将其居中,使用 'inline-block' 样式。

    【讨论】:

    • 包含的引导库正在处理 display: inline-block; 属性的应用程序。
    【解决方案5】:

    您的父元素需要有更大的宽度才能让子元素定位在其中。之后,margin: 0 auto; 的技巧是让父容器 positiondisplay 的值相互兼容。

    .container {
      border: 2px dashed;
      width: 100%;}
    
    .btn {
      display: block;
      margin: 0 auto;
      width: 25%;
    }
    

    http://jsfiddle.net/rgY4D/2/

    【讨论】:

    • width: 25%?肯定不是。我不希望按钮在调整窗口大小时改变宽度!
    • @Randomblue 这是一个例子。您可以设置固定宽度,但百分比在响应式设计中非常常见。
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2020-01-25
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多