Отображение 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>