У меня есть сложная проблема, с которой нужно справиться. Вот сценарий:
У меня есть неупорядоченный список, содержащий элементы списка. Они отображаются вертикально, с фоном чередующегося цвета, все из которых имеют одинаковую ширину (ограниченную div фиксированной ширины несколькими родительскими элементами вверх). На некоторых элементах есть индикатор элемента списка (list-style-type: square; list-style-position: inside;
), но на большинстве элементов его нет. В этих элементах списка есть три плавающих <div>
, все из которых содержат только текст. Один нужно выровнять по левому краю, а два других по правому краю элемента списка. Первый и выровненный по правому краю <div>
должен иметь фиксированную ширину, чтобы текст не перетекал на следующую строку или не выходил за границы элемента списка. Два других также должны иметь фиксированную ширину, так как их содержимое практически не изменит размер, за исключением различий в отображении браузера, зависящих от шрифта.
Вот простой текстовый пример:
--------------------------------------
| • <Some Text> <text2><text3>|
| <Some more text>...<text2><text3>|
| <other text> <text2><text3>|
--------------------------------------
Текст в первом элементе имеет этот CSS: text-overflow: ellipsis; overflow: hidden; white-space: nowrap;
, чтобы хорошо ограничить переполнение. Чтобы просмотреть весь контент, у меня есть хорошая черная магия jQuery, чтобы заставить его прокручиваться, что я уже протестировал и доказал вне этого контекста.
Моя текущая проблема заключается в том, что во всех основных браузерах плавание всех элементов приводит к тому, что каждый элемент списка не имеет высоты, за исключением тех, у которых есть индикатор списка (list-style-type
). Добавление разделителя clearfix в конец содержимого элемента списка приводит к тому, что содержимое отображается на всю ширину строки ниже индикатора элемента списка:
--------------------------------------
| • |
| <Some Text> <text2><text3> |
--------------------------------------
Все было бы очень просто, если бы первому тексту не нужно было задавать фиксированную ширину (мой макет уже так работает), а так и должно быть.
Для вашего удовольствия вот правильный пример HTML, иллюстрирующий именно мою проблему:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' lang='en' xml:lang='en'>
<head>
<title>HTML List Problem</title>
<style type="text/css">
#container { width: 420px; }
#container ul {
list-style-type: none;
margin: 0;
padding: 0 20px;
background: green;
}
.item { padding: 5px 0 4px 20px; }
.item-current {
list-style-type: square;
list-style-position: inside;
}
.item-even { background: yellow; }
.item-odd { background: orange; }
.text1 {
width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
float: left;
}
.text2, .text3 {
float: right;
width: 30px;
}
</style>
</head>
<body>
<div id="container">
<ul>
<li class="item item-current item-even">
<div class="text1 item-current">
Some Text
</div>
<div class="text2">
text2
</div>
<div class="text3">
text3
</div>
</li>
<li class="item item-odd">
<div class="text1">
Some Text
</div>
<div class="text2">
text2
</div>
<div class="text3">
text3
</div>
</li>
<li class="item item-even">
<div class="text1">
Some Text
</div>
<div class="text2">
text2
</div>
<div class="text3">
text3
</div>
</li>
<li class="item item-odd">
<div class="text1">
Some Text
</div>
<div class="text2">
text2
</div>
<div class="text3">
text3
</div>
</li>
</ul>
</div>
</body>
</html>