проблемы с разметкой тегов css и div - PullRequest
0 голосов
/ 27 мая 2009

У меня есть строка заголовка, которая горизонтально проходит через мою веб-страницу, которая состоит из одного тега 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, слева, по центру и справа, тогда правый тег div просто исчезает с веб-страницы! Я предполагаю, что это как-то связано с конфликтом атрибутов float и text-align.

У кого-нибудь есть идеи по поводу того, что здесь происходит, или есть более простой способ сделать это в CSS?

Ответы [ 7 ]

1 голос
/ 27 мая 2009

Попробуйте float: left; на #centerTop или display: inline на всех трех без поплавков.

0 голосов
/ 27 мая 2009

Используйте относительное расположение, чтобы поменять местами дивы после их размещения:

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 , чтобы изменить порядок следования источника .

0 голосов
/ 27 мая 2009

Я не знаю, что он исчезнет, ​​но он упадет на линию. По этой причине многие сайты выводят его из строя (я знаю, что знаю).

Другая альтернатива:

#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 id="top-bar">
    <div id="leftTop">
        LEFT
    </div>
    <div id="centerTop">
        CENTER
    </div>
    <div id="rightTop">
        RIGHT
    </div>
    <br style="clear:both"/>
</div>

Однако не уверен, что вы хотите, чтобы ширина определялась следующим образом.

0 голосов
/ 27 мая 2009

Другое решение:

  • Установите для leftTop, centerTop и rightTop значение display: table-cell ,
  • Установите верхнюю панель на Отображение: строка таблицы ,
  • Установить контейнер на Отображение: таблица
  • Установить ширину контейнера и строки (# table-bar) на 100%;
  • Установите ширину столбцов в соответствии с желаемыми соотношениями (например, 25% для левого и правого, 50% для центра)
  • caveat: значения отображения css таблицы, строки таблицы и ячейки таблицы не работают в IE 5.5 или 6 (и, возможно, в Opera 8); но они хорошо работают во всех современных браузерах. Условные выражения IE могут использоваться для разделения кода для IE> 5 и IE <7. </li>

TEST:

<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>
0 голосов
/ 27 мая 2009

Я использую ваш HTML и CSS из FF 3.0.10. Когда вы переставляете элемент CENTERTOP так, чтобы он находился между элементами LEFTOP и RIGHTTOP, элемент RIGHTTOP не падает «со страницы», а текст «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>

КОД CSS:

#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 влево. Вы также заметите, что я указал свойство width в элементах LEFTTOP и CENTERTOP, чтобы вы могли размещать элементы div настолько широко, насколько вам нужно. (Вы сможете визуально увидеть ваши изменения ширины, как я добавил в рамке на divs). Свойство процента ширины не применено к элементу RIGHTTOP, так как он будет использовать оставшиеся 60% ширины (после того, как LEFTTOP и CENTRETOP израсходуют 40%).

Я также добавил CLEARER div. Подумайте о CLEARER div - это разрыв горизонтальной линии. По сути, он действует как линия разграничения для отделения плавающих элементов div от содержимого, приведенного ниже.

Затем вы можете добавить любой контент, который хотите, в раздел RANDOMCONTENT.

Надеюсь, это поможет:)

0 голосов
/ 27 мая 2009

Я только что протестировал код из исходного поста в Firefox 3.0.10, Opera 9.64, IE8 и Google Chrome 2.0.181.1

Все браузеры показали все 3 деления, ни один из них не упал с экрана ... Возможно, вы используете IE6?

0 голосов
/ 27 мая 2009

Это отлично работает, но зависит от того, что вам нужно. Если вы не знаете высоту содержимого и хотите, чтобы он динамически расширялся, этого недостаточно:

    #leftTop
    {
        float: left;
    }
    #rightTop
    {            
        float: right;
    }
    #centerTop
    {
        float:left;
        text-align: center;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...