Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как сделать накладывающиеся границы в CSS?

#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;

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

Отправить комментарий