0

我有一个水平跨越我的网页的标题栏,它由一个 div 标签和三个嵌套的 div 标签组成。

HTML:

<div id="top-bar">
    <div id="leftTop">
        LEFT
    </div>
    <div id="rightTop">
        RIGHT
    </div>
    <div id="centerTop">
        CENTER
    </div>
</div>

CSS:

#top-bar
{
    margin: 0;
    padding: 1px 4px;
    font-size: x-small;
    background-color: #005555;
    font-family: Arial;
}
#top-bar .separator
{
    padding: 0 7px;
    border-right: 0px solid #fff;
    border-left: 0px solid #fff;
}
#leftTop
{
    display: inline;
    float: left;
}
#rightTop
{
    display: inline;
    float: right;
}
#centerTop
{
    color: #ffffff;
    text-align: center;
}

它工作得很好,除了 div 标签在 HTML 代码中乱序,我不喜欢。如果我通过将 div 标签放置在 HTML 中的 Left、Center 和 Right 来排序它们,那么 Right div 就会从网页中消失!我猜它与 float 和 text-align 属性发生冲突有关。

任何人都对这里发生的事情有任何想法,或者在 CSS 中有更简单的方法吗?

4

7 回答 7

1

float: left;在没有任何花车的情况下试穿#centerTop或试穿display: inline这三个。

于 2009-05-26T23:12:43.187 回答
0

这工作正常,但这取决于你需要什么。如果您不知道内容的高度并且希望它动态扩展,那么这还不够:

    #leftTop
    {
        float: left;
    }
    #rightTop
    {            
        float: right;
    }
    #centerTop
    {
        float:left;
        text-align: center;
    }
于 2009-05-26T23:30:25.010 回答
0

我刚刚在 Firefox 3.0.10、Opera 9.64、IE8 和 Google Chrome 2.0.181.1 中测试了原始帖子中的代码

所有浏览器都显示了所有 3 个 div,没有一个 div 从屏幕上掉下来……您可能使用的是 IE6 吗?

于 2009-05-26T23:45:02.313 回答
0

浮动后,使用相对定位交换 div 的位置:

的HTML

<div id="top-bar">
    <div id="leftTop">
        LEFT
    </div>
    <div id="centerTop">
        CENTER
    </div>
    <div id="rightTop">
        RIGHT
    </div>
</div>

CSS

#leftTop {
   width:33%;
   float:left;
}
#centerTop {
   width:33%;
   float:right;
   position:relative;
   right:33%;
}
#rightTop {
   width:33%;
   float:right;
   position:relative;
   left:33%;
}

我在Perfect Liquid Layouts中使用相同的过程来更改列源排序

于 2009-05-27T05:09:37.317 回答
0

我正在运行您的 FF 3.0.10 的 HTML 和 CSS。当您将 CENTERTOP div 重新排列在 LEFTOP 和 RIGHTTOP div 之间时,RIGHTTOP div 不会“脱离页面”,但“RIGHT”文本只会落在下一行。

下面提出了我的解决方案(您会注意到我有一些补充和一些最佳实践技术)。

HTML 代码:

<html>
<head>
    <link rel="stylesheet" href="global.css">
</head>
<body>
    <div id="top-bar">
        <div id="leftTop">
                LEFT
        </div>
        <div id="centerTop">
            CENTER
        </div>
        <div id="rightTop">
                RIGHT
        </div>
    </div>
    <div class="clearer">
    </div>
    <div id="randomContent">
            RANDOM CONTENT
    </div>
</body>

代码:

#top-bar {
    margin: 0;
    font-family: Arial;
}

#leftTop {
    float: left;
    width: 20%;
    border: 1px solid red;
}

#centerTop {
    float: left;
    width: 20%;
    border: 1px solid blue;
}

#rightTop {
    border: 1px solid green;
}

.clearer {
    clear: both;
}

#randomContent {
    background-color: yellow;
}

所以你会注意到在 HTML 中 div 是按照从左到中到右的顺序排列的。在这个 CSS 中,这已经通过向左浮动 LEFTTOP 和 CENTRETOP div 反映出来。您还会注意到我在 LEFTTOP 和 CENTERTOP div 上指定了一个 width 属性,以使您能够根据需要将 div 隔开。(当我在 div 的边框中添加时,您将能够直观地看到您的宽度修改)。没有在 RIGHTTOP div 上应用宽度百分比属性,因为它将消耗剩余的 60% 的宽度(在 LEFTTOP 和 CENTRETOP 消耗了 40% 之后)。

我还添加了一个更清晰的 div。想想 CLEARER div 是一个水平换行符。本质上,它充当了一条分界线,将浮动的 div 与下面的内容分开。

然后,您可以在 RANDOMCONTENT div 中添加您想要的任何内容。

希望这可以帮助 :)

于 2009-05-27T00:12:14.020 回答
0

另一种解决方案:

  • 将 leftTop、centerTop 和 rightTop 设置为display:table-cell
  • 将顶栏设置为display:table-row
  • 设置要显示的容器:table
  • 将容器和行(#table-bar)的宽度设置为100%;
  • 将列的宽度设置为所需的比例(例如,左右 25%,中心 50%)
  • 警告:表格、表格行和表格单元格 css 显示值在 IE 5.5 或 6(可能还有 Opera 8)中不起作用;但它们在所有当代浏览器中都能很好地工作。IE 条件可用于拆分 IE > 5 和 IE < 7 的代码。

测试:

<html>
<head>
<title>3 Column Header Test</title>
<style type="text/css">
body#abod {
background-color:#F5ECBD;
color:#000;
}
#hdrrow {
margin:0;
padding:0;
width:100%;
border:1px solid #0C5E8D;
display:table;
}
#top-bar {
margin:0;
padding:1px 4px;
width:100%;
font-size:100%;
background-color:orange;/*#005555;*/
font-family: Arial;
border:1px solid #000;
display:table-row;
}
#leftTop {
margin:0;
padding:0 16px;
width:24%;
text-align:left;
color:#000;
background-color:#F0DD80;
border:1px dashed #f00;
display:table-cell;
}
#centerTop {
margin:0;
padding:0 16px;
width:40%;
margin:0 auto;
text-align:center;
color:#000;
background-color:#F5ECBD;
border:1px dashed #f00;
display:table-cell;
}
#rightTop {
margin:0;
padding:0 16px;
width:24%;
text-align:right;
color:#000;
background-color:/*#F0DD80;*/transparent;
   /*shows the orange row color*/
border:1px dashed #f00;
display:table-cell;
}
#footer {
padding:25px;
color:#000;
background-color:#F5ECBD;
}
</style>
</head>
<body id="abod">
<div id="hdrrow">
    <div id="top-bar">
        <div id="leftTop">
        LEFT
        </div>
        <div id="centerTop">
         CENTER
         </div>
         <div id="rightTop">
         RIGHT
        </div>
    </div>
</div>
<h4 id="footer">Footer Lorem ipsum dolor sit amet</h4>
</body>
</html>
于 2009-05-27T04:13:53.573 回答
0

我不知道它会消失,但它会下降一行。很多网站都因为这个原因把它弄乱了(我知道我这样做)。

另一种选择:

#top-bar
{

    margin: 0;
    padding: 1px 4px;
    font-size: x-small;
    background-color: #005555;
    font-family: Arial;
}
#top-bar .separator
{
    padding: 0 7px;
    border-right: 0px solid #fff;
    border-left: 0px solid #fff;
}
#top-bar>div
{
    float: left;
    width: 33%;

}
#rightTop
{
    text-align: right;
}
#centerTop
{
    color: #ffffff;
    text-align: center;
    width: 34%;
}

然后<br style="clear:both"/>在关闭顶栏 div 之前放置。

<div id="top-bar">
    <div id="leftTop">
        LEFT
    </div>
    <div id="centerTop">
        CENTER
    </div>
    <div id="rightTop">
        RIGHT
    </div>
    <br style="clear:both"/>
</div>

但是,不确定您是否希望像这样定义宽度。

于 2009-05-27T04:32:52.697 回答