如何根据伪级的孩子为父母定型?

发布于 2025-01-23 15:34:30 字数 552 浏览 1 评论 0原文

我有一个包含输入标签的跨度,并且我声明了一个:在跨越造型的伪元素之后。

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}


/*
span::after that contains an input:invalid {
  content: 'invalid';
  color: red;
}
*/
<span>
  <input type="number" min="2" />
</span>

我想随时随时更改伪元素的颜色,输入值无效。

无论如何,是否有纯CSS来做到这一点?还是我必须使用一些JavaScript?

I have a span containing an input tag, and I have declared an :after pseudo-element in the span for styling it.

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}


/*
span::after that contains an input:invalid {
  content: 'invalid';
  color: red;
}
*/
<span>
  <input type="number" min="2" />
</span>

I want to change the color of the pseudo-element anytime the input value is invalid.

Is there anyway to do that with pure CSS? Or do I have to use some JavaScript?

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

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

发布评论

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

评论(1

若言繁花未落 2025-01-30 15:34:30

仅在CSS中使用关系pseudo-class : has() 当前是在所有现代浏览器中都支持

您将这样实施:

span:has(input:invalid)::after {
  color: red;
}

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}

span:has(input:invalid)::after {
  content: 'invalid';
  color: red;
}
<span>
  <input type="number" min="2" />
</span>

支持较旧的浏览器:

这是如何调整标记的示例:

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}

input:invalid+span::after {
  content: 'invalid';
  color: red;
}
<input type="number" min="2" />
<span></span>

Styling a parent element based on a child is only possible in CSS with The Relational Pseudo-class :has() which is currently supported in all modern browsers.

You would implement it like this:

span:has(input:invalid)::after {
  color: red;
}

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}

span:has(input:invalid)::after {
  content: 'invalid';
  color: red;
}
<span>
  <input type="number" min="2" />
</span>

To support older browsers:

Here is an example of how you could adapt your markup:

span::after {
  content: 'valid';
  color: green;
}

input:invalid {
  outline: 2px solid red;
}

input:invalid+span::after {
  content: 'invalid';
  color: red;
}
<input type="number" min="2" />
<span></span>

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