javascript - 使用 javascript 在伪元素之后和之前添加样式
问题描述
我有一个按钮,当用户单击它时它具有以下样式:
.answer-buttons:active {
-webkit-transform: scale(1.2, 0.8);
z-index: 1;
}
.answer-buttons:active::before {
border-top-width: 10px;
border-bottom-width: 10px;
border-radius: 0.2em;
top: -10px;
border-left-color: cornflowerblue;
}
.answer-buttons:active::after {
border-top-width: 10px;
border-bottom-width: 10px;
border-radius: 0.2em;
top: -10px;
border-right-color: cornflowerblue;
}
如您所见,active
正在影响按钮及其伪元素after
,对吗?before
现在我想在用户按下键盘上的键时激活按钮:
window.addEventListener('keydown', keyPress);
function keyPress(e) {
if(e.keyCode == 37) {
// code to activate the button shape
window.removeEventListener('keydown', keyPress);
}
}
after
所以我需要一个解决方案来通过 JavaScript 在按钮及其before
伪元素上制作上述样式。
如果只有元素,我们可以简单地通过添加一个新类来做到这一点,但是after
我before
找不到合适的解决方案来完成这项工作?
解决方案
为此,您可以修改 CSS 以同时使用.active
类和:active
状态。然后,您可以在按下必要的键时简单地添加/删除类。
let buttons = document.querySelectorAll('.answer-buttons');
window.addEventListener('keydown', keyPress);
window.addEventListener('keyup', keyUp);
function keyPress(e) {
if (e.keyCode == 37) // left cursor
buttons.forEach(el => el.classList.add('active'));
}
function keyUp(e) {
if (e.keyCode == 37) // left cursor
buttons.forEach(el => el.classList.remove('active'));
}
.answer-buttons:active,
.answer-buttons.active {
-webkit-transform: scale(1.2, 0.8);
z-index: 1;
}
.answer-buttons:active::before,
.answer-buttons.active::before {
border-top-width: 10px;
border-bottom-width: 10px;
border-radius: 0.2em;
top: -10px;
border-left-color: cornflowerblue;
}
.answer-buttons:active::after,
.answer-buttons.active::after {
border-top-width: 10px;
border-bottom-width: 10px;
border-radius: 0.2em;
top: -10px;
border-right-color: cornflowerblue;
}
<button class="answer-buttons">Foo</button>
推荐阅读
- ios - 在SwiftUI中点击watchOS应用程序时如何更改图像
- .net - 为什么 Path.Combine() 不尊重“..”(上一级文件夹)?
- rabbitmq - 脚本 RabbitMQ 绑定
- awk - 试图将转义字符作为变量传递给 awk
- xml - XSLT-如何根据来自另一个 XML 的信息插入标签属性
- postgresql - postgres sql 10.16 版没有启动我的 Windows 10 笔记本电脑
- bash - 如果 `if [ ]` 中存在语法问题,如何使脚本提前退出?
- javascript - jqBootstrapValidation.js attr,从 json 文件翻译 data-validation-required-message
- node.js - NodeJs,试图了解 req.body 访问性能
- node.js - 使用 xml-crypto nodejs lib 生成的签名时出现无效签名错误