CSS: содержит пять плавающих 20% элементов с границами
Я пытаюсь совместить пять горизонтальных элементов меню с "float:left" рядом друг с другом внутри контейнера, который занимает 80% экрана и минимум 960 пикселей. Для этого я изначально установил их минимальную ширину 192px (960/5) и их ширину 20%, но быстро понял, что это плохо работает с добавлением границ 1px, в результате чего одна из кнопок "выбрасывается за борт".
Изменение ширины до 19.895333% и 191px соответственно решило проблему, однако это явно хакерское решение, которое также оставляет уродливое пространство в 2-3 пикселя в правой части меню.
Есть ли более элегантный способ выравнивания этих элементов и учета ширины бонуса, добавляемого границами, отступами и т. Д.? Я попытался "переполнить: скрытый", чтобы просто скрыть все, что может ткнуть за пределы контейнера, но это просто скрывает всю 5-ю кнопку.
Картинка для иллюстрации результата:
HTML-код:
<div class="menucontainer">
<div class="menutab" id="menutab_first">News</div>
<div class="menutab">Game Guide</div>
<div class="menutab">Articles</div>
<div class="menutab">Media</div>
<div class="menutab" id="menutab_last">Community</div>
</div>
Код CSS:
.menucontainer {
height: 26px;
margin-left: auto;
margin-right: auto;
border-width: 1px;
border-style: solid;
border-color: #303030 #101010 #000 #101010;
border-radius: 0px 0px 8px 8px;
}
.menutab {
line-height: 26px;
float: left;
width: 19.895333%;
text-align: center;
min-width: 191px;
border-right: 1px solid #202020;
background-image: url('../img/menubutton2.png');
background-size: 100% 100%;
font-family: 'Cabin', sans-serif;
}
#menutab_first {
border-radius: 0px 0px 0px 8px;
}
#menutab_last {
border-right: 0px;
width: 20%;
min-width: 192px;
border-radius: 0px 0px 8px 0px;
}
Заранее спасибо!
3 ответа
Для этого вы можете использовать box-sizing
Свойство, чтобы установить границы, которые будут появляться внутри ваших элементов, а не за их пределами:
elem {
-webkit-box-sizing: border-box; /* Some mobile browsers. */
-moz-box-sizing: border-box; /* Firefox. */
box-sizing: border-box; /* All other browsers IE8+. */
}
граница-бокс
Заданные ширина и высота (и соответствующие свойства min / max) для этого элемента определяют границу рамки элемента. То есть любые отступы или границы, указанные на элементе, размечаются и отрисовываются внутри указанных ширины и высоты. Ширина и высота содержимого вычисляются путем вычитания ширины границ и отступов соответствующих сторон из указанных свойств "ширина" и "высота".
Итак, в случае вашего CSS:
.menutab {
...
width: 20%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
...
}
Что вам нужно box-sizing:border-box;
Это свойство CSS изменит блочную модель для элемента так, что border
включен в width
а не снаружи, как со стандартной коробочной моделью.
Это означает, что ваши поля будут составлять 20% ширины страницы, а не 20% + ширина границ.
Задача решена.
box-sizing: border-box заставляет ширину границ считаться как часть 20%. Это лучшее решение, но если это каким-то образом повлияет на ваш макет, альтернативой является использование calc
вычесть границы из 20%, например : width: calc (20% - 2px);