Абсолютна позиція + прокрутка


102

При наступному HTMLіCSS

.container {
  position: relative;
  border: solid 1px red;
  height: 256px;
  width: 256px;
  overflow: auto;
}
.full-height {
  position: absolute;
  top: 0;
  left: 0;
  right: 128px;
  bottom: 0;
  background: blue;
}
<div class="container">
  <div class="full-height">
  </div>
</div>

Внутрішня divзаймає повну головку контейнера за бажанням. Якщо я зараз додаю якийсь інший, потоковий вміст до контейнера, наприклад:

.container {
  position: relative;
  border: solid 1px red;
  height: 256px;
  width: 256px;
  overflow: auto;
}
.full-height {
  position: absolute;
  top: 0;
  left: 0;
  right: 128px;
  bottom: 0;
  background: blue;
}
<div class="container">
  <div class="full-height">
</div>

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur mollitia maxime facere quae cumque perferendis cum atque quia repellendus rerum eaque quod quibusdam incidunt blanditiis possimus temporibus reiciendis deserunt sequi eveniet necessitatibus
  maiores quas assumenda voluptate qui odio laboriosam totam repudiandae? Doloremque dignissimos voluptatibus eveniet rem quasi minus ex cumque esse culpa cupiditate cum architecto! Facilis deleniti unde suscipit minima obcaecati vero ea soluta odio cupiditate
  placeat vitae nesciunt quis alias dolorum nemo sint facere. Deleniti itaque incidunt eligendi qui nemo corporis ducimus beatae consequatur est iusto dolorum consequuntur vero debitis saepe voluptatem impedit sint ea numquam quia voluptate quidem.
</div>

Потім контейнер прокручується за бажанням, однак абсолютно розміщений елемент більше не закріплений на дні контейнера, а зупиняється на початковому дні, яке може бачити контейнер. Моє запитання; чи є спосіб, щоб абсолютно розміщений елемент був повною висотою прокрутки його контейнера без використання JS?


я можу запитати, чому у вас верх: 0; там також?
Patsy Issa

немає особливих причин, у мене є звичка над уточненням речей
Chris Meek

Якщо ви виймете top: 0;його, більше не працює.
Brewal

Без JS для числення innerHeight, це буде важко. На жаль, position:fixedвін не працює всередині контейнера, тому що він витікає, тому цей "спосіб вирішення" також не буде працювати :(
RaphaelDDL

Відповіді:


90

Потрібно загортати текст в divелемент і включати абсолютно розташований елемент всередині нього.

<div class="container">
    <div class="inner">
        <div class="full-height"></div>
        [Your text here]
    </div>
</div>

Css:

.inner: { position: relative; height: auto; }
.full-height: { height: 100%; }

Встановлення внутрішнього положення діва relativeдозволяє зробити абсолютно позиційні елементи всередині нього виходячи з них свого положення та висоти, а не на .containerдіві, який має фіксовану висоту. Без внутрішнього, відносно розташованого div, .full-heightдів завжди обчислює свої розміри та положення на основі .container.

http://jsfiddle.net/M5cTN/


Звичайно, це теж має певний сенс (у тому, що будь-який CSS має сенс;))
Chris Meek

7
fill-heightЕлемент явно скролінг з контентом, який не ОП хочу це якір? (Змінивши блакитний фон на фонове зображення, ви можете побачити, що я маю на увазі, коли я кажу, що це не прикріплено jsfiddle.net/M5cTN/82 )
paulvs

35

position: fixed;вирішить ваше питання. Як приклад, перегляньте мою реалізацію накладення області фіксованого повідомлення (заселеного програмно):

#mess {
    position: fixed;
    background-color: black;
    top: 20px;
    right: 50px;
    height: 10px;
    width: 600px;
    z-index: 1000;
}

І в HTML

<body>
    <div id="mess"></div>
    <div id="data">
        Much content goes here.
    </div>
</body>

Коли #dataсцена стає довше від сцени, вона #messзберігає своє положення на екрані, #dataпрокручуючи під нею.


67
Фіксоване позиціонування позиціонує елемент відносно браузера, що може бути не бажаним результатом.
Avand Amiri

якщо ви не вказуєте верхній, лівий, правий, нижній, фіксований елемент не буде розташований відносно вікна. Але це, звичайно, обмежене використання, лише для лівого верхнього положення за замовчуванням, інакше воно буде розташоване відносно вікна, воно також має ще один недолік, ширина: 100% або висота: 100% буде такою ж, як і розміри вікна
Herbi Shtini

1
transform: translate3d(0,0,0);на батьківщині викличе position: fixedстати відносно батьківського. Джерело coderwall.com/p/2wzj-a/…
lkraav

9

Тож гайоур має рацію, але якщо ви шукаєте предмет на повну висоту, який не прокручується вмістом, а насправді є висотою контейнера, ось це виправлення. Майте батьків з висотою, яка викликає переповнення, контейнер із вмістом, який має 100% висоту і overflow: scroll, а також побратими можуть бути розміщені відповідно до розміру батьків, а не розміру елемента прокрутки. Ось скрипка: http://jsfiddle.net/M5cTN/196/

і відповідний код:

html:

<div class="container">
  <div class="inner">
    Lorem ipsum ...
  </div>
  <div class="full-height"></div>
</div>

css:

.container{
  height: 256px;
  position: relative;
}
.inner{
  height: 100%;
  overflow: scroll;
}
.full-height{
  position: absolute;
  left: 0;
  width: 20%;
  top: 0;
  height: 100%;
}

На жаль, якщо блакитний div розташований праворуч від контейнера, він приховує свою смугу прокрутки.
Папіллон

0

Я зіткнувся з цією ситуацією, і створити додаткову діву було недоцільно. Я закінчила лише встановлення full-heightдіваheight: 10000%; overflow: hidden;

Очевидно, що не найчистіше рішення, але воно працює дуже швидко.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.