focus-within的使用详解

这次给大家带来focus-within的使用详解,使用focus-within的注意事项有哪些,下面就是实战案例,一起来看一下。

CSS的世界真是一个神奇的世界。可能众多前端开发者听说过 :focus 并未听说过 :focus-within 。那么 :focus-within 是什么鬼。这篇文章,我们就说说 :focus-within 这个东东。

:focus-within是什么

在CSS中 :focus-within 是一个伪类,现在已经被列入到CSS选择器中(CSS Level 4 selector)。他就像你知道的 :focus 或者 :hover 。 :focus-within 能非常方便处理获取焦点状态。当元素本身或其后代元素获得焦点时, :focus-within 伪类的元素就会有效。

如果文字不好理解,咱们先来看一个简单的示例:

登录后复制

上面是一个简单的表单,有一个 input 表单控件。

.form-group *:focus {    background: yellow;    color: #000;}.form-group {    padding: 10px;    border: 3px solid transparent}.form-group:focus-within {    border-color: #000;}

登录后复制

上面的示例中, .form-group 得到焦点的时候, border-color 颜色换成了 #000 。但这不意味着接收键盘的焦点,那是因为

不一定能得到键盘的焦点,没有设置 tabindex 。或者说 p 中的链接或 input 元素接收焦点,那么 .form-group 元素将改变边框颜色。

看到上面的示例,是不是觉得好神奇。在以前要实现类似的效果,我们需要借助JavaScript的脚本。通过 .form-group 的后代元素的鼠标或键盘事件,然后给其父元素(或祖先元素,添加对应的样式)。

:focus-within的使用场景

:focus-within 非常强大,主要是由于伪类在它的任何元素获取到焦点时都将被激活。当元素包含许多子组件的元素上谨慎使用该伪类。

有了 :focus-within 之后,有一些常见的交互行为就变得非常的简单,特别是以前需要JavaScript的键盘事件的交互行为,我们都可以使用 :focus-within 来替代。

接下来,咱们来看一些 :focus-within 的常见示例。

表格行的高亮

一个常见的例子,就是表格行高亮的行为,即鼠标悬浮在表格的行时,颜色变得高亮。这样的交互样式可以帮助有视力阻碍的用户能更好的阅读一个复杂的表格或长表格。因为突出的显示,可以使用这些用户更容易地跟踪他们当前正在阅读的表格行。以前常常实现的方式是通过 :hover 来改变表格行的样式,这种方案对于正常的用户而言是一件易事,但如果你的用户对于一些操作鼠标有阻碍的用户而言,那 :hover 就有点蛋疼了。如果你是追求完美的话,你可能会通过JavaScript的键盘事件给表格行添加样式。

那么有了 :focus-within 之后,我们就可以和JavaScript说拜拜。我们可以这样来设置样式:

上面的示例展示了如何使用 :focus-within 来突出表格的整个行。如果在特定的表格行中有一个可获取焦点的可用元素,这里所指的是通过键盘获取焦点。比如上面这个示例,表格中有 元素,你懂的, a 元素是可以通过键盘获取焦点的。

这个时候你只需要在样式中添加:

tbody tr:focus-within,tbody tr:hover {    background: rgba(lightBlue, .4);}

登录后复制

下拉菜单

下拉菜单是我们最常的Web组件之一。当我第一次看到 :focus-within 这个伪类时,我想到的第一个使用场景就是下拉菜单。

上面的示例中,JavaScript是用来跟踪用户键盘焦点在一个导航下拉菜单中的。如果JavaScript检测到键盘焦点在一个链接上,那么给 .navlist_drop 添加一个 .has-focus 类。当 li 有了 .has-focus 类时,他的子元素就会显示出来,也就是下拉菜单会显示出来。

这样的效果,我们可以直接通过 :focus-within 来取代JavaScript脚本的功能。使用 .navlistdrop:focus-within 替代 .navlistdrop.has-focus 。当你操作键盘,让下拉菜单项获得焦点时,就会显示下拉菜单。

.navlist a:focus + .navlistdrop,.has-drop:hover .navlistdrop,.navlistdrop:focus-within {    opacity: 1;    transform: translateY(0px);    height: auto;    z-index: 1;}

登录后复制

Off-screen Nav

Off-screen Nav是在移动端上常见的一个效果。那么这个效果我们也可以通过 :focus-within 来实现。详细代码可以看下面这个示例:

浏览器兼容性

:focus-within 虽然很有意思,但很多同学担心它的兼容性。通过Caniuse,我们可以看到浏览器对其支持度情况:

总结

如果你熟悉 :focus 并不奇怪,但是你知道 :focus-within 的话,说明你在不断的关注CSS相关的新特性。当然这个属性再次刷新了CSS的世界真是奇怪。如果你感兴趣的话,不仿自己写写Demo。你会喜欢上这个属性的。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

css3文字渐变动画

css3做出半圆弧线

css中sticker-footer布局如何使用

以上就是focus-within的使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2899154.html

(0)
上一篇 2025年3月10日 23:42:36
下一篇 2025年2月24日 03:03:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • box-shadow的阴影效果如何使用

    这次给大家带来box-shadow的阴影效果如何使用,使用box-shadow阴影效果的注意事项有哪些,下面就是实战案例,一起来看一下。 大家都知道box-shadow是h5新增属性,用来实现盒子边缘有阴影的效果,但经常会看见许多场景里阴影…

    2025年3月10日 编程技术
    200
  • CSS双飞翼布局的详解

    这次给大家带来CSS双飞翼布局的详解,实现CSS双飞翼布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局,就是两端固定宽高,中间自适应的三栏布局 先来张图,左边和右边的灰色块是固定宽高的,中间绿色的区域是宽高自适应 方式一:…

    2025年3月10日
    200
  • 双飞翼布局与圣杯布局图文详解

    这次给大家带来双飞翼布局与圣杯布局图文详解,使用双飞翼布局与圣杯布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局和圣杯布局都是实现两边固定中间自适应的三栏布局的方式,最近在整理三栏布局实现方式的笔记,决定但拉出来一篇,记一…

    2025年3月10日 编程技术
    200
  • css中属性值继承如何使用

    这次给大家带来css中属性值继承如何使用,使用css中属性值继承的注意事项有哪些,下面就是实战案例,一起来看一下。 继承:html元素可以从父元素那里继承一部分css属性,即使当前元素没有定义该属性。 1.css可以和不可以继承的属性 不可…

    编程技术 2025年3月10日
    200
  • BFC模式详解

    这次给大家带来bfc模式详解,使用bfc模式的注意事项有哪些,下面就是实战案例,一起来看一下。 详解BFC【 block formatting context】 BFC这个东西说常见的话你可能不觉得,但是你肯定会常用到,也许你在用的时候也没…

    编程技术 2025年3月10日
    200
  • css中px、em和rem使用详解

    相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下…

    编程技术 2025年3月10日
    200
  • linear-gradient的使用详解

    这次给大家带来linear-gradient的使用详解,使用linear-gradient的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gr…

    2025年3月10日 编程技术
    200
  • 动态加载css详解

    这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法注意事项来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公…

    编程技术 2025年3月10日
    200
  • not()选择器的使用

    这次给大家带来not()选择器的使用,使用not()选择器的注意事项有哪些,下面就是实战案例,一起来看一下。 本文中用到的是CSS3新增的:not()伪类选择符,可以匹配不含有选择符的元素。假定有个列表,每个列表项都有一条底边线,但是最后一…

    编程技术 2025年3月10日
    200
  • Vue的todoMVC使用详解

    这次给大家带来Vue的todoMVC使用详解,Vue的todoMVC使用注意事项有哪些,下面就是实战案例,一起来看一下。 这个示例是模仿官网示例样式和功能用我自己的方式写的,基本上没有看官网的源码,只参考自定义指令。让我们一步步来探讨一下。…

    2025年3月10日
    200

发表回复

登录后才能评论