CSS динамическое горизонтальное меню навигации для заполнения определенной ширины (поведение таблицы)
Мне нужно создать горизонтальное меню навигации с изменяющимся количеством элементов (это важно - я не могу жестко кодировать ширину в CSS, и я не хочу вычислять их с помощью JS), которые заполняют до определенной ширины, скажем, 800px.
с таблицами,
<table width="800" cellspacing="0" cellpadding="0">
<tr>
<td>One</td>
<td>Two</td>
<td>Three</td>
<td>Four</td>
<td>Five Seven</td>
</tr>
</table>
<style>
table td {
padding: 5px 0;
margin: 0;
background: #fdd;
border: 1px solid #f00;
text-align: center;
}
</style>
обратите внимание, что более длинные элементы занимают больше места, и я могу добавлять элементы в HTML без изменения чего-либо в CSS, а пункты меню сжимаются для размещения дополнительных элементов - все меню никогда быть короче или длиннее 800px.
поскольку меню не является семантически правильным использованием таблицы, можно ли это сделать, скажем, со списком и чистым CSS?
4 ответов
на браузеры, которые поддерживают отображение таблицы правила CSS, да:
<style>
nav {display:table; width:800px; background:yellow}
ul {display:table-row; }
li {display:table-cell; border:1px solid red}
</style>
<nav>
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five Seven</li>
</ul>
</nav>
в принципе, вам нужно будет создать таблицу токенов. В действии: http://jsbin.com/urisa4
в противном случае: нет, если вы не можете компромисс ваши требования.
вы можете сделать что-то вроде этого:
<style type="text/css">
#container { width: 800px ; border: 1px dashed #333; }
#container div { width: inherit; display: table-cell; background: #ccc}
</style>
<div id="container">
<div>Something</div>
<div>Something</div>
<div>Something</div>
</div>
таким образом, он заполняет то, что вы хотите, но может вырасти до многих элементов.
надеюсь, что это помогает.
единственный способ сделать это с помощью CSS, это трудно-код width
на li
элементы (если вы будете использовать следующую структуру):
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five Seven</li>
</ul>
ul {
width: 80%; /* or whatever */
}
ul li {
width: 16%;
padding: 1%;
}
это оставляет, потенциально, "неиспользованный" 10% (для использования для margin
или дополнительные padding
).
в какой-то момент в будущем расчеты css возможно, удастся выполнить это более плавно.
это работает, но я не думаю, что вы хотите, чтобы некоторые думают :)
<div class="master">
<ul>
<li>test1</li>
<li>test2</li>
<li>aölsdkfaösdlfk</li>
<li>yeah baby</li>
<li>hi</li>
</ul>
</div>
.master {
width:800px;
background-color:black;
height:100px;
color:white;
display:table;
}
table {
width:100%;
}
ul {
display:table-row;
width:100%;
}
li {
display:table-cell;
width:auto;
margin:1px;
border:1px solid white;
background-color:red;
text-align:center;
vertical-align:middle;
}