ICE*_*ICE 2 html css css-transitions css-animations
当我设置了过渡textarea并且想通过右下角的调整大小手柄调整其大小时,调整大小会很滞后。
您可以在这个简单的示例中看到:
textarea{
outline : none;
border: 3px solid black;
resize: vertical;
-webkit-transition:all ease-in-out 0.7s;
-moz-transition:all ease-in-out 0.7s;
-ms-transition:all ease-in-out 0.7s;
-o-transition:all ease-in-out 0.7s;
transition:all ease-in-out 0.7s;
}
textarea:focus{
border-color: red;
}Run Code Online (Sandbox Code Playgroud)
<textarea>Resize me by my resize handle please</textarea>Run Code Online (Sandbox Code Playgroud)
如果没有过渡,调整大小是平滑的,但我希望有过渡来改变边框颜色。
我考虑过不使用过渡textarea并使用动画,如下所示:
textarea{
outline : none;
border: 3px solid black;
resize: vertical;
}
textarea:focus{
animation: animate 0.7s linear forwards;
}
@keyframes animate {
100% {
border-color: red;
}
}Run Code Online (Sandbox Code Playgroud)
<textarea>Resize me by my resize handle please</textarea>Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我部分地解决了动画问题,但在焦点上我没有过渡。
请提供纯CSS的解决方案。如果我可以在不使用动画的情况下解决滞后问题,或者使用动画焦点解决它,但我不知道如何选择焦点。
问题是您将过渡应用于所有属性,并且在调整大小时您正在更改元素的高度/宽度,以便它们受到过渡的影响;因此你会产生这种滞后效应。
为了避免这种情况,只需将转换应用于所需的属性,在本例中为border-color.
textarea {
outline: none;
border: 3px solid black;
resize: vertical;
transition: border-color ease-in-out 0.7s;
}
textarea:focus {
border-color: red;
}Run Code Online (Sandbox Code Playgroud)
<textarea>Resize me by my resize handle please</textarea>Run Code Online (Sandbox Code Playgroud)
关于动画问题:当焦点被移除时,动画也会被移除,因此您会立即返回到初始状态。要解决此问题,您可以考虑使用两个动画。
这只是第二种方法的修复,而不是我推荐的解决方案,因为上面的方法是合适的。
textarea {
outline: none;
border: 3px solid black;
resize: vertical;
animation: focus-out 0.7s linear forwards;
}
textarea:focus {
animation: focus-in 0.7s linear forwards;
}
@keyframes focus-out {
from {
border-color: red;
}
to {
border-color: black;
}
}
@keyframes focus-in {
to {
border-color: red;
}
}Run Code Online (Sandbox Code Playgroud)
<textarea>Resize me by my resize handle please</textarea>Run Code Online (Sandbox Code Playgroud)