Spec-Zone.ru › CSS

Обработка переполнения в многоколоночной компоновке

В этом руководстве мы рассмотрим, как обрабатывать переполнение в многоколоночной (multicol) компоновке, как внутри колонок, так и в ситуациях, когда содержимого больше, чем может поместиться в контейнер.

Переполнение внутри колонок

Ситуация переполнения возникает, когда размер элемента больше, чем размер колонки. Например, такая ситуация может возникнуть, когда изображение в колонке шире значения column-width или ширины колонки, определяемой числом колонок, указанным с помощью column-count.

В этой ситуации содержимое должно визуально перетекать в следующую колонку, а не обрезаться рамками колонки.

<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi tomatillo melon azuki bean garlic.
  </p>
  <img
    alt="A close-up of two hot air balloons being inflated."
    src="https://mdn.github.io/shared-assets/images/examples/balloons3.jpg" />
  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
    Dandelion cucumber earthnut pea peanut soko zucchini.
  </p>
  <p>
    Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
    kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter
    purslane kale. Celery potato scallion desert raisin horseradish spinach
    carrot soko.
  </p>
</div>
body {
  font: 1.2em / 1.5 sans-serif;
}

.container {
  column-width: 250px;
}

Здесь две колонки текста. В левой колонке есть фото, которое шире колонки. Изображение перетекает во вторую колонку, появляясь за текстом правой колонки. Поток текста в правой колонке не затрагивается выступающим фото, но визуальное восприятие изменяется.

Если вы хотите, чтобы изображение соответствовало рамкам колонки, установка max-width: 100% предотвратит рост изображения за пределы контейнера — в данном случае, за пределы колонки.

body {
  font: 1.2em / 1.5 sans-serif;
}

.container {
  column-width: 250px;
}
img {
  max-width: 100%;
}

Больше колонок, чем помещается

Обработка переполнения колонок зависит от того, является ли среда фрагментированной, например, печатной, или непрерывной, например, веб-страницы.

В фрагментированной среде после заполнения фрагмента (например, страницы) колонками, колонки переместятся на новую страницу и заполнят её колонками. В непрерывной среде колонки переполняются в направлении строки. В веб-среде это означает, что вы получите горизонтальную полосу прокрутки.

В примере ниже показано такое поведение переполнения. Контейнер multicol имеет установленную height, и текста больше, чем места для создания колонок; в результате, мы получаем колонки, созданные за пределами контейнера.

<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi tomatillo melon azuki bean garlic.
  </p>
  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
    Dandelion cucumber earthnut pea peanut soko zucchini.
  </p>
  <p>
    Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
    kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter
    purslane kale. Celery potato scallion desert raisin horseradish spinach
    carrot soko.
  </p>
</div>
body {
  font: 1.2em / 1.5 sans-serif;
}

.container {
  column-width: 200px;
  height: 180px;
  border: 2px dashed;
}

Использование вертикальных медиа-запросов

Одна из проблем с multicol в веб-среде заключается в том, что если колонки выше области просмотра, пользователю придётся прокручивать страницу вверх и вниз для чтения, что не является хорошим пользовательским опытом. Один из способов избежать этого — применять свойства колонок только в том случае, если известно, что есть достаточно вертикального пространства.

В примере ниже мы использовали min-height @media query, чтобы убедиться, что есть достаточно вертикального пространства перед применением свойств колонок.

body {
  font: 1.2em / 1.5 sans-serif;
}

@media (min-height: 300px) {
  .container {
    column-width: 200px;
  }
}

Следующие шаги

В заключительном руководстве этого цикла мы рассмотрим как работает фрагментация в многоколоночных макетах, чтобы получить контроль над тем, как содержимое разбивается между колонками.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_multicol_layout/Handling_overflow_in_multicol_layout

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API