Ответ 1
Причина, по которой transform: translate(-50%, -50%)
требуется потому, что вы хотите, чтобы центр элемента transform: translate(-50%, -50%)
с центром его родителя. Проще говоря, его можно свернуть до translateX(-50%) translateY(-50%)
, что означает:
- переместите меня влево на 50% от моей ширины вдоль оси х и
- переместите меня вверх на 50% от моего роста по оси у
Это эффективно перемещает центр элемента в его первоначальный верхний левый угол. Помните, что когда вы устанавливаете left: 50%; top 50%
left: 50%; top 50%
на элементе, вы перемещаете его верхний левый угол в центр его родителя (что означает, что он вообще не визуально не центрирован). Перемещая элемент назад влево и вверх на половину его ширины и высоты, вы уверены, что его центр теперь выравнивается с родительским центром, делая его визуально горизонтально + вертикально центрированным.
В качестве доказательства концепции см. Ниже фрагмент кода: наведите указатель мыши на родительский элемент, чтобы заставить дочерний элемент "призрак" переместить себя с помощью transform: translate(-50%, -50%)
:
body {
margin: 0;
padding: p;
}
.parent {
background-color: #ccc;
width: 100vw;
height: 100vh;
position: relative;
}
.child {
background-color: rgba(0,0,255,0.5);
width: 50px;
height: 50px;
position: absolute;
top: 50%;
left: 50%;
}
.child::before {
background-color: rgba(255, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
content: '';
transition: all .5s ease-in-out;
}
body:hover .child::before {
transform: translate(-50%, -50%);
}
<div class="parent">
<div class="child"></div>
</div>