#html #css #вёрстка
Как сделать накладывающиеся границы в CSS?
Сайт пример ( окно навигации ).
Нужно, чтобы border был на всех элементах по 2px, но так как элементы расположены
вплотную друг к другу, получается, что между ними 4px:
* {
margin: 0;
padding: 0;
}
body {
padding: 50px 100px;
background-color: #262626;
}
nav {
width: 100%;
height: 100px;
display: flex;
}
.div1,
.div3 {
flex-basis: 100px;
height: 100px;
background-color: #44B3E2;
margin: 0;
padding: 0;
flex-direction: row;
}
.div2 {
flex: 1;
height: 100px;
background-color: #5EE244;
flex-direction: row;
}
.div1,
.div2,
.div3 {
border: 2px solid white;
}
.div1:hover,
.div2:hover,
.div3:hover {
border-color: red;
}
Ответы
Ответ 1
nav { display: flex; width: 400px; margin: 0 auto; height: 100px; border: 2px solid #3e3e3e; } .div1, .div2, .div3 { position: relative; flex-grow: 1; } .div1, .div2 { border-right: 2px solid #3e3e3e; } .div1:before, .div2:before, .div3:before { content: ''; position: absolute; top: -2px; right: -2px; bottom: -2px; left: -2px; z-index: 1; border: 2px solid transparent; } .div1:hover:before, .div2:hover:before, .div3:hover:before { border: 2px solid #e6c87c; } UPD - пояснение: Проблема в том, что Вы делаете видимые границы каждому элементу со всех сторон. Что делает код выше: Для родителя nav ставится граница в 2px. Чтобы не создавать лишние границы ставятся только границы справа, только блокам .div1 и .div2. Для детей (.div1, .div2, .div3) создается псевдоэлемент :before с размерами -2px с каждой стороны и невидимой границей в 2px, которая становится видимой (устанавливается цвет) при наведении, т.е.: .div1:hover:before, .div2:hover:before, .div3:hover:before { border: 2px solid #e6c87c; }Ответ 2
Может быть так: для родителя - border-collapse: collapse; для элементов - display: table-cell;
Комментариев нет:
Отправить комментарий