我想改变我的代码,以便当我的布局变化有一个滑动动画。
这是一个3列布局,我希望最左边的列缩小,但当用户集中在屏幕的右边2/3。
我写了一个简单的codepen来演示我的代码。
我使用JS在两个CSS类之间转换,但是我想给它添加一个滑动转换。
我不确定这是否应该是100%的CSS,或者我是否需要使用一些jQuery动画来获得想要的效果。
代码编号:https://codepen.io/glennferrie/pen/vYaLpXo
const leftPane = document.getElementById('leftpane');
const centerPane = document.getElementById('centerpane');
const rightPane = document.getElementById('rightpane');
var addMode2 = function() {
leftPane.classList.add("mode-2");
rightPane.classList.add("mode-2");
centerPane.classList.add("mode-2");
}
var removeMode2 = function() {
leftPane.classList.remove("mode-2");
rightPane.classList.remove("mode-2");
centerPane.classList.remove("mode-2");
}
leftPane.addEventListener("mouseover", function(ev) {
removeMode2();
});
centerPane.addEventListener("mouseover", function(ev) {
addMode2();
});
rightPane.addEventListener("mouseover", function(ev) {
addMode2();
});
.container {
background-color: lightblue;
font-family: sans-serif;
font-size: 1.1em;
}
.left-pane,
.center-pane,
.right-pane {
padding-block-start: 10vh;
display: inline-block;
outline: dotted 2px #333;
height: 95vh;
text-align: center;
}
.left-pane {
width: 25vw;
background-color: yellow;
}
.center-pane {
width: 40vw;
}
.right-pane {
width: 33vw;
background-color: aquamarine;
}
.left-pane.mode-2 {
width: 10vw;
}
.center-pane.mode-2 {
width: 47vw;
}
.right-pane.mode-2 {
width: 40vw;
}
<div class="container">
<div class="left-pane" id="leftpane">
Left Pane Content
</div>
<div class="center-pane" id="centerpane">
Center Pane Content
</div>
<div class="right-pane" id="rightpane">
Right Pane Content
</div>
</div>
3条答案
按热度按时间inkz8wg91#
你可以使用一个
grid
来动画显示列的宽度。下面的解决方案使用has()
伪代码not yet supported by Firefox。7vhp5slm2#
您可以在类
.left-pane
上添加transition: all 0.2s ease-in-out;
CSS以使其平滑。ymdaylpp3#
你可以通过在CSS中为
.left-pane, .center-pane, .right-pane
元素添加transition
属性来实现这一点。最好为所有三个窗格都添加该属性,因为它们在悬停时都会改变宽度。下面是一个例子:
如您所见,我为
transition
添加了3个属性。第一个是时间,定义了你的动画需要多长时间才能完成。第二个是你想要动画的属性,在你的例子中,它是
width
,最后一个是插值器,默认情况下,它被设置为线性,这可能是你想要的,但你可以改变它,我设置为ease
,使效果更赏心悦目。您可以阅读更多关于
transition
的内容,了解docs中的所有可能性。