CSS样式的注意点小结
1. CSS选择器原则: Right To Left
目前CSS、跟jquery的选择器的原则都是“right to left”(因为两者的选择器引擎相同 都使用Sizzle), 即选择元素是 从右向左匹配的(过滤不匹配的元素,而非 查找匹配的元素)。
如$("input.on")
中,选择器会先 匹配 .on
的节点(即过滤掉非.on的叶子节点),再去向上匹配 input
tag(过滤掉 非input的元素)。
因此,$(“.on”) 会比 $(“input.on”) 更快,
如果要匹配的class不存在其他tag的话,建议前面最好不要加tag恩。
测试结果如下:jsperf
参考:
- Writing Efficient CSS Universal_Rules
- Why do browsers match CSS selectors from right to left?
- 为什么排版引擎解析 CSS 选择器时一定要从右往左解析?
2. CSS position布局——从父规则
同级父节点z-index相同,则无论子元素z-index多大都没用。只遵循父节点的层级。
如果 A, B 节点都定义了 position:relative, A 节点的 z-index 比 B 节点大, 那么 A 的子节点必定覆盖在 B 的子节点前面.
如果所有节点都定义了 position:relative, A 节点的 z-index 和 B 节点一样大, 但因为顺序规则, B 节点覆盖在 A 节点前面. 就算 A 的子节点 z-index 值比 B 的子节点大, B 的子节点还是会覆盖在 A 的子节点前面.
很多人将 z-index 设得很大, 9999 什么的都出来了, 如果不考虑父节点的影响, 设得再大也没用, 那是无法逾越的层级.
范例: CSS z-index not working (position absolute)
解决: 把父节点 absolute的 z-index去掉,按默认的来。
3. radio \ checkbox 自定义样式
目前很多浏览器默认的radio、checkbox按钮样式不同,为了更美观,很多选择了字体图标来做效果。
而很多人直接使用 javascript监听事件
+ html class
,来控制样式的选中效果。
其实没有必要那么复杂。CSS3中新增:checked
属性,即可解决。
例子如下:
html:
css:
实现原理: 隐藏原有Input样式,直接用label 来代替 Input, 通过css checked属性,改变Label的样式。
4. 长链接换行问题
如果你遇到下述这种问题,如何解决长链接不换行呢?
其实,你只需要在a
标签中,添加以下CSS属性即可:
效果如下:
有些人会建议用 word-break: break-all
,但两者会有些区别:
word-break: break-all
会针对所有语言的文字,都会断行,W3C注明是针对CJK(中文、韩文、日文)做的,
如果你只想针对URL链接断行,word-wrap
就够用了。