Каким образом можно добавить вертикальные линии между блоками в адаптивной вёрстке?

Мне необходимо создать макет в газетном стиле, где блоки анонсов будут разделены вертикальными линиями, учитывая адаптивную вёрстку. При изменении размеров экрана с использованием flexbox или grid (или JavaScript) важно, чтобы рамки не появлялись по бокам, а были только между блоками. <br/> <br/> Правильные варианты: <b>article | article | article | article</b> <br/> <b>article | article | article</b> <br/> <b>article | article</b> <br/> <b>article</b> <br/> <br/> Неправильные варианты: <b>| article | article | article | article</b> <br/> <b>| article | article | article</b> <br/> <b>| article | article</b> <br/> <b>| article</b> <br/> <br/> Спасибо.
  • 11 января 2025 г. 20:03
Ответы на вопрос 2
Для создания макета в газетном стиле с вертикальными разделительными линиями между блоками с использованием CSS Flexbox или Grid можно использовать несколько подходов. Ниже приведены примеры реализации с помощью обоих методов, чтобы избежать появления рамок по бокам и обеспечить адаптивный дизайн.

### Пример с использованием Flexbox

```html
<div class="container">
    <article class="box">Article 1</article>
    <article class="box">Article 2</article>
    <article class="box">Article 3</article>
    <article class="box">Article 4</article>
</div>
```

```css
.container {
    display: flex;
    flex-wrap: wrap;
    margin: -10px; /* Отрицательные маргины для удаления лишнего отступа */
}

.box {
    background: #f0f0f0;
    padding: 20px;
    margin: 10px;
    /* Минимальная ширина, чтобы блоки не сжимались слишком сильно */
    min-width: 200px; 
    position: relative;
}

.box:not(:last-child)::after {
    content: '';
    position: absolute;
    top: 0;
    right: -10px; /* Отступ от края блока */
    width: 1px; /* Ширина линии */
    height: 100%; /* Высота линии */
    background: black; /* Цвет линии */
}
```

### Пример с использованием CSS Grid

```html
<div class="grid-container">
    <article class="grid-item">Article 1</article>
    <article class="grid-item">Article 2</article>
    <article class="grid-item">Article 3</article>
    <article class="grid-item">Article 4</article>
</div>
```

```css
.grid-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); /* Адаптивное количество колонок */
    gap: 20px; /* Промежутки между элементами */
}

.grid-item {
    background: #f0f0f0;
    padding: 20px;
    position: relative;
}

.grid-item:not(:last-child)::after {
    content: '';
    position: absolute;
    top: 0;
    right: -10px; /* Отступ от края блока */
    width: 1px; /* Ширина линии */
    height: 100%; /* Высота линии */
    background: black; /* Цвет линии */
}
```

### Комментарии к кодам:

1. В обоих примерах для создания вертикальных линий используется псевдоэлемент `::after`.
2. Условие `:not(:last-child)` позволяет добавлять линии только между блоками, избегая появления линий возле последнего элемента.
3. Убедитесь, что можно управлять шириной блоков с помощью `min-width`, чтобы элементы адаптивно размещались на экране.
4. Свойство `gap` в Grid позволяет установить расстояние между элементами, что делает код более чистым и понятным. В Flexbox аналогичную задачу решаем с помощью отступов и отрицательных маргинов.

Эти методы могут быть адаптированы по мере необходимости для улучшения адаптивности и внешнего вида вашего макета.
вот один из способов, подойдет если background сплошным цветом  https://codepen.io/nexxer/pen/xbKWWqo
Похожие вопросы