Отображение CSS: таблица-строка не расширяется, если для ширины установлено значение 100%
У меня проблема. Я использую FireFox 3.6 и имею следующую структуру DOM:
<div class="view-row">
<div class="view-type">Type</div>
<div class="view-name">Name</div>
</div>
И следующий CSS:
.view-row {
width:100%;
display:table-row;
}
.view-name {
display: table-cell;
float:right;
}
.view-type {
display: table-cell;
}
Если я сниму display:table-row
, он будет отображаться правильно, а view-row
будет показывать ширину 100%. Если я верну его, он сжимается. Я положил это на JS Bin:
http://jsbin.com/ifiyo
Что происходит?
Ответы
Ответ 1
Если вы используете display:table-row
и т.д., тогда вам нужна правильная разметка, которая содержит содержащую таблицу. Без этого ваш первоначальный вопрос в основном обеспечивает эквивалентную плохую разметку:
<tr style="width:100%">
<td>Type</td>
<td style="float:right">Name</td>
</tr>
Где таблица выше? Вы не можете просто иметь строку из ниоткуда (tr должно содержаться в table
, thead
, tbody
и т.д.)
Вместо этого добавьте внешний элемент с display:table
, установите 100% ширину на содержащий элемент. Две внутренние ячейки автоматически перейдут на 50/50 и выровнят текст прямо во второй ячейке. Забудьте floats
с элементами таблицы. Это вызовет так много головных болей.
Разметка:
<div class="view-table">
<div class="view-row">
<div class="view-type">Type</div>
<div class="view-name">Name</div>
</div>
</div>
CSS
.view-table
{
display:table;
width:100%;
}
.view-row,
{
display:table-row;
}
.view-row > div
{
display: table-cell;
}
.view-name
{
text-align:right;
}
Ответ 2
Протестированный ответ:
В поле .view-row css измените:
display:table-row;
в
display:table
и избавиться от "float" . Все будет работать должным образом.
Как было предложено в комментариях, нет необходимости в таблице обертывания. CSS позволяет исключить уровни древовидной структуры (в этом случае строки), которые являются неявными. Причина, по которой ваш код не работает, заключается в том, что "ширина" может быть интерпретирована только на уровне таблицы, а не на уровне таблицы. Когда у вас есть "таблица", а затем "таблица-ячейка" непосредственно под ней, они неявно интерпретируются как сидящие в строке.
Рабочий пример:
<div class="view">
<div>Type</div>
<div>Name</div>
</div>
с помощью css:
.view {
width:100%;
display:table;
}
.view > div {
width:50%;
display: table-cell;
}
Ответ 3
Обратите внимание, что в соответствии с спецификацией CSS3 вам не нужно обертывать ваш макет в элемент стиля таблицы. Браузер будет вызывать существование содержащихся элементов, если они не существуют.
Ответ 4
введите .view-type
class float:left;
или удалите float:right;
из .view-name
изменить: Оберните свой div <div class="view-row">
другим div, например <div class="table">
и установите следующий css:
.table {
display:table;
width:100%;}
Вы должны использовать структуру таблицы для получения правильных результатов.
Ответ 5
Вы можете вложить таблицу-таблицу непосредственно в таблицу. У тебя есть стол. Запуск eith table-row не работает. Попробуйте это с помощью этого HTML:
<html>
<head>
<style type="text/css">
.table {
display: table;
width: 100%;
}
.tr {
display: table-row;
width: 100%;
}
.td {
display: table-cell;
}
</style>
</head>
<body>
<div class="table">
<div class="tr">
<div class="td">
X
</div>
<div class="td">
X
</div>
<div class="td">
X
</div>
</div>
</div>
<div class="tr">
<div class="td">
X
</div>
<div class="td">
X
</div>
<div class="td">
X
</div>
</div>
<div class="table">
<div class="td">
X
</div>
<div class="td">
X
</div>
<div class="td">
X
</div>
</div>
</body>
</html>