游戏攻略网
当前位置: 首页 游戏攻略

css3标签设置(你知道css3的focus-within选择器吗)

时间:2023-05-23 作者: 小编 阅读量: 1 栏目名: 游戏攻略

可以看到,伪类的作用是为了给不同状态的标签添加样式。还要注意的是典型的CSS继承规则适用于插入的元素。focus-within的范围更广,它表示一个元素获得焦点,或该元素的后代元素获得焦点。感应用户聚焦区域利用focus-within可以增加用户的感知区域,让用户获得更好的视觉反馈。

伪元素和伪类

说到这个,我们先回顾一下,伪类选择器伪元素选择器,老版的浏览器没有严格区分下面 2 种写法。

a:after{}a::after{}

在新的标准中,单冒号(:)用于 css3 伪类,双冒号(::)用于 CSS3 伪元素,我们平时开发时可以注意一下,当然大多数浏览器两种写法都能识别。

常见伪元素和伪类伪类

:link, :visited, :hover, :active, :focus, :first-child, :last-child, :nth-child, :nth-last-child, :not()

伪类一般用于一个元素的某个状态,比如说鼠标悬浮,按钮点击,链接已经访问,输入框聚焦等,还用于选择某个特殊元素,比如说多个元素中的第一个,最后一个,偶数,奇数等。其作用是对某个符合以上条件的元素添加一些样式。

a:hover{text-decoration: underline;}a:active {color: blue;}a:link {color: red;}a:visited {color: green;}

上面的例子展示了一个a标签在不同状态下的不同样式,在未点击链接之前,a标签呈现红色字体(link),在鼠标移到a标签上是,a标签出现下划线(hover),在鼠标按下的时候,a标签变为蓝色(active),点击完了之后,a标签变为绿色(visited)。可以看到,伪类的作用是为了给不同状态的标签添加样式。

伪元素

::first-letter, ::first-line, ::before, ::after

在内容模块中提到,伪元素如果没有设置“content”属性,伪元素是无用的。使用伪元素插入的内容在页面的源码里是不可见的,只能在 css 里可见。插入的元素在默认情况下是内联元素(或者,在 html5 中,在文本语义的类别里)。因此,为了给插入的元素赋予高度,填充,边距等等,你通常必须显式地定义它是一个块级元素。还要注意的是典型的 CSS 继承规则适用于插入的元素。例如,你有字体系列黑体,宋体,无衬线字体应用到 body 元素里,然后伪元素会像其他元素一样继承这些字体系列。伪元素不会自然继承自父元素(如 padding margins)的样式。你的直觉是 :before 和 :after 伪元素可能是插入的内容会被注入到目标元素的前或后注入。其实不是这样的,注入的内容将是有关联的目标元素的子元素,但它会被置于这个元素的任何内容的“前”或“后”。

<head><style type="text/css">p.box::before {content: "#";border: solid 1px black;padding: 2px;margin: 0 10px 0 0;}p.box::after {content: "#";border: solid 1px black;padding: 2px;margin: 0 10px 0 0;}</style></head><body><p >Other content.</p></body>

运行效果:

可以看到,我们html部分只写了一个元素,但是我们利用伪元素渲染出来 3 个部分,前中后,这里我们可以认为,伪元素一般用来辅助html的元素。但在内容页面的源码又看不到,利用伪元素可以实现很多神奇的功能,这里不做具体讲解,后面再出具体教程。

神奇的伪类:focus-within

言归正传,回到我们的主角focus-within,我们知道,伪类focus是指一个元素获得焦点时,为其添加样式。focus-within的范围更广,它表示一个元素获得焦点,或该元素的后代元素获得焦点。划重点,它或它的后代获得焦点。这也就意味着,它或它的后代获得焦点,都可以触发 :focus-within。

这个属性有点类似 Javascript 的事件冒泡,从可获焦元素开始一直冒泡到根元素 html,都可以接收触发 :focus-within 事件,类似下面这个简单的例子这样:

<html><div ><div ><divtabindex="1">button</div></div></div><div >HTML</div><style>div {box-sizing: border-box;}.button,.g-children {width: 100%;height: 100%;padding: 20px;border: 1px solid;}.g-father {width: 200px;height: 200px;padding: 20px;border: 1px solid;}.g-body {margin-top: 20px;width: 200px;border: 1px solid;}.g-body:focus-within {background-color: #5daf34;}.g-father:focus-within {background-color: #3a8ee6;}.g-children:focus-within{background-color: #2c3e50;}.button:focus-within {background-color: #606266;color: red;}</style></html>

运行结果:

可以看到,在button获得焦点时,因为冒泡的原因,它的父级元素全部应用了:focus-within的样式。这里值得注意的是,正常的div是不能获得焦点的,设置 tabindex 属性才能获取焦点,同时按键盘 Tab 键也可让其获取焦点,其中 tabindex 的值越小在 tab 键切换的时候就会首先聚焦。根据:focus-within的特性,我们在不利用 js 的情况下,实现很多实用性的功能。

感应用户聚焦区域

利用focus-within可以增加用户的感知区域,让用户获得更好的视觉反馈。

<html><div ><input type="text" placeholder="user name"><input type="text" placeholder="code"></div><style>.g-container {margin-top: 10vh;}.g-container {padding: 10px;width: 30vw;border: 1px solid #eee;transition: all .3s;text-align: center;}.g-container:focus-within {transform: translateY(-4px);box-shadow: 0 0 10px #ddd;border-color: hsl(199, 98%, 48%);}.g_input {border: none;width: 20vw;padding: 15px;font-size: 18px;box-sizing: border-box;border: 1px solid #ddd;overflow: hidden;transition: 0.3s;box-shadow: 0 0 0px #ddd;&:focus {box-shadow: 0 0 10px #ddd;border-color: hsl(199, 98%, 48%);}}</style></html>

可以看到在没有任何javascript逻辑控制情况下,用focus-within就实现了上面的效果。

实现离屏导航

我们先看一下效果:

可以看到是一个很棒的导航效果,而且真个实现没有使用javascript控制,这无疑在性能和体验上都有不少提升。具体源码可以看下面的地址:https://codepen.io/dannievinther/pen/NvZjvz

实现 B 站,掘金等网站登录动效切换

我们平时可能注意到了,B 站和掘金在用户输入密码的时候,上面的图片是捂着眼睛的,这里我们也可以用focus-within来实现。

<html><div ></div><div ><h2>登录</h2><div ><input maxlength="64" placeholder="请输入手机号或邮箱" ><img src="https://b-gold-cdn.xitu.io/v3/static/img/greeting.1415c1c.png" ></div><div ><input type="password" maxlength="64" placeholder="请输入密码" ><img src="https://b-gold-cdn.xitu.io/v3/static/img/blindfold.58ce423.png" ></div><img src="https://b-gold-cdn.xitu.io/v3/static/img/normal.0447fe9.png" ></div><style>.g-wrap {position: fixed;top: 0;left: 0;bottom: 0;right: 0;background: rgba(0, 0, 0, 0.3);}.g-container {position: relative;width: 318px;margin: 100px auto;height: 370px;padding: 20px;box-sizing: border-box;background: #fff;z-index: 10;}.g-container h2 {font-size: 20px;font-weight: bold;margin-bottom: 30px;}.g-container input {outline: none;padding: 10px;width: 100%;border: 1px solid #e9e9e9;border-radius: 2px;outline: none;box-sizing: border-box;font-size: 16px;}img {position: absolute;top: -20%;left: 50%;width: 120px;height: 95px;transform: translate(-50%, 0);}.g-username {margin-bottom: 10px;}.g-username img {display: none;width: 120px;height: 113px;}.g-username:focus-within ~ img {display: none;}.g-username:focus-within input {border-color: #007fff;}.g-username:focus-within img {display: block;}.g-password {margin-bottom: 10px;}.g-password img {display: none;width: 103px;height: 84px;top: -15%;}.g-password:focus-within ~ img {display: none;}.g-password:focus-within input {border-color: #007fff;}.g-password:focus-within img {display: block;}</style></html>

可以看到,在不适用js的情况下,也能实现动态切换图片的效果,但是还是有一些局限,dom排列只能是父级向上,不能把元素放在focus元素的子元素里面。所以没有js灵活,但是代码量更少。

focus-within 兼容性

因为 css3 的新增特性一直存在兼容问题,这里查询了一下它的兼容性,看到红色区域还是不算太惨淡,出来 ie,其他浏览器基本都支持了。

所有的源码都可以在我的仓库地址:https://github.com/jackzhujie/vue-study个人博客:http://blog.aizhifou.cn文章参考链接:https://www.cnblogs.com/coco1s/p/9406413.html

学习如逆水行舟,不进则退,前端技术飞速发展,如果每天不坚持学习,就会跟不上,我会陪着大家,每天坚持推送博文,跟大家一同进步,希望大家能关注我,第一时间收到最新文章。

,
    推荐阅读
  • 床架异响怎么解决(床架异响的解决方法)

    跟着小编一起来看一看吧!床架异响怎么解决一般床发响都是发生于床桓部位,家里有短丝袜的,将丝袜直接套在床桓两段,再安装回去,这样就没有床桓与床板之间的干摩擦了。床桓身上用蜡烛涂抹几下,减小床桓与床板的摩擦。如果家里有女士,长筒丝袜是最佳的选择,直接每根跟床桓套一双长丝袜,省去涂抹蜡烛。

  • 干莪术的功效与作用(干莪术有哪些功效与作用)

    破血行气,消积止痛用于血瘀腹痛、肝脾肿大、心腹胀痛,积聚,妇女血瘀经闭,跌打损伤作痛饮食积滞,今天小编就来说说关于干莪术的功效与作用?下面更多详细答案一起来看看吧!用于血瘀腹痛、肝脾肿大、心腹胀痛,积聚,妇女血瘀经闭,跌打损伤作痛饮食积滞。行气止痛,破血消积:用于气滞血瘀之经闭、胸胁痛、腹痛及症瘕肿块等。

  • 最强蜗牛蜗牛兵种攻略(一起来看一下吧)

    由于危害兵种四围非常大的一个要素来自你的贵重!这一危害也是非常大的,如果一百个兵都是不一样的,加成十分丰厚。某功略强烈推荐秦始皇兵马俑也是由于秦始皇兵马俑相匹配白马王子小伙伴们,一般来说全是小伙伴里级别最大的。但秦始皇兵马俑加土抗的专业技能真是太坑,本人不建议升这东西,还比不上再练某些的小伙伴们,例如李建刚,加时空穿梭机生产量,兵种是不一样的牛头人,带专业技能加回应速率,性价比高还不错的。

  • 又简单又好吃的汉堡做法(跟饭店大厨学的汉堡的做法)

    又简单又好吃的汉堡做法?以下内容大家不妨参考一二希望能帮到您!又简单又好吃的汉堡做法准备所有食材除黄油以外,全部倒入海氏M5轻音厨师机中先低速搅打至面团干湿混合,切换中高速步骤待面团扩展阶段,加入黄油和盐步骤搅打至完全阶段,取出面团等分为六份,静置十五分钟,排气滚圆,粘水滚芝麻。发酵至两倍大预热烤箱180℃烤18分钟出现满意的表面上色即可

  • 网络语和古诗词(网络流行语VS古诗词)

    粗缯大布裹生涯,腹有诗书气自华。悟已往之不谏,知来者之可追;实迷途其未远,觉今是而昨非。——陶渊明《饮酒》10.愿历尽千帆,归来仍是少年。劝君莫惜金缕衣,劝君惜取少年时。此情可待成追忆,只是当时已惘然。——陶渊明《饮酒·其五》22.友尽反是不思,亦已焉哉。——齐己《闭门》24.宅女莺衔蝶弄红芳尽,此日深闺那得知。全国多地要降温!想获取更多深圳本地办事指南和吃喝玩乐新资讯,敬请关注深圳本地宝!

  • 心情太重想释放的句子(心情太重想释放的句子推荐)

    人生没有如果,只有后果和结果。成熟,就是用微笑来面对一切小事。一个人若要有所作为,就必须同对手竞争并超越对手。只有与强者竞争,才能不断拓展生存的空间,才能成为真正的强者。很容易受到伤害,但是内心一直想要顽强,却总是轻易被打败。不经意间发现,人生最曼妙的风景是内心的淡定与从容,头脑的睿智与清醒。不要在事情开始的时候畏首畏尾,不要在事情进行的时候瞻前顾后,唯有如此,一切才皆有可能。

  • 胃息肉如何预防和治疗(为啥会患胃息肉)

    胃息肉是一种常见的胃部疾病,可单发,也可有多枚、甚至十几到几十枚。有些胃息肉患者会有腹部胀满、恶心、呕吐等消化道症状,属非特异性症状。若出现一些胃肠道症状,不能忽视,很可能是胃息肉在作祟,需及早诊治。胃息肉发生癌变受到很多因素的影响,如息肉的大小、类型、形态、数目、部位、年龄以及地区等。故发现胃息肉不要过度焦虑,需要专业医生进行综合判断。

  • 梦到被狗咬是什么意思(梦到被狗咬是什么意思好不好)

    狗的特点是对主人忠心,对敌人凶狠它常常被用象征道德、自我约束、自我要求和纪律或者精神分析心理学所说的超我,今天小编就来聊一聊关于梦到被狗咬是什么意思?它常常被用象征道德、自我约束、自我要求和纪律或者精神分析心理学所说的超我。梦见狗咬主人失财凶,将于朋友发生争夺,可能会有被欺诈杀害危险,是破费大笔钱财的前兆。梦见被狗咬,将会受到仇人的攻击,或思重病。

  • 2022大连金石滩花灯会门票在哪买 大连开发区2021春节金石滩灯会

    园区地址:大连金石滩植物园售票口验证换票入园特别提示:每张券号对应一位成人使用:12周岁以下的儿童免费,必须有成人陪同,每位成人携带免费儿童不得超过2位;70周岁以上的老年人;医务工作者凭执业证;导游持国导证;残疾人、现役军人、伤残军人、消防官兵、军队离退休干部免费;盲人、双下肢残疾人、中度智力残疾人免费,并允许一名陪护人员免费进入。以上均需持有效证件。

  • 玉米种子品种介绍(关于玉米种子品种介绍)

    综合适应性强,种植区域广泛,在我国东华北、西北、西南、黄淮海四大玉米主产区均可种植。适宜在我国东华北、黄淮海三大玉米主产区种植,也适合在陕西、河北、安徽、山东、河南等省种植。花丝红色,果穗筒型,穗长18.6厘米,穗行数16~18行,适宜在东华北、西北、黄淮海三大玉米主产区种植,也可在黑龙江省种植。