一次 outline 去除经验(非继承属性,看着像继承)
情况描述:
目前维护的老项目是通过 easyui 生成的 html,嵌套结构非常多,当点击元素后,会有个边框???非常影响页面美观,这是啥迷惑点击交互???
经验告诉我,这是 css 的 outline 属性带来的边框,而在 chrome 控制面板里该元素的 styles 列表中并没有设置 outline
我的开发经验告诉我,这个列表中会把所有设置过的、影响到此元素的 css 样式列出来,即使是设置到父级上的,然而我搜索 outline 他并没有出现,感觉像是默认继承似的?但定制过的继承样式也会出现在这个列表里呀...
并且我在给元素加上 outline: none
之后,“时而有效,时而无效”(比较内部的元素有效,外层一点的好像无效),看到页面效果的我一脸懵逼...这该咋去调?
分析探索之路:
经过一顿搜索,得知 outline 是非继承属性,故给元素加 outline: none
只对当前(css 选择器匹配到的)元素生效,即我在 chrome 控制台调试样式的时候顺手添加的 outline: none
只加在了当前元素上,内部(特别是与其大小位置一样的)元素的 outline 并没有重置到(并没有像“预期”的那样继承)
然而平时我写 span 标签进行交互的时候并没有发现其有 outline 边框,那这家伙哪来的?咋还这一片 dom 结构里都有这个 outline 边框呢?
点击触发?莫非这玩意儿和我平时处理调试 :hover 一样?要打个断点?这是哪个状态?:active、:hover、:visited
都不太像... :focus
???
最后通过 chrome 控制台,我给元素设置了 :focus
监听,然后样式栏里搜索,才看到有个范围这么大的样式设置在这儿...
:focus {
outline: -webkit-focus-ring-color auto 1px;
}
难怪非继承属性 outline 会这么像继承?好家伙...,不加范围的 css 选择器,直接改写全局样式...神操作...
ps:看来还是对于 css 选择器掌握的不够啊...没有第一时间反应过来
解决问题:
既然问题找到了,那肯定要解决的啊!
重置回来吧!前辈或者框架写这个样式肯定也是有原因的,为了不影响全局,我们只改变确定不要 outline 边框这块的样式,给 css 选择器加个前提,框定下样式的影响范围,那么受这个范围控制的这一片就不会再出现多余的 outline 边框了...
/* 给自身及子元素的 focus 去掉 outline 外边框 */
#showLayerResult:focus,
#showLayerResult :focus {
outline: none;
/* outline: unset; */
}
补充:
1.当然,非必要情况不推荐处理这个 outline,详情可以看下这篇文章:页面可用性之outline轮廓外框的一些研究
2.我前面写在 element.style{...}
里的样式属于行内样式,计算下来的选择器权重比 :foucs 的权重高,所以顶掉了 :focus 选择器设置的 outline: -webkit-focus-ring-color auto 1px;
,生效的是 outline: none
- 选择器权重可以了解下:CSS中选择器的权重值
3.希望大家写 css 样式的时候,加个选择器前缀,将样式的影响范围限制下,不要造成全局样式污染,这对后续项目维护会有很大的好处,减少不必要的麻烦
一次 outline 去除经验(非继承属性,看着像继承)的更多相关文章
- C++ //继承中的对象模型 //利用开发人员命令提示工具查看对象模型 //父类中所有非静态成员属性都会被 子类继承下去 //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承下去了
1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 /* 9 #include &l ...
- css继承属性与非继承属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- css中可继承和不可继承属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- javascript的函数、创建对象、封装、属性和方法、继承
转自原文javascript的函数.创建对象.封装.属性和方法.继承 一,function 从一开始接触到js就感觉好灵活,每个人的写法都不一样,比如一个function就有N种写法 如:functi ...
- HTML 继承属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- Unity属性的封装、继承、方法隐藏
(一)Unity属性封装.继承.方法隐藏的学习和总结 一.属性的封装 1.属性封装的定义:通过对属性的读和写来保护类中的域. 2.格式例子: private string departname; // ...
- css常用的可继承属性和不可继承属性
不可继承属性1.display2.text-decoration 添加文本样式3.list-style4.盒子模型属性(如padding系列,border系列,margin等,width,height ...
- Java学习笔记之——this关键字、非静态成员属性和静态成员属性的区别、类的加载顺序
一.this关键字 1.代表当前类的对象 2.通过” . ”调用成员属性和成员方法 3.通过this可以区分成员属性和参数 参数名和属性名相同的情况,默认是参数名 二.非静态成员属性和静态成员属性的区 ...
- css 可继承属性 display:inline-block 历史
1. css 可继承属性 1.1 font font-family:规定元素的字体系列font-weight:设置字体的粗细font-size:设置字体的尺寸font-style:定义字体的风格fon ...
随机推荐
- TypeScript enum 枚举实现原理
TypeScript enum 枚举实现原理 反向映射 https://www.typescriptlang.org/docs/handbook/enums.html enum Direction { ...
- Chrome & targetText
Chrome & targetText target text http://www.ruanyifeng.com/blog/2019/03/weekly-issue-47.html http ...
- Vue SSR in Action
Vue SSR in Action https://ssr.vuejs.org/ https://ssr.vuejs.org/api/ https://ssr.vuejs.org/guide/data ...
- Flutter & App
Flutter & App Android & iOS https://flutter.dev/docs/deployment/flavors https://flutter.dev/ ...
- The Filesystem Hierarchy Standard of Linux
The Filesystem Hierarchy Standard of Linux linux directory https://zhuanlan.zhihu.com/p/23862856 htt ...
- c++ 去掉字符串首尾空格
http://www.cplusplus.com/reference/regex/regex_replace/ #include <iostream> #include <regex ...
- Captain technology开发的新能源汽车强在哪里?
在新能源汽车飞速发展的这些年,Captain technology 认识到,要改变有状况,就要不断创新,调整新能源汽车发展路线.新能源汽车本质永远是汽车, Captain technology是在改变 ...
- 大小厂必问Java后端面试题(含答案)
你好,我是yes. 这个系列的文章不会是背诵版,不是那种贴上标准答案,到时候照着答就行的面试题汇总. 我会用大白话尽量用解释性.理解性的语言来回答,但是肯定没有比平时通过一篇文章来讲解清晰,不过我尽量 ...
- yaml配置和ini配置的数据源配置和数据获取
1.前言 关于yaml和ini的相关理论暂不做记录,不影响代码编写,百度即可. 2.关于配置文件的选择 yaml 和 ini 都使用过, 但是yaml更符合人类使用,已要弃用ini,后期各项目均采用y ...
- C++算法代码——卡片游戏
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?cid=1397&pid=2 题目描述 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始 ...