Увеличить при hover, но содержание чтобы осталось прежних размеров
Ответы (5 шт):
Автор решения: Voprositel
Нужно использовать трансформации. В данном случае scale().
div {
border: 1px solid red;
width: 100px;
height: 120px;
transition: 0.2s;
}
div:hover {
transform: scale(1.1);
}
div:hover .wrapper {
transform: scale(0.9);
<div><div class="wrapper">блок</div></div>
→ Ссылка
Автор решения: entithat
Можем сделать с помощью относительного позиционирования. Отодвигаем блок на нужное кол-во пикселей влево и вверх и растягиваем.
* {
padding: 0;
margin: 0;
}
.list {
margin-top: 50px;
display: flex;
justify-content: center;
}
.card {
width: 100px;
height: 200px;
border: solid 1px #262626;
background: #fbfbfb;
border-radius: 6px;
margin-left: 10px;
padding: 30px;
}
.card:hover {
position: relative;
top: -30px;
left: -30px;
padding: 60px;
margin-right: -60px;
}
<div class="list">
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
</div>
→ Ссылка
Автор решения: Алекс Данилин
.card {
height: 200px;
width: 100px;
padding: 15px;
position: relative;
z-index: 5;
transition: all .4s;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
box-shadow: 2px 2px 3px;
transition: all .4s;
}
.card:hover::before {
content: '';
position: absolute;
left: -5%;
width: 110%;
top: -5%;
height: 110%;
background: rgba(255, 0, 0, .3);
z-index: 3;
transition: all .4s;
}
<div class="card">
lorem12
</div>
→ Ссылка
Автор решения: CbIPoK2513
Увеличение основного блока идёт на 25% (scale(1.25)), при этом дочерний блок-обёртка должен принимать -25% (scale(0.75)), тогда будет создаваться эффект увеличения блока - без увеличения содержимого.
Так же, чтобы крайние элементы не "увеличивались" за свои приделы - добавить transform-origin относительно "местонахождения блока".
.section {
display: flex;
flex-direction: row;
width: 100%;
margin-top: 30px;
}
.section .item {
display: block;
width: 100%;
height: 30vw;
border-radius: 5px;
border: 1px solid #ccc;
background: #eee;
transition: transform 0.2s ease-in-out;
}
.section .item > .wrap {
transition: transform 0.2s ease-in-out;
}
.section .item:not(:last-child) {
margin-right: 10px;
}
.section .item:hover {
transform: scale(1.25);
}
.section .item:hover > .wrap {
transform: scale(0.75);
}
.section .item:first-child {
transform-origin: left center;
}
.section .item:last-child {
transform-origin: right center;
}
<div class="section">
<div class="item">
<div class="wrap">
<b>item 1</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 2</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 3</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 4</b>
</div>
</div>
</div>
→ Ссылка
Автор решения: soledar10
Один из вариантов - вынести слой фона карточки из потока и его уже аниммировать
Пример
body {
padding: 2rem;
}
.cards {
display: flex;
}
.card {
max-width: 33.3333%;
width: 33.3333%;
position: relative;
padding: 1rem;
}
.card:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #ccc;
border: 1px solid #000;
border-radius: 5px;
z-index: -1;
transition: transform .3s ease;
}
.card:hover:before {
z-index: 1;
transform: scale(1.1)
}
.card__inner {
position: relative;
z-index: 1;
}
<div class="cards">
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
</div>
→ Ссылка
Ответы (5 шт):
Автор решения: Voprositel
→ Ссылка
Нужно использовать трансформации. В данном случае scale().
div {
border: 1px solid red;
width: 100px;
height: 120px;
transition: 0.2s;
}
div:hover {
transform: scale(1.1);
}
div:hover .wrapper {
transform: scale(0.9);
<div><div class="wrapper">блок</div></div>
Автор решения: entithat
→ Ссылка
Можем сделать с помощью относительного позиционирования. Отодвигаем блок на нужное кол-во пикселей влево и вверх и растягиваем.
* {
padding: 0;
margin: 0;
}
.list {
margin-top: 50px;
display: flex;
justify-content: center;
}
.card {
width: 100px;
height: 200px;
border: solid 1px #262626;
background: #fbfbfb;
border-radius: 6px;
margin-left: 10px;
padding: 30px;
}
.card:hover {
position: relative;
top: -30px;
left: -30px;
padding: 60px;
margin-right: -60px;
}
<div class="list">
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="card">
<h3>Text</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
</div>
Автор решения: Алекс Данилин
→ Ссылка
.card {
height: 200px;
width: 100px;
padding: 15px;
position: relative;
z-index: 5;
transition: all .4s;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
box-shadow: 2px 2px 3px;
transition: all .4s;
}
.card:hover::before {
content: '';
position: absolute;
left: -5%;
width: 110%;
top: -5%;
height: 110%;
background: rgba(255, 0, 0, .3);
z-index: 3;
transition: all .4s;
}
<div class="card">
lorem12
</div>
Автор решения: CbIPoK2513
→ Ссылка
Увеличение основного блока идёт на 25% (scale(1.25)), при этом дочерний блок-обёртка должен принимать -25% (scale(0.75)), тогда будет создаваться эффект увеличения блока - без увеличения содержимого.
Так же, чтобы крайние элементы не "увеличивались" за свои приделы - добавить transform-origin относительно "местонахождения блока".
.section {
display: flex;
flex-direction: row;
width: 100%;
margin-top: 30px;
}
.section .item {
display: block;
width: 100%;
height: 30vw;
border-radius: 5px;
border: 1px solid #ccc;
background: #eee;
transition: transform 0.2s ease-in-out;
}
.section .item > .wrap {
transition: transform 0.2s ease-in-out;
}
.section .item:not(:last-child) {
margin-right: 10px;
}
.section .item:hover {
transform: scale(1.25);
}
.section .item:hover > .wrap {
transform: scale(0.75);
}
.section .item:first-child {
transform-origin: left center;
}
.section .item:last-child {
transform-origin: right center;
}
<div class="section">
<div class="item">
<div class="wrap">
<b>item 1</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 2</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 3</b>
</div>
</div>
<div class="item">
<div class="wrap">
<b>item 4</b>
</div>
</div>
</div>
Автор решения: soledar10
→ Ссылка
Один из вариантов - вынести слой фона карточки из потока и его уже аниммировать
Пример
body {
padding: 2rem;
}
.cards {
display: flex;
}
.card {
max-width: 33.3333%;
width: 33.3333%;
position: relative;
padding: 1rem;
}
.card:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #ccc;
border: 1px solid #000;
border-radius: 5px;
z-index: -1;
transition: transform .3s ease;
}
.card:hover:before {
z-index: 1;
transform: scale(1.1)
}
.card__inner {
position: relative;
z-index: 1;
}
<div class="cards">
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
<div class="card">
<div class="card__inner">
<h2 class="card__title">Title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam pariatur nulla culpa voluptatibus, velit facere dolores hic quis autem libero rem magnam suscipit assumenda non ad nemo neque unde sapiente.</p>
</div>
</div>
</div>
