Что такое «прокручивающиеся поля»?

В Модуль позиционированного макета CSS, уровень 3 (рабочий проект) в главе 6.2. Липкое позиционирование у нас есть это определение: (выделено мной)

A stickily positioned box is positioned similarly to a relatively positioned box, but the offset is computed with reference to the nearest ancestor with a scrolling box, or the viewport if no ancestor has a scrolling box.

Что это за поля прокрутки?

Далее в документе есть проблема с термином scrolling boxes

Issue 6 Sticky positioning should really be defined in terms of the nearest scrollable ancestor, but there is currently no such term defined elsewhere in CSS. CSSOM View refers to "scrolling boxes." CSS Overflow has yet to pull in the relevant text from CSS Box, and CSS Box has an old, confusing definition of "flow root" which is almost (but probably not quite) what we want here. This spec refers to "flow root," since that’s the closest thing currently specced somewhere, but this is not optimal.

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

Поле прокрутки, я бы предположил, что-то с overflow: auto (или связанным) и имеет содержимое, выходящее за его границы, поэтому вызывает полосы прокрутки.

alex 09.04.2019 13:46
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
1
684
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказал @alex, поле прокрутки — это поле, в котором для значения переполнения установлено значение, отличное от visible (значение по умолчанию). Я не могу подтвердить, но я пришел к этому выводу на основе этого предыдущий ответ, где переполнение создает некоторые проблемы с липким элементом.

Как я объяснил там, если у вас есть элемент с overflow:hidden в качестве предка position:sticky, этот элемент перестанет работать, потому что его смещение будет рассчитываться на основе этого поля (с overflow:hidden), потому что это ближайший предок с прокруткой. Поскольку мы использовали hidden, мы не можем прокручивать это поле, поэтому мы не можем видеть липкое поведение.

Вот простой пример:

.wrapper {
  height:200vh;
  border:2px solid;
}
.wrapper >div {
  position:sticky;
  top:0;
  height:20px;
  background:red;
}
<div class = "wrapper">
  <div></div>
</div>

В приведенном ниже примере область просмотра будет использоваться для ссылки, потому что у нас нет поля прокрутки. Теперь давайте добавим переполнение в оболочку:

.wrapper {
  height:200vh;
  border:2px solid;
  overflow:scroll;
}
.wrapper >div {
  position:sticky;
  top:0;
  height:20px;
  background:red;
}
<div class = "wrapper">
  <div></div>
</div>

Теперь наш липкий элемент будет рассматривать оболочку для ссылки, но, поскольку у нас нет переполнения, у нас не будет прокрутки, поэтому нет никакого способа вызвать липкое поведение. Также прокрутка области просмотра ничего не даст.

Если вы добавите переполнение, добавив еще один элемент внутри, мы можем вызвать липкое поведение:

.wrapper {
  height:200vh;
  border:2px solid;
  overflow:scroll;
  position:relative;
}
.wrapper >div {
  position:sticky;
  top:0;
  height:20px;
  background:red;
}

.wrapper > span {
  position:absolute;
  top:100%;
  height:50px;
  left:0;
  right:0;
  background:blue;
}
<div class = "wrapper">
  <div></div>
  <span></span>
</div>

Мы можем ясно видеть, как прокрутка обертки управляет липким элементом, а прокрутка области просмотра ничего не делает, поэтому мы можем сделать вывод, что наша обертка — это ближайший предок с прокруткой.


Учитывая последнюю проблему в спецификации, мы также можем прочитать, что:

Sticky positioning should really be defined in terms of the nearest scrollable ancestor, but there is currently no such term defined elsewhere in CSS. CSSOM View refers to "scrolling boxes."

Так что, вероятно, прокручиваемый предок совпадает с предок с прокруткой.

Я немного повозился с overflow родительского элемента sticky элемента и родительского элемента этого родителя. Вы можете видеть здесь: codepen.io/HerrSerker/pen/MRJamY, что только visible и другие значения (unset, initial), которые эффективно приводят к visible переполнению, приводят к предполагаемому поведению. Только если у прародителя есть overflow:scroll или autoа также, height ограничено, мы получаем липкое поведение против поля прокрутки прародителя.

yunzen 10.04.2019 11:21

Другие вопросы по теме