Прокрутка элемента переполнявшего ее содержание
здесь код Я использую для достижения вышеуказанного макета:
.header {
height: 50px;
}
.body {
position: absolute;
top: 50px;
right: 0;
bottom: 0;
left: 0;
display: flex;
}
.sidebar {
width: 140px;
}
.main {
flex: 1;
display: flex;
flex-direction: column;
}
.content {
flex: 1;
display: flex;
}
.column {
padding: 20px;
border-right: 1px solid #999;
}
<div class="header">Main header</div>
<div class="body">
<div class="sidebar">Sidebar</div>
<div class="main">
<div class="page-header">Page Header. Content columns are below.</div>
<div class="content">
<div class="column">Column 1</div>
<div class="column">Column 1</div>
<div class="column">Column 1</div>
</div>
</div>
</div>
Я опустил код, используемый для укладки. Вы можете увидеть все это в перо.
выше работает, но когда content
содержимое области переполняется, это делает всю страницу прокрутки. Я только хочу, чтобы сама область содержимого прокручивалась, поэтому добавил overflow: auto
до content
div.
проблема с этим сейчас заключается в том, что сами столбцы не выходят за пределы высоты своих родителей, поэтому границы там тоже обрезаются.
вот ручка, показывающая проблему прокрутки.
как я могу установить content
область для прокрутки независимо, при этом ее дочерние элементы выходят за пределы окна?
5 ответов:
Я говорил с Tab Atkins (автор спецификации flexbox) об этом, и вот что мы придумали:
HTML:
<div class="content"> <div class="box"> <div class="column">Column 1</div> <div class="column">Column 1</div> <div class="column">Column 1</div> </div> </div>
CSS:
.content { flex: 1; display: flex; overflow: auto; } .box { min-height: min-content; /* needs vendor prefixes */ display: flex; }
здесь представлены ручки:
причина, по которой это работает, потому что
align-items: stretch
не сократите его элементы, если они имеют внутреннюю высоту, что достигается здесь с помощьюmin-content
.
Я просто решил эту проблему очень элегантно после многих проб и ошибок.
проверьте мой пост в блоге: http://geon.github.io/programming/2016/02/24/flexbox-full-page-web-app-layout
в принципе, чтобы сделать ячейку flexbox прокручиваемой, вы должны сделать все ее родителям
overflow: hidden;
, или он просто проигнорирует ваши настройки переполнения и сделает Родительский размер больше.
немного поздно, но это может помочь: http://webdesign.tutsplus.com/tutorials/how-to-make-responsive-scrollable-panels-with-flexbox--cms-23269
в основном вам нужно поставить
html
,body
доheight: 100%;
и оберните все свое содержимое в<div class="wrap"> <!-- content --> </div>
CSS:
html, body { height: 100%; } .wrap { height: 100vh; display: flex; }
работал для меня. Надеюсь, это поможет
добавить это:
align-items: flex-start;
правила .содержание.}{ Это исправляет его в вашей ручке для меня, по крайней мере (как в Firefox, так и в Chrome).
по умолчанию .контент имеет "align-items: stretch", что делает его размер всех его детей автоматической высоты, чтобы соответствовать его собственной высоте, за http://dev.w3.org/csswg/css-flexbox/#algo-stretch. напротив, значение "flex-start" позволяет детям вычислить свои собственные высоты и выровнять себя на его начальном краю (и переполнение и запуск полосы прокрутки).