为什么 CSS :focus-within 如此神奇

2025-05-24

为什么 CSS :focus-within 如此神奇

这不是一个 :focus 选择器(当你聚焦于某个元素时,它会高亮显示)。
而是一个当元素内部某个元素获得焦点时触发的选择器。

在我们的例子中,我们将专注于表格(我知道你在那里做了什么😏)

最终结果将如下所示:

CSS 焦点选择器

HTML结构

至于我们的 HTML,我们将创建一个具有 2 个输入的表单。

<form>
  <label for="username">Username</label>
  <input type="text" name="username" />
  <br /><br />
   <label for="password">Password</label>
  <input type="password" name="username" />
</form>
Enter fullscreen mode Exit fullscreen mode

这就是我们这个特定演示所需要的全部内容。

CSS focus-in 伪选择器

:focus-within 是一个伪选择器,就像 :before 或 :after 一样。

让我们首先添加一些基本样式。

body {
  display: flex;
  min-height: 100vh;
  justify-content: center;
  align-items: center;
}
form {
  border: 1px dashed #333;
  padding: 25px;
}
Enter fullscreen mode Exit fullscreen mode

这将确保我们的表单绝对位于页面中央,并有一个小边框,以便稍后展示我们的效果。

现在我们想吸引用户的注意力到表单上,但是当他们聚焦输入字段时,使它变成一种奇特的颜色。

form {
  border: 1px dashed #333;
  padding: 25px;
  transition: background 0.3s ease;
}
form:focus-within {
    background: #f4d35e;
}
Enter fullscreen mode Exit fullscreen mode

这会将表单的背景更改为黄色。

您可以在 Codepen 中看到这一点。

让它变得更棒

是的,我们甚至可以通过使用 box-shadow hack 让它变得更棒,我们可以创建一种模态效果!

form {
  border: 1px dashed #333;
  padding: 25px;
  transition: all 0.3s ease;
  box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0);
}
form:focus-within {
  background: #f4d35e;
  box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0.7);
}
Enter fullscreen mode Exit fullscreen mode

我们创建一个 box-shadow,其大小为视口最大位置(宽度或高度)的 100%。初始情况下,它的不透明度为 0。

当我们有 :focus-within 时,我们将不透明度更改为 70%。

效果是类似灯箱的效果✨。

浏览器支持

:focus-within 选择器实际上有相当好的支持,考虑到 IE 已经死了。

CSS 焦点在选择器浏览器支持中

感谢您的阅读,让我们联系起来!

感谢您阅读我的博客。欢迎订阅我的电子邮件简报,并在FacebookTwitter上与我联系。

文章来源:https://dev.to/dailydevtips1/why-css-focus-within-is-amazing-27p8
PREV
15 个超棒的开发者家庭工作站
NEXT
使用原生 Web 共享 JavaScript API