Слишком сложное первое решение.
Сначала примените верхнюю границу ко всем элементам,
border-top: 1px solid;
Теперь только у последнего элемента отсутствует нижняя граница, мы можем исправить это использование :last-child
Затем примените соответствующие границы к .bigBorders
элементам.
border-top: 3px solid blue;
border-bottom: 2px solid blue;
Почему 2px
внизу? Поскольку другие элементы имеют 1px
верхнюю границу, сумма будет быть 3px
, который будет равен верхней границе .bigBorders
.
Это все для выравнивания всех границ.
Теперь мы применяем margin-bottom: -3px;
к .bigBorders
, это повлияет только на элементы внизу, как будто мы уменьшаем высоту элемента над ними.
3px
равно ширине границы элемента выше, что приведет к перекрытию границ.
И да, маржинальный трюк будет влиять на контент, но пока значения невелики, все должно быть в порядке.
.hidden {
display: none;
}
div>div {
border-top: 1px solid;
padding: 5px;
}
div>div:last-child {
border-bottom: 1px solid;
}
.bigborders {
border-top: 3px solid;
border-bottom: 2px solid;
margin-bottom: -3px;
background: orange;
}
<div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders </div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
</div>
Или мы также можем упростить это так, если вы не заботитесь о равномерной ширине, но можете использовать :last-child
:first-child
нацелиться на первого и последнего ребенка и настроить их границы индивидуально.
.hidden {
display: none;
}
div>div {
border: 1px solid;
padding: 5px;
}
.bigborders {
border-top: 3px solid;
border-bottom: 4px solid;
margin-bottom: -3px;
background: orange;
}
<div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="bigborders">bigborders </div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
<div>placeholder</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div class="hidden">hidden</div>
<div>placeholder</div>
<div class="bigborders">bigborders </div>
<div class="bigborders">bigborders </div>
<div>placeholder</div>
</div>
Примечание: я использовал оболочку для обертывания элементов, потому что фрагмент кода добавляет скрытый div, который ломает селектор :last-child