Вопрос или проблема
Я пытаюсь выровнять div по вертикали, используя старинный прием
top: 50%;
transform: translateY(-50%);
но это не работает так, как я ожидаю. Я задаюсь вопросом, в чем может быть проблема.
Я попробовал добавить display: flex к телу и align-content: center;, но это только перепутало все. Поэтому я попробовал вышеприведенный способ, но он просто располагает div на половине экрана, без влияния top: 50%;.
Вот код:
body {
margin: 0;
padding: 0;
overflow: hidden;
}
#mittrek {
width: 80%;
max-width: 200px;
height: 400px;
border-radius: 20px;
z-index: 10;
background-color: rgba(0, 0, 0, 0.5);
position: relative;
margin-left: auto;
margin-right: auto;
top: 50%;
transform: translateY(-50%);
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(10px);
background-repeat: no-repeat;
display: flex;
align-content: center;
justify-content: center;
}
#mittrek::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 4px;
border-radius: 20px;
mask-composite: exclude;
z-index: 4;
overflow: hidden;
box-shadow: 0px 0px 40px 15px black;
}
<!DOCTYPE html>
<html>
<body>
<div id="mittrek"></div>
</body>
</html>
Вы установили неверное значение свойства position для mittrek. Вот обновленный код.
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
}
#mittrek {
width: 80%;
max-width: 200px;
height: 400px;
border-radius: 20px;
z-index: 10;
background-color: rgba(0, 0, 0, 0.5);
position: absolute; // Изменено с relative на absolute
margin-left: auto;
margin-right: auto;
top: 50%;
left: 50%; // Добавлено left
transform: translate(-50%, -50%); // Изменено translateY на translate
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(10px);
background-repeat: no-repeat;
display: flex;
align-content: center;
justify-content: center;
}
#mittrek::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 4px;
border-radius: 20px;
mask-composite: exclude;
z-index: 4;
overflow: hidden;
box-shadow: 0px 0px 40px 15px black;
}
</style>
</head>
<body>
<div id="mittrek"></div>
</body>
</html>
Ответ или решение
Чтобы решить вашу проблему с вертикальным выравниванием элемента div с использованием старой техники top: 50%;
и transform: translateY(-50%);
, необходимо учесть несколько важных моментов относительно CSS-свойства position
. Давайте разберем шаги для достижения правильного результата.
Проблема
Вы использовали свойство position: relative;
для div с id mittrek
, что в данной ситуации не позволяет элементу корректно позиционироваться от верхней границы экрана. В итоге элемент располагается на 50% от родительского элемента, который не занимает всю высоту экрана. Это объясняет, почему ваше выравнивание "в центре" не работает, как ожидалось.
Решение
- Измените позицию элемента с
position: relative;
наposition: absolute;
. - Чтобы центровать элемент по горизонтали и вертикали, используйте
left: 50%;
вместе сtransform: translate(-50%, -50%);
. Таким образом, вы будете перемещать его к центру по обоим осям.
Вот обновленный код с исправлениями:
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
height: 100vh; /* Устанавливаем высоту для body, чтобы parent элемент занимал всю высоту окна */
}
#mittrek {
width: 80%;
max-width: 200px;
height: 400px;
border-radius: 20px;
z-index: 10;
background-color: rgba(0, 0, 0, 0.5);
position: absolute; /* Изменили на absolute */
top: 50%;
left: 50%; /* Добавили left */
transform: translate(-50%, -50%); /* Изменили на translate для центрирования */
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(10px);
background-repeat: no-repeat;
display: flex;
align-content: center;
justify-content: center;
}
#mittrek::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 4px;
border-radius: 20px;
mask-composite: exclude;
z-index: 4;
overflow: hidden;
box-shadow: 0px 0px 40px 15px black;
}
</style>
</head>
<body>
<div id="mittrek"></div>
</body>
</html>
Итоги
После внесения этих изменений ваш элемент mittrek
должен корректно позиционироваться в центре экрана по вертикали и горизонтали. Использование position: absolute;
, left: 50%;
и translate(-50%, -50%);
позволяет нам явно контролировать расположение элемента в пределах окна браузера. Если у вас есть дополнительные вопросы или вам требуется помощь с другими аспектами CSS, не стесняйтесь спрашивать!