如何向 .class:not(:hover) 添加过渡?
How can you add a transition to .class:not(:hover)?
我一直在研究一个悬停画廊,一旦其中一个元素悬停,它就会增长到整个画廊的大小,而其他所有内容都设置为不透明度:0 和高度:0。在任何地方添加过渡在其 class 或 gallery-wrap 中不起作用,也没有任何效果。我必须将它放在哪个 class 中才能按预期工作?
我试过过渡:10 秒,但到目前为止它在任何地方都不起作用。
HTML:
<div class="gallery-wrap">
<div class="gallery-item" style="--n: 0">
<div style="background-image: url(assets/images/first.jpg);" class="gallery-part"></div>
<p>First</p>
</div>
<div class="gallery-item" style="--n: 1">
<div style="background-image: url(assets/images/second.JPG);" class="gallery-part"></div>
<p>Second</p>
</div>
<div class="gallery-item" style="--n: 2">
<div style="background-image: url(assets/images/third.jpeg);" class="gallery-part"></div>
<p>Thir</p>
</div>
<div class="gallery-item" style="--n: 3">
<div style="background-image: url(assets/images/fourth.jpg);" class="gallery-part"></div>
<p>Fourth</p>
</div>
<div class="gallery-item" style="--n: 4">
<div style="background-image: url(assets/images/fifth.jpg);" class="gallery-part"></div>
<p>Fifth</p>
</div>
<div class="gallery-item" style="--n: 5">
<div style="background-image: url(assets/images/sixth.jpg); --n: 5" class="gallery-part"></div>
<p>Sixth</p>
</div>
</div>
SCSS:
.gallery-wrap{
width: 28vw;
height: 48vh;
overflow: hidden;
.gallery-part{
transition: .8s;
overflow: hidden;
height: 8vh;
background-size: cover;
opacity: .1;
filter: grayscale(100%);
mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0) 250%);
}
p{
padding-left: 2%;
position: fixed;
margin-top: 0;
transform: translateY(-8vh);
}
&:hover{
> .gallery-item:not(:hover){
opacity: 0;
height: 0;
}
> .gallery-item{
&:hover{
height: 48vh;
}
}
}
}
.gallery-item{
&:hover{
height: 0;
> .gallery-part{
opacity: 1;
height: 48vh;
filter: none;
}
}
}
应该是平滑过渡,而不是跳跃式过渡。因此,除了悬停的那个之外,所有画廊项目的高度应该缓慢移动到 0,而悬停的元素应该增长到画廊包装的大小。
谢谢您的帮助! :)
您的 .gallery-item
元素从未指定的高度跳到 height: 0;
,没有任何过渡。
因此,如果您稍微修改 .gallery-item
选择器,您应该会得到想要的:
.gallery-item {
height: 8vh; /* New */
transition: 0.8s; /* New */
&:hover {
height: 0;
> .gallery-part {
opacity: 1;
height: 48vh;
filter: none;
}
}
}
我一直在研究一个悬停画廊,一旦其中一个元素悬停,它就会增长到整个画廊的大小,而其他所有内容都设置为不透明度:0 和高度:0。在任何地方添加过渡在其 class 或 gallery-wrap 中不起作用,也没有任何效果。我必须将它放在哪个 class 中才能按预期工作?
我试过过渡:10 秒,但到目前为止它在任何地方都不起作用。
HTML:
<div class="gallery-wrap">
<div class="gallery-item" style="--n: 0">
<div style="background-image: url(assets/images/first.jpg);" class="gallery-part"></div>
<p>First</p>
</div>
<div class="gallery-item" style="--n: 1">
<div style="background-image: url(assets/images/second.JPG);" class="gallery-part"></div>
<p>Second</p>
</div>
<div class="gallery-item" style="--n: 2">
<div style="background-image: url(assets/images/third.jpeg);" class="gallery-part"></div>
<p>Thir</p>
</div>
<div class="gallery-item" style="--n: 3">
<div style="background-image: url(assets/images/fourth.jpg);" class="gallery-part"></div>
<p>Fourth</p>
</div>
<div class="gallery-item" style="--n: 4">
<div style="background-image: url(assets/images/fifth.jpg);" class="gallery-part"></div>
<p>Fifth</p>
</div>
<div class="gallery-item" style="--n: 5">
<div style="background-image: url(assets/images/sixth.jpg); --n: 5" class="gallery-part"></div>
<p>Sixth</p>
</div>
</div>
SCSS:
.gallery-wrap{
width: 28vw;
height: 48vh;
overflow: hidden;
.gallery-part{
transition: .8s;
overflow: hidden;
height: 8vh;
background-size: cover;
opacity: .1;
filter: grayscale(100%);
mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0) 250%);
}
p{
padding-left: 2%;
position: fixed;
margin-top: 0;
transform: translateY(-8vh);
}
&:hover{
> .gallery-item:not(:hover){
opacity: 0;
height: 0;
}
> .gallery-item{
&:hover{
height: 48vh;
}
}
}
}
.gallery-item{
&:hover{
height: 0;
> .gallery-part{
opacity: 1;
height: 48vh;
filter: none;
}
}
}
应该是平滑过渡,而不是跳跃式过渡。因此,除了悬停的那个之外,所有画廊项目的高度应该缓慢移动到 0,而悬停的元素应该增长到画廊包装的大小。 谢谢您的帮助! :)
您的 .gallery-item
元素从未指定的高度跳到 height: 0;
,没有任何过渡。
因此,如果您稍微修改 .gallery-item
选择器,您应该会得到想要的:
.gallery-item {
height: 8vh; /* New */
transition: 0.8s; /* New */
&:hover {
height: 0;
> .gallery-part {
opacity: 1;
height: 48vh;
filter: none;
}
}
}