【问题标题】:CSS focus on child element change a parent elementCSS 关注子元素改变父元素
【发布时间】:2016-12-03 08:12:30
【问题描述】:

我想在表单域内设置一个带有标签和输入的表单,当我在输入中写一些东西(可能有焦点)时,我希望边框以一些蓝色点亮。现在我有这样的东西:

HTML

<div class="login-form-field">
  <label for="email" class="login-form-label">Email:</label>
  <input class="login-form-input" autofocus="autofocus" type="email" value="" name="user[email]" id="user_email">
</div>

CSS

.login-form-input{
  margin-left: 20px;
  width: 90%;
  outline: none;
  border: none;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
  box-shadow: 0 0 0px 1000px white inset;
}
.login-form-label {
  font-size: 13px;
  font-weight: 300;
  padding-left: 20px;
}
.login-form-field{
  width: 100%;
  border-radius: 0px;
  height: 6rem;
  border: 0.5px solid grey;
  box-shadow: 0px 0px 0px;
}

我已经尝试选择父级进行一些更改以及我在谷歌上找到的其他内容。我得到的最接近的是当鼠标悬停在它上方时用蓝色突出显示:悬停,但我需要颜色保持不变,因为我选择了输入。

.login-form-field:hover {
  border-color: blue !important;
}

这是JSFiddle,如果有人可以提供帮助,我将不胜感激!

【问题讨论】:

    标签: javascript html css sass


    【解决方案1】:

    虽然这是一个旧答案。我正在回答这个问题,所以任何登陆这里的人都可以只使用 CSS 来实现这一点。

    使用 CSS3 伪元素:focus-within

    你可以这样做:

    form:focus-within {
      border-color: blue !important;
    }
    

    【讨论】:

    • 没有focus-with!!
    【解决方案2】:

    您现在可以在纯 CSS 中执行此操作,因此不需要 JavaScript。

    新的 CSS 伪类 :focus-within 将有助于解决此类情况,并有助于提高人们使用制表符进行导航时的可访问性,这在使用屏幕阅读器时很常见。

    .login-form-field:focus-within {
      border-color: blue !important;
    }
    

    :focus-within 伪类匹配自身的元素 匹配 :focus 或具有匹配 :focus 的后代。

    你可以查看哪些浏览器支持这个http://caniuse.com/#search=focus-within

    【讨论】:

      【解决方案3】:

      与 jquery 反应:

      $( document ).ready(function() {
          console.log( "ready!" );
      
          $('.login-form-input').focus(function() {
               $(this).parent().css( "border", "#99f 2px solid" );
          });
      
          $('.login-form-input').focusout(function() {
               $(this).parent().css( "border", "" );
          });
      
      });
      

      【讨论】:

      • jsfiddle.net/7AaDc/220
      • 感谢您的帮助!它有效并且根本没有弄乱代码,我认为我可以在 css 中做到这一点而不会弄得一团糟哈哈
      【解决方案4】:

      您可以这样做,在其中添加一个额外的div,绝对定位,作为边框,......并且不需要脚本。

      .login-form-input {
        margin-left: 20px;
        width: 90%;
        outline: none;
      }
      
      .login-form-label {
        font-size: 13px;
        font-weight: 300;
        padding-left: 20px;
      }
      
      .login-form-field {
        position: relative;
        width: 100%;
        border-radius: 0px;
        height: 6rem;
        box-shadow: 0px 0px 0px;
      }
      .login-form-field input ~ .login-form-field-border {
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        box-sizing: border-box;  
        border: 0.5px solid grey;
        z-index: -1
      }
      .login-form-field input:focus ~ .login-form-field-border {
        border: 2px solid blue;  
      }
      <div class="login-form-field">
        <label for="email" class="login-form-label">Email:</label>
        <input class="login-form-input" autofocus="autofocus" type="email" value="" name="user[email]" id="user_email">
        <div class="login-form-field-border"></div>
      </div>

      【讨论】:

      • 感谢您的帮助!
      【解决方案5】:

      CSS 没有对父选择的原生支持。如果您的目标是让.login-form-fieldfocus 上有一个蓝色边框,那么您将不得不依赖 JavaScript 来添加相应的 CSS。

      以下 CSS:

      .login-form-field.highlight {
        border-color: blue;
      }
      

      用下面的jQuery

      $('.login-form-field').hover(function() {
          $(this).toggleClass('highlight');
      });
      

      会实现这个目标。我应该注意,这里肯定不需要 jQuery。这正是我喜欢使用的。

      【讨论】:

      • @nicael 是的;对于更具体的事件,我可能会使用类似于$('.login-form-input').focus(function() { $(this).parent().addClass('highlight'); }).blur(function() { $(this).parent().removeClass('highlight'); }); 的东西,因为这只会在确切的input 焦点上触发。
      • 感谢您的帮助!
      【解决方案6】:

      如果您想在输入处于活动状态时赋予边框颜色,您可以这样添加:

      .login-form-input:focus {
        border:1px solid blue;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 2011-09-29
        • 2012-07-03
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        相关资源
        最近更新 更多