#html #css
#HTML #css
Вопрос:
При добавлении overflow:auto
к моим «Пунктам меню» с вертикальным центром и уменьшении высоты экрана верхние «Пункты меню» прокручиваются не до самого верха. Смотрите скрипку и изображение ниже.
Есть идеи, как заставить элемент правильно прокручиваться по вертикали, оставаясь при этом вертикально центрированным. Предпочтительно, только в CSS, если это возможно.
.menu {
background: red;
height: 100%;
width: 50%;
position: fixed;
overflow: auto;
}
.menu-items {
display: flex;
align-items: center;
height: 100%;
}
li {
font-size: 30px;
}
.first-item {
background: blue;
}
<div class="menu">
<div class="menu-items">
<ul>
<li class="first-item">Menu Item 1</li>
<li>Menu Item 2</li>
<li>Menu Item 3</li>
<li>Menu Item 4</li>
<li>Menu Item 5</li>
<li>Menu Item 6</li>
<li>Menu Item 7</li>
<li>Menu Item 8</li>
<li>Menu Item 9</li>
<li>Menu Item 10</li>
</ul>
</div>
</div>
Ответ №1:
Ваши элементы .menu должны иметь min-height
не height
.menu {
background: red;
height: 100%;
width: 50%;
position: fixed;
overflow: auto;
}
.menu-items {
display: flex;
align-items: center;
min-height: 100%;
}
li {
font-size: 30px;
}
.first-item {
background: blue;
}
<div class="menu">
<div class="menu-items">
<ul>
<li class="first-item">Menu Item 1</li>
<li>Menu Item 2</li>
<li>Menu Item 3</li>
<li>Menu Item 4</li>
<li>Menu Item 5</li>
<li>Menu Item 6</li>
<li>Menu Item 7</li>
<li>Menu Item 8</li>
<li>Menu Item 9</li>
<li>Menu Item 10</li>
</ul>
</div>
</div>
Комментарии:
1. Вау! Отличная работа! Это работает отлично. Большое спасибо!
Ответ №2:
Удаление позиции: исправлено; решает проблему
Комментарии:
1. Положение элемента должно быть фиксированным.
Ответ №3:
Я думаю, то, к чему вы стремились, означает это изменение:
Измените правило CSS для .menu-items
на это:
.menu-items {
display: flex;
flex-direction: column;
height: 100%;
}
Комментарии:
1. Нет, я хочу, чтобы пункты меню были центрированы по вертикали, а не по горизонтали. Проблема в том, что когда я центрирую элементы по вертикали и уменьшаю высоту, мои пункты меню начинают обрезаться в поле прокрутки (см. изображение выше).
2. Не беспокойтесь. По-прежнему не выровнены по вертикали при настройке высоты.
Ответ №4:
Хорошо, я проверил ваш код, но, похоже, все в порядке. Я думаю, что это проблема с разрешением (компилятор jsFiddle имеет разрешение всего половины страницы, а компилятор фрагментов stack overflow — всего 1/20 страницы). Здесь я переработал ваш код, добавив элемент br. Попробуйте запустить приведенный ниже код в полноэкранном режиме.
<div class="menu">
<div class="menu-items">
<br>
<ul>
<li class="first-item">Menu Item 1</li>
<li>Menu Item 2</li>
<li>Menu Item 3</li>
<li>Menu Item 4</li>
<li>Menu Item 5</li>
<li>Menu Item 6</li>
<li>Menu Item 7</li>
<li>Menu Item 8</li>
<li>Menu Item 9</li>
<li>Menu Item 10</li>
</ul>
</div>
</div>
<!doctype html>
<html>
<head>
<style>
.menu {
background: red;
height: 100%;
width: 50%;
position: fixed;
overflow: auto;
}
.menu-items {
display: flex;
align-items: center;
height: 100%;
}
li {
font-size: 30px;
}
.first-item {
background: blue;
}
<div class="menu"><div class="menu-items"><ul><li class="first-item">Menu Item 1</li><li>Menu Item 2</li><li>Menu Item 3</li><li>Menu Item 4</li><li>Menu Item 5</li><li>Menu Item 6</li><li>Menu Item 7</li><li>Menu Item 8</li><li>Menu Item 9</li><li>Menu Item 10</li></ul></div></div>
</style>
</head>
<body>
<div class="menu">
<div class="menu-items">
<ul>
<li class="first-item">Menu Item 1</li>
<li>Menu Item 2</li>
<li>Menu Item 3</li>
<li>Menu Item 4</li>
<li>Menu Item 5</li>
<li>Menu Item 6</li>
<li>Menu Item 7</li>
<li>Menu Item 8</li>
<li>Menu Item 9</li>
<li>Menu Item 10</li>
</ul>
</div>
</div>
</body>
</html>
Если у вас это не работает, пожалуйста, ответьте мне в комментариях, потому что ваше объяснение непонятно…
Комментарии:
1. Добавление тега <br> без изменений.
2. Я не совсем понимаю ваше объяснение того, чего вы хотите.