IE6, IE7: растянуть последний li до совокупной ширины предыдущих li - PullRequest
3 голосов
/ 03 октября 2010

Учитывая эту разметку:

<ul class="grafiek">
    <li class="first-child">item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li class="last-child">item</li>
</ul>

Как мне сделать так, чтобы браузер выглядел так:

alt text

Другими словами: последний элемент (с ложным псевдоклассом last-child) должен всегда растягиваться, чтобы вместить совокупную общую ширину предыдущих, произвольных величин (в пределах разумного), из <li> s

Это то, что я имею до сих пор:

ul.grafiek {
    float: left;
}
ul.grafiek li {
    float: left;
    display: block;
    margin-left: 6px;
    width: 56px;
    height: 66px;
    padding: 12px 0;
    color: #fff;
    text-align: center;
    font-size: 11px;
    line-height: 1;
    background-color: #c5015a;
}
ul.grafiek li.first-child {
    margin-left: 0;
}
ul.grafiek li.last-child {
    clear: both;
    margin: 10px 0 0 0;
    width: 100%;
    height: 23px;
    padding: 0;
    line-height: 23px;
    background-color: #0a2d7f;
}

IE6 растягивает последний <li> до общей ширины родительского элемента <ul>. IE7 не растягивает это вообще. Как мне заставить это работать и в этих двух браузерах?

PS: Firefox, Chrome и Opera работают ожидаемо.

Ответы [ 4 ]

1 голос
/ 03 октября 2010

Попробуйте установить position: relative; и / или zoom: 1; на ul.grafiek

1 голос
/ 03 октября 2010

Можно ли ul.grafiek определить явную ширину?Если это так, то это должно сработать для IE, так как он имеет проблемы с вычислением общей ширины чисел с плавающей запятой.

0 голосов
/ 03 октября 2010

Я заметил, что у вас есть фиксированная высота на последнем элементе. Это открывает перед нами возможность попробовать некоторые приемы абсолютного позиционирования, и я думаю, что (наряду с некоторыми хаки CSS или условными комментариями) вы получите то, что ищете.

Если я изменю ul.grafiek, то вот так:

ul.grafiek {
    float: left;
    position: relative;      
    border: 1px dashed gray; /* just for visualization while working on the problem */
    margin: 0;               
    padding: 1px;
    *padding-bottom: 33px;
}

И добавив *position: absolute; и *bottom: 0; к ul.grafiek li.last-child, я получу макет , который практически одинаков в Firefox 3.6, Safari 4, IE6 и IE7.

Я говорю по существу, потому что есть некоторые различия в высотах li между IE и всем остальным. Они исчезнут, если вы добавите объявление doctype, но в IE6 макет снова сломается. : |

0 голосов
/ 03 октября 2010

Я безумно пытался сделать это чисто, только для CSS, но в итоге я пришел к тому же самому.IE6 сначала вычисляет ширину 100% последнего элемента списка, а затем оборачивает родительский элемент вокруг него.(И мой IE7 не работает, я не смог это проверить.)

Что я могу порекомендовать, так это создавать классы для всех ожидаемых элементов (до максимальной ширины экрана).будет соответствовать), и измените класс UL, чтобы он соответствовал количеству внутренних линий (опять же, до того же максимума).

Таким образом, ваш UL получает один класс:

<ul class="grafiek items6_grafiek">
    <li class="first-child">item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li class="last-child">item</li>
</ul>

И добавьте к существующему CSS:

.items1_grafiek {width: 56px}
.items2_grafiek {width: 118px}
.items3_grafiek {width: 180px}
.items4_grafiek {width: 242px}
.items5_grafiek {width: 304px}
.items6_grafiek {width: 366px}

И, возможно, если вы динамически добавляете элементы в JS, вам нужно изменить класс itemsN_grafiek на правильный.

...