javascript - 为什么伪类:active work?没有

标签 javascript css css-selectors pseudo-class

我的网页有一个 Bootstrap dropdown button我给了四个下拉元素。他们每个人都被赋予了一个 javascript 事件,该事件允许动态翻译页面的某些元素(因此四个下拉项被命名为“en”、“es”、“fr”、“it”):

<div class="btn-group">
                <button id="translate" type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown"
                        aria-haspopup="true" aria-expanded="false">
                    <i class="fas fa-language"></i>
                </button>
                <div class="dropdown-menu">
                    <a class="dropdown-item" href="#lang-en" onclick="window.lang.change('it');return false;">It</a>
                    <a class="dropdown-item" href="#lang-en" onclick="window.lang.change('fr');return false;">Fr</a>
                    <a class="dropdown-item" href="#lang-en" onclick="window.lang.change('en');return false;">En</a>
                    <a class="dropdown-item" href="#lang-en" onclick="window.lang.change('es');return false;">Es</a>
                </div>
            </div>

我想在选择一种语言时更改四个下拉项的样式。例如,当用户点击“fr”下拉项时,页面的元素被翻译成法语;当她/他再次打开下拉菜单时,元素“fr”被赋予蓝色。

这是我正在尝试做的一个例子:

example

我希望该下拉项的颜色在页面语言为“法语”的整个过程中保持蓝色。

我一直在尝试使用 CSS 伪类 :active 来实现这个目标,但没有成功:

.dropdown-item:active{
    background-color: black;
    color: blue;
}

更具体地说,仅当单击该元素时背景颜色才会转换为“黑色”,而我希望它保持黑色直到选择另一种语言。

我是不是使用了错误的伪类,还是应该选择其他 CSS 选择器或替代方法?

最佳答案

:active 表示“激活时”。它专为“当您单击按钮时,它看起来像是被按下,而当您停止单击时,它又弹回”之类的效果而设计。

“单击一组按钮中的最后一个,每个按钮都运行 JavaScript”没有伪类。


您以 XY Problem 的形式表达了您的问题,让我们回到实际问题:

如何选择指向文档当前语言版本的链接?

首先,让您的 JavaScript 不引人注目。

<a class="dropdown-item" 
   href="/it/this/document"
   hreflang="it"><abbr title="Italian">It</abbr></a>

<script>
    const langlinks = Array.from(document.querySelector(".dropdown-item"));
    langlinks.forEach(link => link.addEventListener("click", changeLang);
    function changelang (event) {
        window.lang.change(event.target.hreflang);
        event.preventDefault();
    }
</script>

然后确保当你改变语言时,你在标记中表达它:

<html lang="it">

然后你可以使用 language pseudo-class 编写一个选择器:

html:lang(it) .dropdown-menu[hreflang=it] {
    /* ... */
}

遗憾的是,我们无法使用 CSS 以编程方式将 it 的两个实例映射到那里,因此您需要为每种语言包含一个选择器。

关于javascript - 为什么伪类:active work?没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56900952/

相关文章:

javascript - 如何使用 jquery 动态创建 iframe HTML

css - 我们正在使用来自推特 Bootstrap 的一些代码,我们的 div 在 Internet Explorer 中是关闭的 (7-9)

jquery - 如何在刷新后或加载不同页面时保持颜色变化?

javascript - 导航栏上的 Bootstrap 词缀,属性始终打开(类始终处于事件状态)

html - 为什么会溢出: hidden remove scroll margin top?

html - CSS选择每隔一对元素

javascript - sendSignInLinkToEmail 发送无效的 URL

javascript - 自调用匿名函数内变量的生命周期 - 函数闭包

html - 更改选项标签内 Title 属性的样式

javascript - 带有反应路线的三元运算符中的多个表达式