Reputation: 11690
I'm trying to make the hover on an element, making it bigger by few percent, but I'd like to have the title and the contents inside stay where they are. If I just add scale(1.05)
to the element, the contents will scale as well. If I try to counter scale the inner element with scale(0.95)
the size will be like the original, but the placement won't be the same:
.container {
display: block;
width: 100%;
padding: 50px;
}
.element {
height: 562px;
width: 590px;
display: inline-block;
position: relative;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
background-image: url(https://images.unsplash.com/photo-1451906278231-17b8ff0a8880?crop=entropy&fit=crop&fm=jpg&h=975&ixjsv=2.1.0&ixlib=rb-0.3.5&q=80&w=1925);
background-size: cover;
background-position: center center;
}
.title {
font-size: 45px;
line-height: 48px;
bottom: 10%;
position: absolute;
margin: 0 25px;
color: #fff;
text-shadow: 0 2px 0 rgba(0, 0, 0, 0.14);
font-weight: 700;
font-family: sans-serif;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
}
.element:hover {
transform: scale(1.05);
z-index: 10;
}
.element:hover .title {
transform: scale(0.95);
}
<div class="container">
<div class="element">
<div class="title">This is the big title.</div>
</div>
</div>
The content inside is absolutely placed so I'd probably have to fix it by specifying the bottom
and left
property, but I think that there will still be some transition on the inner element.
Is there any way around this? Just to expand the element without affecting the contents?
Upvotes: 2
Views: 5958
Reputation: 87303
Since children of the element
will be affected, this might be a good alternative, using a pseudo element.
.container {
display: block;
width: 100%;
padding: 50px;
}
.element {
position: relative;
height: 562px;
width: 590px;
display: inline-block;
}
.element:before {
content: ' ';
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: inline-block;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
background-image: url(https://images.unsplash.com/photo-1451906278231-17b8ff0a8880?crop=entropy&fit=crop&fm=jpg&h=975&ixjsv=2.1.0&ixlib=rb-0.3.5&q=80&w=1925);
background-size: cover;
background-position: center center;
}
.title {
font-size: 45px;
line-height: 48px;
bottom: 10%;
position: absolute;
margin: 0 25px;
color: #fff;
text-shadow: 0 2px 0 rgba(0, 0, 0, 0.14);
font-weight: 700;
font-family: sans-serif;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
}
.element:hover:before {
transform: scale(1.05);
}
<div class="container">
<div class="element">
<div class="title">This is the big title.</div>
</div>
</div>
And if you still need the element
to for example add other elements etc., this might be a second option
.container {
display: block;
width: 100%;
padding: 50px;
}
.element {
position: relative;
height: 562px;
width: 590px;
display: inline-block;
}
.inner {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: inline-block;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
background-image: url(https://images.unsplash.com/photo-1451906278231-17b8ff0a8880?crop=entropy&fit=crop&fm=jpg&h=975&ixjsv=2.1.0&ixlib=rb-0.3.5&q=80&w=1925);
background-size: cover;
background-position: center center;
}
.title {
font-size: 45px;
line-height: 48px;
bottom: 10%;
position: absolute;
margin: 0 25px;
color: #fff;
text-shadow: 0 2px 0 rgba(0, 0, 0, 0.14);
font-weight: 700;
font-family: sans-serif;
-webkit-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
}
.element:hover .inner {
transform: scale(1.05);
}
<div class="container">
<div class="element">
<div class="inner"></div>
<div class="title">This is the big title.</div>
</div>
</div>
Upvotes: 2
Reputation: 5350
Move background to separate layer.
.container {
position: relative;
display: block;
width: 300px;
height: 300px;
padding: 50px;
margin: 50px auto;
}
.background {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
transition: all 300ms ease-in-out;
background: url(https://images.unsplash.com/photo-1451906278231-17b8ff0a8880?crop=entropy&fit=crop&fm=jpg&h=975&ixjsv=2.1.0&ixlib=rb-0.3.5&q=80&w=1925) center center;
background-size: cover;
}
.title {
position: absolute;
bottom: 10%;
left: 0;
margin: 0 25px;
font-size: 45px;
line-height: 48px;
color: #fff;
font-weight: 700;
font-family: sans-serif;
}
.container:hover .background {
transform: scale(1.05);
}
<div class="container">
<div class="background"></div>
<div class="title">This is the big title.</div>
</div>
Upvotes: 3