使用 css 使输入聚焦时 LI 处于活动状态

发布于 2024-10-25 23:34:58 字数 1395 浏览 1 评论 0原文

当仅使用 CSS 聚焦输入字段时,是否有办法使

  • 具有活动状态?如果没有,关于实现这一目标的最佳方法有什么建议吗?
  • 查看现场演示:http://jsfiddle.net/W5LzP/

    在示例中,我希望当用户单击输入字段时 LI 的背景颜色保持黄色。

    HTML 示例:

    <ol>
        <li>
        <label for="first_name">Your first name</label>
        <input name="first_name" placeholder="Type Your First Name" /></li>
    
        <li>
        <label for="lastt_name">Your last name</label>
        <input name="last_name" placeholder="Type Your Last Name" />
        </li>
    
        <li>
        <label for="email_address">Your first name</label>
        <input name="email_address" placeholder="Type Your Email Address" />
        </li>
    
        <li>
        <label for="country">Your country</label>
        <input name="country" placeholder="Select your country from the drop down list" />         
        </li>
    </ol>
    

    CSS 示例:

    ol li label{
        display:block;
    }
    
    ol li{
        margin-bottom:8px;
        background-color:#CCC;
    }
    
    ol li:hover{
        background-color:#090;
    }
    
    ol li:active{
        background-color:#FF9;
    }
    
    ol li input:focus{
        border:1px solid #99C;
        background-color:#99F;
    }
    

    Is there a way to make an <li> have an active state when an input field is focussed using CSS only? If not, any suggestions on the best way to go about achieving this?

    See live demo: http://jsfiddle.net/W5LzP/

    In the example, I want the background colour of the LI to stay yellow when the user clicks in the input field.

    Example HTML:

    <ol>
        <li>
        <label for="first_name">Your first name</label>
        <input name="first_name" placeholder="Type Your First Name" /></li>
    
        <li>
        <label for="lastt_name">Your last name</label>
        <input name="last_name" placeholder="Type Your Last Name" />
        </li>
    
        <li>
        <label for="email_address">Your first name</label>
        <input name="email_address" placeholder="Type Your Email Address" />
        </li>
    
        <li>
        <label for="country">Your country</label>
        <input name="country" placeholder="Select your country from the drop down list" />         
        </li>
    </ol>
    

    Example CSS:

    ol li label{
        display:block;
    }
    
    ol li{
        margin-bottom:8px;
        background-color:#CCC;
    }
    
    ol li:hover{
        background-color:#090;
    }
    
    ol li:active{
        background-color:#FF9;
    }
    
    ol li input:focus{
        border:1px solid #99C;
        background-color:#99F;
    }
    

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

    评论(2

    傲娇萝莉攻 2024-11-01 23:34:58

    CSS 只能选择后代,不能选择祖先(也许应该出于您概述的原因)。

    您必须使用 JavaScript,请查看 parentNode 属性。

    var inputs = document.getElementsByTagName('input');
    
    for (var i = 0, inputsLength = inputs.length; i < inputsLength; i++) {
    
        inputs[i].onfocus = function() {
            this.parentNode.className += 'active';
        }
    
        inputs[i].onblur = function() {
            this.parentNode.className = this.parentNode.className.replace(/\bactive\b/, '');
        }
    
    }
    

    jsFiddle

    CSS can only select descendants, it can't select ancestors (perhaps it should for the reason you have outlined).

    You would have to use JavaScript, look at parentNode property.

    var inputs = document.getElementsByTagName('input');
    
    for (var i = 0, inputsLength = inputs.length; i < inputsLength; i++) {
    
        inputs[i].onfocus = function() {
            this.parentNode.className += 'active';
        }
    
        inputs[i].onblur = function() {
            this.parentNode.className = this.parentNode.className.replace(/\bactive\b/, '');
        }
    
    }
    

    jsFiddle.

    久而酒知 2024-11-01 23:34:58

    不幸的是 css 不支持父选择器。
    因此,唯一的方法是使用 javascript,如 jQuery parent 方法。

    Unfortunately css doesn't support parent selectors.
    So the only way to do it is to use javascript like the jQuery parent method.

    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文