视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
深入了解CSS伪类选择器的用法(代码示例)
2020-11-02 22:08:08 责编:小采
文档


本篇文章给大家带来的内容是关于深入了解伪类选择器的用法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

前言

?过去零零星星地了解和使用:link、::after和content等伪类、伪元素选择器,最近看书时发现这方面有所欠缺,于是决定稍微深入学习一下,以下为伪类部分的整理。

伪类

?伪类选择器实质上是让设计师可以根据元素特定的状态,设置不同的视觉效果。具体有:link、:visited、:hover、:active、:focus、:focus-within、:target、:root和:checked。

HTMLAnchorElement的4大经典伪类

:link,用于设置链接初始状态时的样式;

:visited,用于设置链接被点击过后的样式;

:hover,用于设置鼠标悬停在链接上方时,链接的样式;

:active,用于设置鼠标按键按下,但未释放时,链接的样式。

想必各位都和我一样,最初接触到的就是上述4个伪类了吧?!而且还死机硬背它们的设置顺序(LVAH)吧,哈哈。

设置当前目标元素样式

?还记得URL中的井号吗?从井号(#)开始到URL的末尾称为URL的hash或fragment,用于定位页面内某项资源。假设现在页面存在<h3 id="title">Target</h3>的元素,那么只要地址栏输入#title浏览器就会不断滚动(滚动不一定存在补间动效)直到元素h3#title位于可视区的特定位置。(注意:请不要和UI Routing混为一谈)
?而上述这个被定位的页面资源,被称为目标元素或当前活动元素!可通过:target设置其样式。
?兼容性:IE9开始支持。

示例:

// 当前URL为http://foo.com#1
:target {
 color: red;
}
.title{
 color: blue;
 
 &:target{
 border: solid 1px red;
 }
}

.title{I'm not target element.}
.title#1{Yes, I'm.}

设置元素获得焦点时的样式

:focus用于设置元素处于focus状态下的样式。
兼容性:IE8开始支持。
那么哪些元素支持focus状态呢?那要先弄清楚通过哪些操作可能实现focus。
它们分别是:

鼠标点击;

Tab键;

通过JavaScript的HTMLElement.prototype.focus()方法。

那么传统上支持focus状态的元素必定是a、button、input、select和textareas.
而HTML5中增加当元素设置了contenteditable或tabindex属性时,该元素支持focus状态。
也就是符合以下选择器的元素均支持focus状态。

a,button,input,select,textarea,[contenteditable],[tabindex]

注意:若tabindex属性值小于0,则无法通过Tab键获得焦点。但可以通过鼠标点击 或 脚本时元素获得焦点。

JS获取当前得到焦点的元素

/* 
 * 加载完成时默认返回body
 * 若某元素获得焦点时,则返回该元素
 */
document.activeElement :: HTMLElement

另外还有一个让人误会的属性

// 用于检测文档是否得到焦点,即用户是否正在与页面交互
// 页面仅仅位于屏幕可视区域,而用户没有与之交互时返回false。
document.hasFocus :: Void -> Boolean

设置子元素获得焦点时,该元素的样式

:focus-within,用于设置当子元素处于focus状态时,该元素的样式。
兼容性:Chrome63开始支持。

示例:二次确认密码时,密码框高亮

.form-control{
 &:focus-within > input{
 &:focus {
 border: solid 1px skyblue;
 }
 
 &:not(:focus){
 border: solid 1px orange;
 }
 }
}

.form-control>input.pwd[type=password]+input.confirm-pwd[type=password]

其他

:root,用于设置<html>元素的样式,从IE9开始支持。

:checked,用于设置单选和复选控件被选中的样式,从IE9开始支持。结合伪元素::before和content属性可以实现灵活高效的自定义单选和复选控件。

:empty,用于设置没有子节点的元素的样式。p{ }为存在TEXT_NODE子节点的元素,而p{}则为没有子节点的元素。

:not,作为谓语表达取反的语义。

:placeholder-shown,用于设置元素placeholder显示时的样式。

下载本文
显示全文
专题