#html #css
#HTML #css
Вопрос:
По какой-то причине нижняя граница не будет отображаться внизу? Линия границы отображается в верхней части содержимого, в чем причина этого?
Хорош ли мой css?
HTML
<div class="rowOrder">
<div class="orderid">
<span>07/04/2011</span>
OrderID 1234
</div>
<div class="company">
My Company
</div>
</div>
CSS
.rowOrder {
padding:3px;
border-bottom: solid 1px #B4CE51;
display:block;
}
.rowOrder .orderid { float:left; margin-right:30px; }
.rowOrder .orderid span {
display:block;
}
.rowOrder .company {
float:left;
font-weight:bold;
}
Ответ №1:
- Как только вы перемещаете элемент, он выходит из общего потока, означает, что содержащий div не будет действовать как содержащий div, например, для границ содержащего div. Решение, добавьте еще один div в конце в
rowOrder
со стилем=»очистить: оба» (или попробуйте присвоить это последнему внутреннему div. - Вам не нужно указывать свой div
display: block
- Не указывайте свой диапазон
display: block
просто используйте div - Похоже, вы пытаетесь представить табличные данные. Семантика в этом случае заключается в использовании
<table>
тега.
Комментарии:
1. 1 Хороший комментарий о «похоже, вы пытаетесь представить табличные данные. Семантика в этом случае заключается в использовании
<table>
тега». Tableless — это не прекращение использования таблиц на всю оставшуюся жизнь.
Ответ №2:
Одна странность, которую вы можете использовать в своих интересах, заключается в том, что DIVS с overflow: hidden увеличиваются, чтобы содержать их плавающие элементы. Это, конечно, взлом, но он работает в разных браузерах. Переполнение: hidden не имеет никакого другого эффекта, поскольку содержащему DIV не задан какой-либо явный размер.
Комментарии:
1. спасибо, что исправили проблему, добавив overflow: hidden в .rowOrder css. Нижняя граница имеет полную ширину, как и ожидалось, но почему float: left; этого не делает?
Ответ №3:
Вы могли бы попробовать навести Firebug на элементы, чтобы выделить, где расположены divs (или наложить на них цвета фона).
Возможно, это плавающая проблема (попробуйте floating .rowOrder слева?)
Ответ №4:
Плавающие элементы нарушают поток HTML, поэтому вы должны учитывать это. И это то, что здесь происходит.
Вы можете легко убедиться в этом, используя Firebug (расширение FF ), например, и проверив свой rowOrder div. Вы должны видеть, что он не имеет полной высоты, какой он должен быть. Ваш OrderID и company div имеют определенную высоту, но содержащий div (например, rowOrder ) имеет гораздо меньшую высоту. Это типичный индикатор того, что значения с плавающей точкой не очищаются. Div rowOrder должен иметь по крайней мере высоту всего, что он содержит.
Ответ Итая устраняет проблему.
Ответ №5:
Плавающие элементы не сопоставляются при вычислении родительской высоты. И свойство float не следует использовать для простого выравнивания элементов. Для этого у нас есть свойство align или свойство text-align родительского элемента.
попробуйте это:
.rowOrder {
padding:3px;
border-bottom: solid 1px #B4CE51;
display:block;
text-align:left;
}
.rowOrder {
margin-right:30px;
}
.orderid, .company{
display:inline-block;
vertical-align:top;
}
.rowOrder .company {
font-weight:bold;
}