Хорошие вопросы.
Как правило, %
- это единица измерения непосредственных родительских измерений, которая берется из ширины / высоты в зависимости от того, как вы ее используете.Например, скажем, у вас есть 1000px x 500px
контейнер.Если у вашего ребенка left: 50%
или right: 50%
, вы будете позиционировать ребенка с измерением 500px
(половина от 1000), привязанным слева или справа.Те же правила применяются к top: 50%
или bottom: 50%
, за исключением того, что теперь вы будете иметь дело с 250px
(половина из 500).Честно говоря, я никогда ничего не запоминал и ничего не делал (отсюда и плохое объяснение), я просто полагался на инструменты для взлома браузеров, и эти знания следуют дальше.
Что вы можете сделать, чтобы решить свое позиционированиепроблема заключается в размещении position: relative
на родительском элементе - вашем заголовке.Вы сделали это, но я собираюсь переобъяснить, просто чтобы быть тщательным.
position: absolute
обычно позволяет позиционировать элемент (сверху, слева, справа или снизу) относительно окна браузера.;top: 0px; left: 0px;
будет верхний левый угол.Размещение position: relative
или absolute
на родительском элементе позволяет всем дочерним элементам position: absolute
быть относительными по отношению к их родителю.
В следующем примере .some-child
будет находиться на расстоянии 20px
от всего, потому чтовсе измерения относятся к родителю.
.some-parent {
margin: 20px;
position: relative;
}
.some-child {
position: absolute;
top: 0;
left: 0;
}
Используя эти знания, ваш заголовок должен быть относительным, а границы и рамки могут быть абсолютными.Однако вы должны убедиться, что ваш header
ограничен правильными размерами, и вы должны использовать абсолютные пиксели для определения смещений.Это объяснение немного вышло из-под контроля, поэтому я просто покажу вам, что я имею в виду.
* {
/* helpful for debugging, but use your developer tools */
outline: 1px solid red;
}
header{
height: 200px;
width: 410px;
position: relative;
background: lightblue;
}
.border{
position: absolute;
width: 10px;
background-color: yellow;
/* see comment below
transform: translate(-0%, -50%);*/
left: 0;
top: 0;
height: 100%; /* height matches parent */
animation: move-border 1.1s;
}
.box{
position: absolute;
left: 10px;
top: 0;
height: 100%;
right: 0;
/* don't need this! You should try to make
your animations animate to transform: none,
which are essentially transform: translate(0, 0).
Makes it a lot easier to layout things
and the move-box animation automatically transforms
back to the original state (if no 100% is defined)
transform: translate(-50%, -50%);*/
background-color: white;
animation: move-box 0.8s;
}
.box h1{
/* doesn't need to be absolute! but you can play with these numbers,
they will be relative to .box
position: absolute;
left: 25px;
top: 50px;
*/
animation: fadein 2s ease-in;
}
@keyframes move-box {
0% {
left: 35%;
opacity: 0;
}
100%{
}
}
@keyframes move-border {
0%{
left: 22%;
opacity: 0;
}
100%{
opacity: 1;
}
}
@keyframes fadein {
0% {opacity: 0;}
100%{opacity: 1;}
}
<header>
<div class="box">
<h1>This is some text</h1>
</div>
<div class="border"></div>
</header>
Чтобы центрировать заголовок, как раньше, просто оберните его в другом контейнере и выполните некоторую логику центрирования там.
Многое происходиттам, и я уверен, что вы на грани скуки до смерти, но не стесняйтесь оставлять любые вопросы в комментариях.Я сделаю все возможное, чтобы ответить на них.Надеюсь, это поможет!