我有一个弹性框布局。单击框时,它们将展开为全屏。
问题是当框展开时,它会移动其他 flex 元素,导致动画看起来跳跃。弹性布局还可以防止展开的框接触屏幕顶部。
这是一个小提琴,向您展示我在说什么小提琴
框 1 实际上非常接近预期的效果,但它仍然像我上面描述的那样跳来跳去。
我尝试将所有未点击的卡片设置为"显示:无";但这并没有解决这两个问题。我还尝试在扩展卡片时将容器更改为"display:block",并在不扩展时更改回 flex。但同样,没有运气
.HTML
<div id=container>
<div class=cards>
<div class=card>
<div class="face front">
Card 1 Front
</div>
<div class="face back">
Card 1 Back
</div>
</div>
</div>
<div class=cards>
<div class=card>
<div class="face front">
Card 2 Front
</div>
<div class="face back">
Card 2 Back
</div>
</div>
</div>
<div class=cards>
<div class=card>
<div class="face front">
Card 3 Front
</div>
<div class="face back">
Card 3 Back
</div>
</div>
</div>
<div class=cards>
<div class=card>
<div class="face front">
Card 4 Front
</div>
<div class="face back">
Card 4 Back
</div>
</div>
</div>
</div>
.CSS
body {
height:100vh;
width:100vw;
margin:0px;
}
.noDisplay{
display: none;
}
#container {
display: flex;
flex-flow: row wrap;
justify-content: center;
position: relative;
background: skyblue;
height:100%;
width: 100%;
overflow: hidden;
margin:auto;
}
.off {
color: rgba(0, 0, 0, 0.0) !important;
background: rgba(230, 230, 250, 0.0) !important;
-webkit-transition: all 2s; /* Safari */
transition: all 2s;
}
.cards {
width: 300px;
height: 300px;
border-radius: 5px;
margin-left: 25px;
margin-right: 25px;;
-webkit-perspective: 900px;
-moz-perspective: 900px;
perspective: 900px;
-webkit-transition: all 1s; /* Safari */
transition: all 1s;
}
.cards .card.flipped {
-webkit-transform: rotatey(-180deg);
-moz-transform: rotatey(-180deg);
transform: rotatey(-180deg);
height: 100%;
z-index: 100;
}
.cards .card {
width: 100%;
height: 100%;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transition: all 1s; /* Safari */
transition: all 1s;
}
.cards .card .face {
width: 100%;
height: 100%;
position: absolute;
-webkit-backface-visibility: hidden ;
-moz-backface-visibility: hidden ;
backface-visibility: hidden ;
z-index: 2;
font-size: 2em;
font-family: arial, sans-serif;
text-align: center;
-webkit-transition: all 0.5s; /* Safari */
transition: all 0.5s;
}
.cards .card .front {
position: absolute;
background: tomato;
z-index: 1;
}
.cards .card .back {
-webkit-transform: rotatey(-180deg);
-moz-transform: rotatey(-180deg);
transform: rotatey(-180deg);
background: gold;
}
.cards .card .front,
.cards .card .back{
cursor: pointer;
}
.big {
height:100%;
width:100%;
top: 0%;
margin-left: 0%;
margin-right: 0%;
z-index:100;
}
jQuery
$('.card').click(function(){
if (!$(this).hasClass("flipped")) {
$( ".face" ).addClass( 'off' );
$( this ).children( ".face" ).removeClass( 'off' );
$( this ).parent( ".cards" ).addClass( 'big' );
$( this ).addClass('flipped');
/*$('.card').each(function(){
/*if(!$(this).hasClass('flipped')){
$(this).addClass('noDisplay');
}
});*/
} else {
$('.container').css('display', 'flex');
$( ".face" ).removeClass( 'off' );
$( ".cards" ).removeClass( 'big' );
$( this ).removeClass('flipped');
/*$('.card').each(function(){
$(this).removeClass('noDisplay');
});*/
}
});
老问题,但是您可以通过更改同级上的flex属性(单击项目时)来实现这一点。首先,您需要使用flexbox设置它们的大小,然后说您的卡片是:
flex:1 0 33vh;
33vh 是总视口高度的三分之一; 您需要在单击时将同级(而不是单击的同级)更改为:
flex:0.00001;
(有人说少量比flex:0更好;对于过渡)。这会将除单击的卡片之外的所有卡片设置为 0 高度(或宽度,具体取决于大小写),单击的卡片将展开以填充视口的总高度。如果你添加隐藏的溢出并过渡到卡片,你就是黄金。