Подтвердить что ты не робот

Элемент позиции CSS "фиксированный" внутри прокручивающегося контейнера

Интересно, нашел ли кто-нибудь решение для этого?

Я ищу решение для прикрепления элемента к вершине прокручиваемого контейнера

HTML:

<div class="container">
  <div class="header">title</div>
  <div class="element">......</div>
  ... (about 10-20 elements) ...
  <div class="element">......</div> 
</div>

все "элементы" имеют position:relative,

контейнер имеет следующий CSS:

.container {
  position:relative;
  width:200px;
  height:400px;
  overflow-y:scroll;
}

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

CSS пока:

.header {
  position:absolute; /* scrolling out of view :-( */
  z-index:2;
  background-color:#fff;
}
.element{
  position: relative;
}

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

4b9b3361

Ответ 1

Я думаю, ваше решение пройдет с помощью position:sticky. Кажется, он похож на position:fixed, но уважает относительное положение его родителя.

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

Чистое решение css, которое приходит мне в голову, с небольшим изменением разметки. Вы можете установить контейнер только для "элементов" следующим образом:

<div class="cont_elements">
      <div class="element">......</div>
      .....
</div>

И дайте переполнение этому внутреннему контейнеру. Теперь ваш заголовок находится сверху.

Вот рабочая демонстрация.

Ответ 2

jQuery UI добавил position() метод утилиты только для этой цели, который облегчил бы вашу жизнь.

$( "#someElement" ).position({
    of:  //Element to position against,
    my:  //which position on the element being positioned,
    at:  //which position on the target element eg: horizontal/vertical,
    offset:  // left-top values to the calculated position, eg. "50 50"
});

Определенно помог мне.

Ответ 3

Решением в этом случае было бы вывести заголовок вне элемента прокрутки:

<div class="header">title</div>
<div class="container">
    <div class="element">......</div>
    <div class="element">......</div>
</div>

Хотя вы, вероятно, должны иметь лучшие семантические элементы, если это возможно (просто гадать здесь):

<h3>title</h3>
<ul>
    <li>......</li>
    <li>......</li>
</ul>