CSS居中技巧

Posted

技术标签:

【中文标题】CSS居中技巧【英文标题】:CSS centering tricks [closed] 【发布时间】:2010-09-13 23:28:08 【问题描述】:

我最喜欢的仅使用 CSS 使 xhtml 元素居中的公式如下:

display: block;
position: absolute;
width: _insert width here_;
left: 50%;
margin-left: _insert width divided by two & multiplied by negative one here_

在支持它的浏览器中还有更简单的 margin:auto 方法。是否有其他人有巧妙的方法来强制内容在其容器中居中显示? (垂直居中加分)

编辑 - 哎呀,忘记了左侧边距中的“负”部分。固定。

【问题讨论】:

另外,left 是 width/2 - 它是如何居中的?如果我还有选票,我会投票 margin:auto;这是最可靠的。 为什么在底部乘以一? 哎呀,对不起。应该是负数。固定。 哦,直到 - 你将它向右移动 50%,然后再次向左移动 1/2 宽度,使其居中。想一想,或者画出来,你会明白的。 【参考方案1】:
div #centered
 margin: 0 auto;

根据我的经验,似乎是最可靠的。

【讨论】:

实际上只适用于大多数最新的浏览器。几乎任何版本,但最新的 IE 将无法正确处理,甚至其他供应商的旧版本也会失败。此外,提问者已经提到了该解决方案,您为什么在回答中重复它? 还要注意这个方法,它只适用于最上面的div层,不可能对divs inside divs inside divs使用相同的方法... 可能应该提到的是给包含元素 text-align:center;将有助于修复无法正确解释 margin:auto 的浏览器,但您必须明确地将 text-align 设置回您希望它在居中元素本身上的任何内容以抵消这种情况。【参考方案2】:

坚持边距:0自动;用于水平对齐; 如果您还需要垂直对齐,请使用 position: absolute;最高:50%;边距顶部:-(宽度/ 2)像素;但是请注意,如果您的容器的宽度大于屏幕的宽度,则使用 Position: absolute 方法,它的一部分将在左侧从屏幕上脱落。

【讨论】:

什么?像 ???? 否,例如:【参考方案3】:

好吧,我不得不说,这看起来有点矫枉过正。对于旧浏览器,我倾向于将容器设置为 text-align:center;,对于现代浏览器,我倾向于将容器设置为 margin:auto;,并保持原样。然后在元素中重置 text-align(如果它包含文本)。

当然,有些东西需要设置为块,宽度也需要设置...但是你到底想设置什么样式需要这么多修改?

<div style="text-align:center">
     <div style="width:30px; margin:auto; text-align:left">
         <!-- this div is sitting in the middle of the other -->
     </div>
</div>

【讨论】:

这个等式非常适合 position:absolute,不过 - 除了已经提到的方法之外,您还能想到其他方法吗?【参考方案4】:

只要您确保 IE 处于标准模式,Margin:auto 就可以在所有浏览器中使用。

它比其他的更挑剔,并且要求您的文档类型是文档中的第一个,这意味着它之前没有空格(空格、制表符或换行符)。

如果您这样做,margin:auto 就是您的最佳选择! :)

【讨论】:

另外,如果您使用 XHTML 并使用 XML 声明,IE 会阻塞。【参考方案5】:

请注意,margin:auto;仅当浏览器可以计算要居中的项目的宽度和父容器的宽度时,该方法才有效。在许多情况下设置宽度:自动;有效,但在某些情况下无效。

【讨论】:

【参考方案6】:

这是一个方便的 CSS 技巧书签

http://css-discuss.incutio.com/

也包含lotsofcentering技巧。

【讨论】:

【参考方案7】:

使用 50% 方法的绝对定位具有严重的副作用,如果浏览器窗口比元素窄,那么某些内容将出现在浏览器的左侧 - 无法滚动到它。

坚持自动边距 - 它们更可靠。

如果您在标准模式下工作(您应该这样做),那么您可能关心的所有浏览器都支持它们。

如果您确实需要支持 Internet Explorer 5.5 及更早版本,可以使用 text-align hack。

【讨论】:

【参考方案8】:
body 
    text-align: center;

#container 
    width: 770px;
    margin: 0 auto;
    text-align: left;

这在所有常用的浏览器中都能很好地工作。如前所述,margin: 0 auto; 并不适用于所有 IE 的半当前版本。

【讨论】:

【参考方案9】:

试试这个;不知道它是否在 IE 中工作,但在 Fx 中工作正常。它仅使用 CSS(无 javascript)在页面上居中 DIV 块,没有自动边距,并且 DIV 块中的文本仍然左对齐。我只是想知道垂直居中是否也可以这样工作,但到目前为止还没有成功。

<html>
<head>
<title>Center Example</title>
<style>
.center 
   clear:both;
   width:100%;
   overflow:hidden;
   position:relative;

.center .helper 
   float:left;
   position:relative;
   left:50%;

.center .helper .content 
   float:left;
   position:relative;
   right:50%;
   border:thin solid red;

</style>
</head>
<body>
<div class="center">
   <div class="helper">
      <div class="content">Centered on the page<br>and left aligned!</div>
   </div>
</div>
</body>
</html> 

【讨论】:

嗯,太汤了 - 额外的“助手”和“中心”div 不会添加任何语义值。这就是我们试图摆脱的——xhtml 用于内容标记,而不是内容布局。

以上是关于CSS居中技巧的主要内容,如果未能解决你的问题,请参考以下文章

CSS的23个垂直居中技巧,你都学会了吗?

CSS布局技巧之——各种居中

CSS布局技巧之——各种居中

CSS布局技巧之——各种居中

CSS的23个垂直居中技巧,你都学会了吗?

CSS网页制作:让网页内容居中的方法与技巧