Я нашел 4 решения с немного отличающимся поведением и подходами.
Первое решение
сделайте ваш nav
контейнер (body
в вашем случае) position: relative
, это будет иметь смысл nav
position: absolute
, и теперь вы можете выбрать nav's
height: 100%
или bottom: 0
.
Недостаток - прокрутка меню с элементами .
body {
font-family: sans-serif;
margin: 0;
position: relative;
}
.container {
width: 300px;
margin: 0 auto;
border: 1px dashed grey;
padding: 10px;
}
ul.items {
list-style: none;
margin: 0;
border: 1px dotted orange;
padding: 10px;
}
ul.items li {
margin: 10px;
padding: 10px;
border: 1px solid darkturquoise;
}
nav.menu {
background-color: deeppink;
padding: 10px;
position: absolute;
width: 80px;
top: 0;
bottom: 0;
}
nav.menu ul {
list-style: none;
padding-left: 0;
}
nav.menu ul {
margin: 0;
}
<div class="container">
<ul class="items">
<li>item-1</li>
<li>item-2</li>
<li>item-3</li>
<li>item-4</li>
<li>item-5</li>
<li>item-6</li>
<li>item-7</li>
<li>item-8</li>
<li>item-9</li>
<li>item-10</li>
<li>item-11</li>
<li>item-12</li>
<li>item-13</li>
<li>item-14</li>
<li>item-15</li>
<li>item-16</li>
<li>item-17</li>
<li>item-18</li>
<li>item-19</li>
<li>item-20</li>
<li>item-21</li>
<li>item-22</li>
<li>item-23</li>
<li>item-24</li>
<li>item-25</li>
<li>item-26</li>
<li>item-27</li>
<li>item-28</li>
<li>item-29</li>
<li>item-30</li>
<li>item-31</li>
<li>item-32</li>
<li>item-33</li>
<li>item-34</li>
<li>item-35</li>
<li>item-36</li>
<li>item-37</li>
<li>item-38</li>
<li>item-39</li>
<li>item-40</li>
<li>item-41</li>
<li>item-42</li>
<li>item-43</li>
<li>item-44</li>
<li>item-45</li>
<li>item-46</li>
<li>item-47</li>
<li>item-48</li>
<li>item-49</li>
<li>item-50</li>
</ul>
</div>
<nav class="menu">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
</ul>
</nav>
Второй раствор
make nav
position: fixed
и bottom: 0
или height: 100%
или height: 100vh
.
В этом случае меню всегда отображается при прокрутке элементов.
body {
font-family: sans-serif;
margin: 0;
}
.container {
width: 300px;
margin: 0 auto;
border: 1px dashed grey;
padding: 10px;
}
ul.items {
list-style: none;
margin: 0;
border: 1px dotted orange;
padding: 10px;
}
ul.items li {
margin: 10px;
padding: 10px;
border: 1px solid darkturquoise;
}
nav.menu {
background-color: deeppink;
padding: 10px;
position: fixed;
width: 80px;
top: 0;
bottom: 0;
}
nav.menu ul {
list-style: none;
padding-left: 0;
}
nav.menu ul {
margin: 0;
}
<div class="container">
<ul class="items">
<li>item-1</li>
<li>item-2</li>
<li>item-3</li>
<li>item-4</li>
<li>item-5</li>
<li>item-6</li>
<li>item-7</li>
<li>item-8</li>
<li>item-9</li>
<li>item-10</li>
<li>item-11</li>
<li>item-12</li>
<li>item-13</li>
<li>item-14</li>
<li>item-15</li>
<li>item-16</li>
<li>item-17</li>
<li>item-18</li>
<li>item-19</li>
<li>item-20</li>
<li>item-21</li>
<li>item-22</li>
<li>item-23</li>
<li>item-24</li>
<li>item-25</li>
<li>item-26</li>
<li>item-27</li>
<li>item-28</li>
<li>item-29</li>
<li>item-30</li>
<li>item-31</li>
<li>item-32</li>
<li>item-33</li>
<li>item-34</li>
<li>item-35</li>
<li>item-36</li>
<li>item-37</li>
<li>item-38</li>
<li>item-39</li>
<li>item-40</li>
<li>item-41</li>
<li>item-42</li>
<li>item-43</li>
<li>item-44</li>
<li>item-45</li>
<li>item-46</li>
<li>item-47</li>
<li>item-48</li>
<li>item-49</li>
<li>item-50</li>
</ul>
</div>
<nav class="menu">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
</ul>
</nav>
Третье решение
Вы можете изменить структуру.
Сделать несколько wrapper
из menu
и container
. Переместите menu
выше container
. Сделайте wrapper
display: flex
. Вы можете удалить position: absolute
и top: 0
из menu
.
Как и в первом решении - menu
свитки с элементами.
body {
font-family: sans-serif;
margin: 0;
}
.container {
width: 300px;
margin: 0 auto;
border: 1px dashed grey;
padding: 10px;
}
ul.items {
list-style: none;
margin: 0;
border: 1px dotted orange;
padding: 10px;
}
ul.items li {
margin: 10px;
padding: 10px;
border: 1px solid darkturquoise;
}
nav.menu {
background-color: deeppink;
padding: 10px;
width: 80px;
}
nav.menu ul {
list-style: none;
padding-left: 0;
}
nav.menu ul {
margin: 0;
}
.wrapper {
display: flex;
}
<div class="wrapper">
<nav class="menu">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
</ul>
</nav>
<div class="container">
<ul class="items">
<li>item-1</li>
<li>item-2</li>
<li>item-3</li>
<li>item-4</li>
<li>item-5</li>
<li>item-6</li>
<li>item-7</li>
<li>item-8</li>
<li>item-9</li>
<li>item-10</li>
<li>item-11</li>
<li>item-12</li>
<li>item-13</li>
<li>item-14</li>
<li>item-15</li>
<li>item-16</li>
<li>item-17</li>
<li>item-18</li>
<li>item-19</li>
<li>item-20</li>
<li>item-21</li>
<li>item-22</li>
<li>item-23</li>
<li>item-24</li>
<li>item-25</li>
<li>item-26</li>
<li>item-27</li>
<li>item-28</li>
<li>item-29</li>
<li>item-30</li>
<li>item-31</li>
<li>item-32</li>
<li>item-33</li>
<li>item-34</li>
<li>item-35</li>
<li>item-36</li>
<li>item-37</li>
<li>item-38</li>
<li>item-39</li>
<li>item-40</li>
<li>item-41</li>
<li>item-42</li>
<li>item-43</li>
<li>item-44</li>
<li>item-45</li>
<li>item-46</li>
<li>item-47</li>
<li>item-48</li>
<li>item-49</li>
<li>item-50</li>
</ul>
</div>
</div>
Четвертое решение
структура, как в третьем решении.
Но мы делаем menu
с position: sticky
, top: 0
и height: calc(100vh - 10px * 2);
(верхнее и нижнее значение отступа 10px, если не вычитать, прокрутки меню немного внизу прокрутки пунктов)
Меню всегда видно.
body {
font-family: sans-serif;
margin: 0;
}
.container {
width: 300px;
margin: 0 auto;
border: 1px dashed grey;
padding: 10px;
}
ul.items {
list-style: none;
margin: 0;
border: 1px dotted orange;
padding: 10px;
}
ul.items li {
margin: 10px;
padding: 10px;
border: 1px solid darkturquoise;
}
nav.menu {
background-color: deeppink;
padding: 10px;
width: 80px;
position: -webkit-sticky; /* Safari */
position: sticky;
top: 0;
height: calc(100vh - 10px * 2); /*top + bottom padding value*/
}
nav.menu ul {
list-style: none;
padding-left: 0;
}
nav.menu ul {
margin: 0;
}
.wrapper {
display: flex;
}
<div class="wrapper">
<nav class="menu">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
</ul>
</nav>
<div class="container">
<ul class="items">
<li>item-1</li>
<li>item-2</li>
<li>item-3</li>
<li>item-4</li>
<li>item-5</li>
<li>item-6</li>
<li>item-7</li>
<li>item-8</li>
<li>item-9</li>
<li>item-10</li>
<li>item-11</li>
<li>item-12</li>
<li>item-13</li>
<li>item-14</li>
<li>item-15</li>
<li>item-16</li>
<li>item-17</li>
<li>item-18</li>
<li>item-19</li>
<li>item-20</li>
<li>item-21</li>
<li>item-22</li>
<li>item-23</li>
<li>item-24</li>
<li>item-25</li>
<li>item-26</li>
<li>item-27</li>
<li>item-28</li>
<li>item-29</li>
<li>item-30</li>
<li>item-31</li>
<li>item-32</li>
<li>item-33</li>
<li>item-34</li>
<li>item-35</li>
<li>item-36</li>
<li>item-37</li>
<li>item-38</li>
<li>item-39</li>
<li>item-40</li>
<li>item-41</li>
<li>item-42</li>
<li>item-43</li>
<li>item-44</li>
<li>item-45</li>
<li>item-46</li>
<li>item-47</li>
<li>item-48</li>
<li>item-49</li>
<li>item-50</li>
</ul>
</div>
</div>