#html #css
Вопрос:
Я создаю целый сайт с общим макетом, где слева есть липкий div (меню в стороне). Этот div должен быть липким, чтобы он не переопределял нижний колонтитул внизу, но его свойство не работает.
Поэтому я искал везде, чтобы найти решение: переполнение, сверху-снизу-слева-справа. Я искал overflow
их в любом из родителей меню «В стороне» также со сценарием, но не нашел ни одного.
<div class="row">
<aside id="menu">
<div class="sticky" id="sticky">
<h2>Variabili</h2>
<a href="variables.html#variables">Tipi di variabili</a>
<a href="variables.html#var_scopes">Variabili locali e globali</a>
<h2>Funzioni</h2>
<a href="functions.html">Funzioni</a>
<h2>Classi</h2>
<a href="classes.html">Classi</a>
</div>
</aside>
<article>
<div id="variables" class="content">
</div>
<div id="var_scopes" class="content">
</div>
</article>
</div>
<footer>
</footer>
div.row {
display: flex;
padding-top: 3em;
}
aside#menu {
display: block;
flex: initial;
width: 250px;
min-width: 150px;
margin: 0;
font-size: 1rem;
height: 100%;
padding: 1rem;
position: relative;
float: left;
}
article {
flex: 1;
}
aside#menu div.sticky {
position: sticky;
position: -webkit-sticky;
top: 0;
}
Ответ №1:
У вас есть пара проблем:
- Вы устанавливаете
height: 100%
на#menu
элемент. Поскольку вы не задаете высотуrow
, элемент не имеет никакого отношения к тому, что означает 100%. Таким образом, это делает#menu
элемент высотой его содержимого, а не контейнером. Это главная причина, по которой вы не видитеsticky
работу. - Это не влияет на элемент, но вы можете удалить
float: left
иdisplay: block
на#menu
элементе. Они ничего не сделают, так как это дочерний элемент flex, и по умолчаниюaside
элемент является элементом блока. - Вы должны использовать
flex
свойство для определенияgrow shrink and basis
свойств для вашего#menu
иarticle
.
div.row {
display: flex;
padding-top: 3em;
}
#menu {
flex: 1 1 250px;
min-width: 150px;
margin: 0;
font-size: 1rem;
padding: 1rem;
position: relative;
}
article {
flex: 1 1 auto;
}
#menu div.sticky {
position: sticky;
top: 0;
}
footer {
height: 50px;
background: yellow;
}
<div class="row">
<aside id="menu">
<div class="sticky" id="sticky">
<h2>Variabili</h2>
<a href="variables.html#variables">Tipi di variabili</a>
<a href="variables.html#var_scopes">Variabili locali e globali</a>
<h2>Funzioni</h2>
<a href="functions.html">Funzioni</a>
<h2>Classi</h2>
<a href="classes.html">Classi</a>
</div>
</aside>
<article>
<div id="variables" class="content">
<p>Pharetra eros mi eros accumsan dui. Pellentesque ipsum iaculis. Mi neque in nonummy venenatis vestibulum. Class egestas adipiscing nisl tellus quam ut in amet. Nostra nunc leo lorem eget ipsum elit eget metus nam sed pede. Nam nibh risus sit dui
nullam. Consequat luctus tempus.</p>
<p>Pede tellus eu mattis morbi donec. Natoque class leo. Ac lacus vestibulum ac odio ac. Risus lorem mauris. Proin enim tortor at erat dui. Aliquam magna condimentum. Orci donec morbi. Id justo at malesuada erat nulla urna quam eu nec elit commodo
mi voluptatum gravida ante bibendum justo. Eleifend nec eget. Id massa quis eu vitae elit. Bibendum interdum semper. Donec libero duis. Phasellus malesuada adipiscing qui et eu. Justo egestas erat auctor sagittis sed nonummy amet dolor et in id.
Ut blandit justo. Donec fringilla cursus enim velit ullamcorper.</p>
<p>Pharetra eros mi eros accumsan dui. Pellentesque ipsum iaculis. Mi neque in nonummy venenatis vestibulum. Class egestas adipiscing nisl tellus quam ut in amet. Nostra nunc leo lorem eget ipsum elit eget metus nam sed pede. Nam nibh risus sit dui
nullam. Consequat luctus tempus.</p>
<p>Pede tellus eu mattis morbi donec. Natoque class leo. Ac lacus vestibulum ac odio ac. Risus lorem mauris. Proin enim tortor at erat dui. Aliquam magna condimentum. Orci donec morbi. Id justo at malesuada erat nulla urna quam eu nec elit commodo
mi voluptatum gravida ante bibendum justo. Eleifend nec eget. Id massa quis eu vitae elit. Bibendum interdum semper. Donec libero duis. Phasellus malesuada adipiscing qui et eu. Justo egestas erat auctor sagittis sed nonummy amet dolor et in id.
Ut blandit justo. Donec fringilla cursus enim velit ullamcorper.</p>
<p>Pharetra eros mi eros accumsan dui. Pellentesque ipsum iaculis. Mi neque in nonummy venenatis vestibulum. Class egestas adipiscing nisl tellus quam ut in amet. Nostra nunc leo lorem eget ipsum elit eget metus nam sed pede. Nam nibh risus sit dui
nullam. Consequat luctus tempus.</p>
<p>Pede tellus eu mattis morbi donec. Natoque class leo. Ac lacus vestibulum ac odio ac. Risus lorem mauris. Proin enim tortor at erat dui. Aliquam magna condimentum. Orci donec morbi. Id justo at malesuada erat nulla urna quam eu nec elit commodo
mi voluptatum gravida ante bibendum justo. Eleifend nec eget. Id massa quis eu vitae elit. Bibendum interdum semper. Donec libero duis. Phasellus malesuada adipiscing qui et eu. Justo egestas erat auctor sagittis sed nonummy amet dolor et in id.
Ut blandit justo. Donec fringilla cursus enim velit ullamcorper.</p>
</div>
<div id="var_scopes" class="content">
</div>
</article>
</div>
<footer>
</footer>
Комментарии:
1. большое вам спасибо, вы решили эту проблему! Я запомню пункты, которые вы мне предложили :3 но где я могу узнать больше ?
flex: grow shrink and basis
Я никогда ничего не видел об этих атрибутах :/2. @Seintian
flex: value value value
-это короткая рукаflex-grow
,flex-shrink
иflex-basis
в таком порядке. Отличный ресурс: css-tricks.com/snippets/css/a-guide-to-flexbox