Как заставить детей автоматически подогнать родительскую ширину только с помощью CSS?

У меня есть компонент на стороне сервера, который генерирует "панель инструментов" с жидкостью, используя DIV без фиксированной ширины, генерируя в ней много A.

Затем мне нужно настроить этот макет, чтобы все теги A автоматически соответствовали ширине родителя. Но число детей является переменной и ширина родителя неизвестна (он автоматически подходит к окну).

Я сделал несколько тестов с этим скриптом: http://jsfiddle.net/ErickPetru/6nSEj/1/

Но я не могу найти способ сделать его динамичным (раскомментируйте последний тег A, чтобы увидеть, как он не работает, LOL).

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

Как я могу сделать все дети автоматически привязанными к родительской ширине независимо от количества детей?

Ответ 1

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

/* Important parts */
.parent {
  display: flex;
}

.parent a {
  flex: 1;
}

/* Decoration */
.parent {
  padding: 8px;
  border: 1px solid #ccc;
  background: #ededed;
}

.parent a {
  line-height: 26px;
  text-align: center;
  text-decoration: none;
  border: 1px solid #ccc;
  background: #dbdbdb;
  color: #111;
}
<div class="parent">
  <a href="#">Some</a>
  <a href="#">Other</a>
  <a href="#">Any</a>
</div>

<br>

<div class="parent">
  <a href="#">Some</a>
  <a href="#">Other</a>
  <a href="#">Any</a>
  <a href="#">One More</a>
  <a href="#">Last</a>
</div>

Ответ 2

Вы можете использовать display: table-cell:

Смотрите http://jsfiddle.net/6nSEj/12/ (или с 5 детьми)

Это не будет работать в IE7, потому что этот браузер просто не поддерживает display: table и друзей.

div.parent {
    ..
    width: 100%;
    display: table;
    table-layout: fixed;
}
div.parent a {
    ..
    display: table-cell;
}

Ответ 3

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

$("div.parent a").css("width", (($("div.parent").width() / $("div.parent a").length ) -2) + "px");