如果我们事先不知道内容的宽度,则将其居中

时间:2020-03-05 18:48:23  来源:igfitidea点击:

经过大量尝试和搜索,我从未找到使用CSS2的令人满意的方法。

一种简单的实现方法是将其包装到一个方便的<table>中,如下面的示例所示。我们知道如何避免表格布局以及避免古怪的技巧吗?

table {
  margin: 0 auto;
}
<table>
  <tr>
    <td>test<br/>test</td>
  </tr>
</table>

我想知道的是如何在没有固定宽度的情况下也成为一个块。

解决方案

回答

这将是最无聊的答案,但它的工作原理是:

使用不推荐使用的<center>标签。

:P

我告诉过你那会很la脚。但是,就像我说的那样,它有效!

不寒而栗

回答

@Jason,是的,&lt;center>起作用。美好的时光。我将提出以下建议:

body {
  text-align: center;
}

.my-centered-content {
  margin: 0 auto; /* Centering */
  display: inline;
}
<div class="my-centered-content">
  <p>test</p>
  <p>test</p>
</div>

EDIT @Santi,一个块级元素将填充父容器的宽度,因此它实际上将是" width:100%",并且文本将在左侧流动,从而给我们留下无用的标记和不居中的元素。我们可能要尝试使用display:inline-block;。 Firefox可能会抱怨,但这是正确的。另外,尝试在.my-centered-content` DIV的CSS中添加一个" border:solid red 1px;",以查看尝试这些操作时发生了什么。

回答

我认为,如果我们使用<div>而不是<table>,那么示例也将同样有效。唯一的区别是<table>中的文本也居中。如果也需要,只需添加text-align:center;即可。规则。

要记住的另一件事是,默认情况下,<div>将填充所有可用的水平空间。如果不确定边框的开始和结束位置,请在其上放置边框。

回答

以下工作足够好。注意位置,并使用自动

<div style="border: 1px solid black; 
            width: 300px; 
            height: 300px;">
            <div style="width: 150px; 
                        height: 150px; 
                        background-color: blue;
                        position: relative;
                        left: auto;
                        right: auto;
                        margin-right: auto;
                        margin-left: auto;">
             </div>
</div>

注意:不确定它是否可以在IE中使用。

回答

#wrapper {
  width: 100%;
  border: 1px solid #333;
}
#content {
  width: 200px;
  background: #0f0;
}
<div id="wrapper" align="center">
  <div id="content" align="left"> Content Here </div>
</div>

回答

在FF3中,我们可以:

<div style="display: table; margin: 0px auto 0 auto;">test<br>test</div>

这样做的好处是可以使用任何语义上最有意义的元素(在适当的情况下,用更好的东西替换div),但缺点是它在IE中失败(grr ...)

除此之外,不设置宽度,最好的选择是使用JavaScript精确定位左侧边缘。不过,我不确定我们是否会将其归类为"古怪的把戏"。

当然,这实际上取决于我们想做什么。给定我们简单的测试用例,具有text-align:center的div将具有完全相同的效果。