css - 当使用 CSS/SCSS 聚焦其中的输入时,我可以在元素之后更新父元素的样式吗?

标签 css input sass css-selectors pseudo-element

当元素内部的输入获得焦点时,我可以在元素之后更新父元素的样式吗?

设计意味着我需要使用一个 after 元素而不是用边框设置输入样式,但我需要在输入聚焦时更新 after 元素的背景颜色。我可以只使用 SCSS/CSS 来做到这一点吗?

HTML

<div class="subscribe__wrapper">
    <div class="subscribe__input">
        <input class="mr-medium" type="email" id="fields-emailAdress" required name="fields[email]"
            placeholder="Your email address">
    </div>
    <button class="next btn-rounded btn-rounded--small ml-min">
    </button>
</div>

SCSS

.subscribe__wrapper {
position: relative;
&:after {
      content: '';
      left: 0;
      right: 0;
      bottom: 0;
      height: 2px;
      background: $border-color;
      position: absolute; 
    }
}

.subscribe__wrapper input:focus {
  .subscribe__wrapper & {
     &:after {
          background: red;
        } 
    }
}

最佳答案

使用纯 CSS 和您当前的标记,不,这是不可能的。 See this related question .

不过,正如该问题的已接受答案中所建议的,您可以修改标记以在输入后添加另一个元素,然后使用同级选择器(+~) 当输入处于焦点时。这个新元素将具有背景,而不是将其放在 .subscribe__wrapper 的伪元素上。

例如:

.subscribe__wrapper {
  position: relative;
  z-index: 0;
  padding: 12px;
  border: 2px solid blue;
}

.background {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
}

.subscribe__wrapper input:focus + .background {
  background-color: red;
}
<div class="subscribe__wrapper">
  <div class="subscribe__input">
    <input class="mr-medium" type="email" id="fields-emailAdress" required name="fields[email]" placeholder="Your email address">
    <div class="background"></div>
  </div>
  <button class="next btn-rounded btn-rounded--small ml-min"></button>
</div>

关于css - 当使用 CSS/SCSS 聚焦其中的输入时,我可以在元素之后更新父元素的样式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351612/

相关文章:

html - 我在移动设备上的导航向下推到两行,但在桌面上它很好

html - Bootstrap 3 - 与 pull-right 一起垂直对齐

javascript - 当 chrome 要求我翻译页面时,避免调整 Jquery 事件的大小

java - 多个拖放文件输入 - 添加下一个文件和最大文件限制

html - 是否可以使用纯 CSS 更改滚动上的此 div 颜色?

css - 将自定义行标题添加到 ui-grid

javascript - input.setAttribute ('type' , 'checkbox' );浏览器漏洞

javascript - 如何在javascript函数中使用输入框的值

sass - 为什么SCSS会在atom中编译错误?

vue.js - Webpack-简单 : SASS variables don't get translated into their values on the page