Полностью заполнить ячейку таблицы любым количеством кнопок одинаковой ширины в CSS

#html #css #flexbox #width

#HTML #css #flexbox #ширина

Вопрос:

У меня есть (упрощенная) структура HTML, подобная этой:

 <div class="table">
    <form class="tr">
        <span class="td">
            <input type="submit" value="Button 1"/>
            <input type="submit" value="Button 2"/>
            <input type="submit" value="Button 3"/>
        </span>
    </form>
</div>
 

Кнопки отправки внутри генерируются динамически на стороне сервера с помощью JSP, поэтому их количество может варьироваться, обычно в диапазоне 1-3.

Вот упрощенный CSS, который у меня есть до сих пор:

 .table {
    display: table;
}
.table .tr {
    display: table-row;
}
.table .tr .td {
    display: table-cell;
    padding: 5px;
    border: 1px solid black;
}
.table .tr .td input[type=submit] {
    width: 100%;
}
 

Однако установка кнопок’ width=100% делает каждую кнопку такой же ширины, как и ячейка, заставляя их сворачиваться и отображаться рядом друг с другом по вертикали.

Я хочу увеличить ширину всех кнопок, чтобы они заполняли содержащую их ячейку, но все кнопки в одной ячейке должны иметь одинаковую ширину. Это должно работать для разного количества кнопок на ячейку, и я хочу решение, которое не зависит от JavaScript.

Вот еще одна визуализация того, как я хотел бы, чтобы это выглядело:

  ---------------------------------------------- 
| [  Button 1  ] [     B2     ] [   Btn. 3   ] |
 ---------------------------------------------- 
| [      Button A      ] [      Button B     ] |
 ---------------------------------------------- 
| [           only one wide button           ] |
 ---------------------------------------------- 
 

Комментарии:

1. Сколько на строку МАКСИМУМ?

2. @AllDani Обычно в диапазоне 1-3, как я уже сказал. Не уверен, что мне может понадобиться добавить больше в будущем.

3.Flexbox — единственное, что приходит на ум, но JavaScript обладает лучшей кроссбраузерной совместимостью и поддержкой: caniuse.com/#feat=flexbox ПРОТИВ caniuse.com/#search=javascript

Ответ №1:

Это идеальный случай для flexbox — применить display: flex к вашему td :

 .table .tr .td {
  display: flex;
} 
 

Дайте мне знать ваши отзывы по этому поводу. Спасибо!

 .table {
  display: table;
}
.table .tr {
  display: table-row;
}
.table .tr .td {
  display: flex;
  padding: 5px;
  border: 1px solid black;
}
.table .tr .td input[type=submit] {
  width: 100%;
} 
 <div class="table">
  <form class="tr">
    <span class="td">
            <input type="submit" value="Button 1"/>
            <input type="submit" value="Button 2"/>
            <input type="submit" value="Button 3"/>
        </span>
    <span class="td">
            <input type="submit" value="Button 1"/>
            <input type="submit" value="Button 2"/>
        </span>
    <span class="td">
            <input type="submit" value="Button 1"/>
        </span> 
  </form>
</div> 

Комментарии:

1. Ваше решение напрямую не сработало, потому что мне нужно, чтобы мои .td элементы были display:table-cell , иначе все ячейки будут выровнены по вертикали, а не по строкам и столбцам. Тем не менее, вы меня на правильном пути. Теперь я обернул содержимое каждого .td элемента в a <span style="display:flex">...</span> вместо непосредственного изменения display стиля моего .td элемента. Теперь это работает так, как задумано.