Как изменить направление увеличение объекта? CSS
Как можно изменить направление увеличение?
Например есть такой код:
body {
margin: 0;
padding: 0;
}
header {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.main {
position: relative;
margin: 12px;
font-size: 2.5em;
}
.main::before {
content: "";
top: 100%;
position: absolute;
background: #333333;
opacity: 0%;
width: 0%;
height: 5px;
transition: 1s;
}
.main:hover::before {
content: "";
position: absolute;
width: 100%;
opacity: 100%;
}
.main::after {
content: "";
top: 0%;
position: absolute;
background: #333333;
height: 5px;
width: 1px;
transition: 1s;
}
.main:hover::after {
content: "";
position: absolute;
width: 100px;
}
<header>
<div class="main">Hi all</div>
<div class="main">Hi all</div>
<div class="main">Hi all</div>
<div class="main">Hi all</div>
</header>
Потом через hover я изменяю ширину, но она изменяется слева на право, а мне нужно наоборот. Как реализовать?
Ответы (1 шт):
Автор решения: Михаил Камахин
→ Ссылка
transform-origin: right top точка начала трансформации - правый верхний угол блока
Вся анимация строится в изменении transform: scaleX().
scaleX(1) - изначальный размер блока, 0.5 - половина блока, 2 - две ширины блока.
т.е. width * scaleX = ширина, которая получится
@import url('https://fonts.googleapis.com/css2?family=Caveat&display=swap');
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Caveat', cursive;
font-size: 70px;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.content {
transition: transform 0.3s ease-in-out;
transform-origin: right top;
cursor: pointer;
}
.content:hover {
transform: scaleX(1.5);
}
<div class="content">
Привееет
</div>
Вправо и влево полосы анимированно выходят, которые снизу и сверху
@import url('https://fonts.googleapis.com/css2?family=Caveat&display=swap');
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Caveat', cursive;
font-size: 70px;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.content {
position: relative;
cursor: pointer;
}
.content::before, .content::after {
display: block;
content: '';
position: absolute;
width: 100%;
left: 0;
top: 0;
height: 2px;
background-color: orange;
transform: scaleX(0);
transition: transform 0.4s ease-in-out;
transform-origin: left;
}
.content::after {
top: 100%;
transform-origin: right;
}
.content:hover::before, .content:hover::after {
transform: scaleX(1);
}
<div class="content">
Привееет
</div>