整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端-html和css基础知识

TML(网页)

Web领域的一些基本概念。

WEB

Web(World Wide Web)叫全球广域网,俗称万维网(www)。

W3C

W3C(World Wide Web Consortium)叫万维网联盟,是国际最著名的标准化组织,制定了web标准。

WEB标准

一个网页包含了html元素 Css JavaScript,Html元素决定了网页结构,Css进行了修饰美化,JavaScript控制了交互行为和动态效果。

web标准包含了下面三个方面:

  • 结构标准(HTML):用于对网页元素进行整理和分类。
  • 表现标准(CSS):用于设置网页元素的版式、颜色、大小等外观样式。
  • 行为标准(JavaScript):用于定义网页的交互和行为。

HTML定义

Html不是一种编程语言,而是描述性的标记语言,主要作用是定义内容的结构。

2014年10月万维网联盟(W3C)完成了HTML5标准制定,是目前最新的HTM版本。

HTML5的出世,标志着web进入一个富客户端(具有很强的交互性和体验的客户端程序)时代,像APP网页,小程序都是HTML5的应用场景。

Html5新特性:

  • 用于绘画的 canvas 元素。
  • 用于媒介回放的 video 和 audio 元素。
  • 对本地离线存储的更好的支持。
  • 新的特殊内容元素,比如 article、footer、header、nav、section。
  • 新的表单控件,比如 calendar、date、time、email、url、search。

页面基本结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"> <!--字符集-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <meta name="Author" content="">
    <meta name="Keywords" content="关键词" />
    <meta name="Description" content="页面描述" />
    <title>页面标题</title>
</head>
<body>

</body>
</html>

关于viewport

viewport用户网页的可视区域,一个针对移动网页优化的页面 viewport meta 标签如下:

<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • width:控制 viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
  • height:和 width 相对应,指定高度。
  • initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
  • maximum-scale:允许用户缩放到的最大比例。
  • minimum-scale:允许用户缩放到的最小比例。
  • user-scalable:用户是否可以手动缩放。

常见元素

head区域元素:

meta title style link script base。

body区域元素:

  • div、section、article、aside、header、footer
  • p
  • span、em、strong
  • table、thead、tbody、tr、td
  • ul、ol、dl、dt、dd
  • a
  • form、input、select、textarea、button

元素分类

块级元素:每个元素都是独占一行

  • address – 地址
  • blockquote – 块引用
  • center – 举中对齐块
  • dir – 目录列表
  • div – 常用块级容易,也是css layout的主要标签
  • dl – 定义列表
  • fieldset – form控制组
  • form – 交互表单
  • h1-h6 – 标题
  • hr – 水平分隔线
  • isindex – input prompt
  • menu – 菜单列表
  • noframes – frames可选内容,(对于不支持frame的浏览器显示此区块内容)
  • noscript – )可选脚本内容(对于不支持script的浏览器显示此内容)
  • ol – 排序表单
  • p – 段落
  • pre – 格式化文本
  • table – 表格
  • ul – 非排序列表

行内元素:元素在同一行水平排列

  • a – 锚点
  • abbr – 缩写
  • acronym – 首字
  • b – 粗体
  • big – 大字体
  • br – 换行
  • em – 强调
  • font – 字体设定(不推荐)
  • i – 斜体
  • img – 图片
  • input – 输入框
  • label – 表格标签
  • s – 中划线(不推荐)
  • select – 项目选择
  • small – 小字体文本
  • span – 常用内联容器,定义文本内区块
  • strike – 中划线
  • strong – 粗体强调
  • sub – 下标
  • sup – 上标
  • textarea – 多行文本输入框
  • tt – 电传文本
  • u – 下划线
  • var – 定义变量

inline-block:元素可以排列在同一行显示,并且可以设置一些块元素属性

通过Css:display:inline-block 改变元素。

元素默认样式

很多元素都自带了默认样式,不同浏览器下默认样式表现不一致,为了统一或者满足一些需求我们需求将所有默认样式清空,这种处理方式又称为 Css Reset,比如:

*{
    margin: 0;
    padding: 0;
}

另外一种方案使用normalize.css,它将不同浏览器下的默认样式进行了统一,

https://github.com/necolas/normalize.css

CSS(层叠样式表)

Css的单位

html中的单位是像素px

绝对单位

  • in:英寸,1in = 2.54cm = 96px
  • pc:皮卡,1皮卡 = 1/16英寸
  • pt:点,1点 = 1/72英寸
  • px:像素,1点 = 1/96英寸

相对单位

  • em:font-size中相对于父元素的字体大小,在元素属性中使用是相对于自身字体大小
  • rem:根元素的字体大小,在元素属性中使用是相对于根元素字体大小
  • 1h:元素的line-height
  • vw:视窗宽度的1%
  • vh:视窗高度的1%
  • vmin:视窗较小尺寸的1%
  • vmax:视图大尺寸的1%

字体属性

属性:字体、行高、颜色、大小、背景、边框、滚动、换行、修饰属性(粗体、斜体、下划线)

p{
    font-size: 20px;        /*字体大小*/
    line-height: 30px;      /*行高*/
    font-family: PingFang SC;   /*字体类型:显示PingFang SC,没有就显示默认*/
    font-style: italic ;        /*italic表示斜体,normal表示不倾斜*/
    font-weight: bold;  /*粗体或写(400|500|600)*/
    font-variant: small-caps;  /*小写变大写*/
}

行高(line-height)

一般约定行高、字号都是偶数,这样保证它们的差一定偶数除2得到整数,如下图所示:

line-height

文本垂直居中

对于单行文本可以设置行高 = 盒子高度

对于多行元素的垂直对齐,我们可以使用vertical-align: middle属性,不过vertical-align 仅适用inline、inline-block 和 table-cell 元素。

vertical-align

vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
/* 指定长度值 */
vertical-align: 10em;
vertical-align: 4px;
/* 使用百分比 */
vertical-align: 20%;
/* 全局值 */
vertical-align: inherit;
vertical-align: initial;
vertical-align: revert;
vertical-align: unset;

文本属性

  • letter-spacing: 0.5em ; 单个字母之间的间距。
  • word-spacing: 1em; 单词之间的间距。
  • text-decoration: none; none 去掉下划线、underline 下划线、line-through 中划线、overline 上划线。
  • color:red; 字体颜色。
  • text-align: center; 文字对齐方式,属性值可以是:left、right、center、justify。
  • text-transform: lowercase; uppercase(大写)、lowercase(小写)capitalize(首字母大写)。
  • text-indent:10px; 文本首行缩进。
  • text-shadow:2px 2px #ff0000; 文字阴影效果。
  • white-space: normal; 设置元素空白处理,normal,nowrap,break-spaces。

Overflow属性

内容溢出处理

  • visible:默认值,多余的内容会全部显示出来。
  • hidden:超过元素的内容隐藏。
  • auto:内容超出显示滚动条。
  • scroll:Windows总是显示滚动条。Mac和auto 属性相同。

滤镜

filter:gray()

背景属性

  • background-color:#fff; 设置背景颜色。
  • background-image:url(img.png); 设置图像为背景。
  • background-repeat: no-repeat; no-repeat不要平铺,repeat-x横向平铺;repeat-y纵向平铺。
  • background-position:center top; 设置背景图片在容器的位置,top,bottom,left,right,center。
  • background-attachment:scroll; 设置背景图片随滚动条移动,scroll(跟随滚动),fixed(固定)。
  • background-origin:border-box; css3,border-box(背景相对于边框框定位),padding-box(背景相对于填充框定位),content-box(背景相对于内容框定位)。
  • background-clip:border-box; css3,背景裁切。
  • background-size:cover; css3,调整尺寸,contain(在不裁剪或拉伸图像的情况下,在其容器内尽可能大地缩放图像),cover(尽可能大地缩放图像以填充容器,必要时拉伸图像。),auto(在相应的方向上缩放背景图像,以保持其固有比例。)。

优先级

理解优先级很重要,有助于我们排查一些问题。浏览器将优先级分为两部分:HTML的行内样式和选择器的样式。

行内样式

行内样式是直接作用在元素,它的优先级高于选择器样式,使用!important可以提高样式表的优先级。

<div style="font-size:16px">
</div>

选择器样式

<style type="text/css">
    p{
      font-size: 16px;
    }
</style>
<link rel="stylesheet" href="style/app.css">

优先级规则如下:

  • 如果选择器的ID数量最多的胜出。
  • 如果ID数量一致,那么拥有最多类的选择器胜出。
  • 如果以上两次比较都一致,那么拥有最多标签名的选择器胜出。

优先级

我们通过下图这种标记方式,就可以判断出选择器的优先级。

优先级

两条经验法则

  1. 尽量不要使用ID选择器,因为它会大幅提升优先级。当需要覆盖这个选择器时,通常找不到另一个有意义的ID,于是就需要复制原来的选择器加上另一个类来让它区别于想要覆盖的选择器。
  2. 不要使用!important。它比ID更难覆盖,一旦用了它,想要覆盖原先的声明,就需要再加上一个!important,而且依然要处理优先级的问题。

基础选择器

  • 类型或标签选择器,匹配目标元素的标签名,如 :p,input[type=text],优先级(0,0,1)。
  • 类选择器,匹配class属性中有指定类名的元素,如:.box,优先级(0,1,0)。
  • ID选择器,匹配拥有指定ID属性的元素,如:#id, 优先级(1,0,0)。
  • 通用选择器(*),匹配所有元素 ,优先级(0,0,0)。

组合选择器

由多个基础选择器组合成的复杂选择器。

  • 后代组合器(单个空格()表示),比如 .nav li,表示li是一个拥有nav类的元素的后代。
  • 子组合器(>),匹配的元素是直接后代,.parent > .child。
  • 相邻兄弟组合器(+),匹配的元素紧跟在后面其它元素后面,div + p。
  • 通用兄弟组合器(~),匹配所有跟随在指定元素之后的兄弟元素,它不会选中目标元素之前的兄弟元素,li.active ~ li。

复合选择器

多个基础选择器连起来(中间没有空格)组成一个复合选择器(如:ul.nav)。复合选择器选中的元素将匹配其全部基础选择器,.box.nav 可以选中 class="box nav" ,但是不能选中 class="box"。

伪类选择器

用于选中某种特定状态的元素,优先级(0,1,0)。

  • :first-child——匹配的元素是其父元素的第一个子元素。
  • :last-child——匹配的元素是其父元素的最后一个子元素。
  • :only-child——匹配的元素是其父元素的唯一一个子元素(没有兄弟元素)。
  • :nth-child(an+b)——匹配的元素在兄弟元素中间有特定的位置。公式an+b里面的a和b是整数,该公式指定要选中哪个元素。要了解一个公式的工作原理,请从0开始代入n的所有整数值。公式的计算结果指定了目标元素的位置。下表给出了一些例子。

:nth-child(an+b)

  • :nth-last-child(an+b)——类似于:nth-child(),但不是从第一个元素往后数,而是从最后一个元素往前数。括号内的公式与:nth-child()里的公式的规则相同。
  • :first-of-type——类似于:first-child,但不是根据在全部子元素中的位置查找元素,而是根据拥有相同标签名的子元素中的数字顺序查找第一个元素。
  • :last-of-type——匹配每种类型的最后一个子元素。
  • :only-of-type——该选择器匹配的元素是满足该类型的唯一一个子元素。
  • :nth-of-type(an+b)——根据目标元素在特定类型下的数字顺序以及特定公式选择元素,类似于:nth-child。
  • :nth-last-of-type(an+b)——根据元素类型以及特定公式选择元素,从其中最后一个元素往前算,类似于:nth-last-child。
  • :not(<selector>)——匹配的元素不匹配括号内的选择器。括号内的选择器必须是基础选择器,它只能指定元素本身,无法用于排除祖先元素,同时不允许包含另一个排除选择器。
  • :focus——匹配通过鼠标点击、触摸屏幕或者按Tab键导航而获得焦点的元素。
  • :hover——匹配鼠标指针正悬停在其上方的元素。
  • :root——匹配文档根元素。对HTML来说,这是html元素,但是CSS还可以应用到XML或者类似于XML的文档上,比如SVG。在这些情况下,该选择器的选择范围更广。还有一些表单域相关的伪类选择器。
  • :disabled——匹配已禁用的元素,包括input、select以及button元素。
  • :enabled——匹配已启用的元素,即那些能够被激活或者接受焦点的元素。
  • :checked——匹配已经针对选定的复选框、单选按钮或选择框选项。
  • :invalid——根据输入类型中的定义,匹配有非法输入值的元素。例如,当<inputtype="email">的值不是一个合法的邮箱地址时,该元素会被匹配。

更多参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS

伪元素选择器

伪元素选择器可以向HTML标记中未定义的地方插入内容,优先级(0,0,1)。

  • ::before——创建一个伪元素,使其成为匹配元素的第一个子元素。该元素默认是行内元素,可用于插入文字、图片或其他形状。必须指定content属性才能让元素出现,如:.nav::before。
  • ::after——创建一个伪元素,使其成为匹配元素的最后一个子元素。该元素默认是行内元素,可用于插入文字、图片或其他形状。必须指定content属性才能让元素出现,如:.nav::after。
  • ::first-letter——用于指定匹配元素的第一个文本字符的样式,如:h1::first-letter。
  • ::first-line——用于指定匹配元素的第一行文本的样式。
  • ::selection——用于指定用户使用鼠标高亮选择的任意文本的样式。通常用于改变选中文本的background-color。只有少数属性可以使用,包括color、background-color、cursor、text-decoration。

属性选择器

属性选择器用于根据HTML属性进行匹配元素,优先级(0,1,0)。

  • [attr]——匹配的元素拥有指定属性attr,无论属性值是什么,如:input[disabled]。
  • [attr="value"]——匹配的元素拥有指定属性attr,且属性值等于指定的字符串值,如:input[type="radio"]。
  • [attr^="value"] ——“开头”属性选择器。该选择器匹配的元素拥有指定属性attr,且属性值的开头是指定的字符串值,例如:a[href^="https"]。
  • [attr*="value"]——“包含”属性选择器。该选择器匹配的元素拥有指定属性attr,且属性值包含指定的字符串值,如:[class*="sprite-"]。
  • [attr~="value"]——“空格分隔的列表”属性选择器。该选择器匹配的元素拥有指定属性attr,且属性值是一个空格分隔的值列表,列表中的某个值等于指定的字符串值,如:a[rel="author"]。
  • [attr|="value"]——匹配的元素拥有指定属性attr,且属性值要么等于指定的字符串值,要么以该字符串开头且紧跟着一个连字符(-)。

小结

本文要点回顾,欢迎留言交流。

  • Web中的一些基本概念介绍。
  • Html页面结构,元素分类。
  • Css优先级。
  • Css选择器,(基础选择器,组合选择器,复合选择器,伪类选择器,伪元素选择器,属性选择器)。

1.1 onblur和onfocus
马克-to-win:onblur失去焦点和onfocus得到焦点事件。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<SCRIPT LANGUAGE="JavaScript">
<!--
function check(a)
{
var username = a.value;
if (username == "")
{
/*String.fontcolor() (Method)
Encapsulates the string within an <FONT COLOR="..."> tag context.*/
document.getElementById("error").innerHTML = "用户名不能为空!".fontcolor("red");
}
}
function rese()
{
document.getElementById("error").innerHTML = "";
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="document.getElementById('u').focus()">

篇幅有限更多请见扩展链接:http://www.mark-to-win.com/tutorial/js_4_onbluronfocus.html「链接」

悉前端的人都会听过 css 的伪类与伪元素,然而大多数的人都会将这两者混淆。本文从解析伪类与伪元素的含义出发,区分这两者的区别,并且列出大部分伪类与伪元素的具体用法,即使你有用过伪类与伪元素,但里面总有一两个你没见过的吧。

伪类与伪元素

先说一说为什么 css 要引入伪元素和伪类,以下是 css2.1 Selectors 章节中对伪类与伪元素的描述:

CSS introduces the concepts of pseudo-elements and pseudo-classes to permit formatting based on information that lies outside the document tree.

直译过来就是:css 引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。下面分别对伪类和伪元素进行解释:

伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover 来描述这个元素的状态。虽然它和普通的 css 类相似,可以为已有的元素添加样式,但是它只有处于 dom 树无法描述的状态下才能为元素添加样式,所以将其称为伪类。

伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过:before 来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

伪类与伪元素的区别

这里通过两个例子来说明两者的区别。

下面是一个简单的 html 列表片段:

<ul>
 <li>我是第一个</li>
 <li>我是第二个</li>
</ul>

如果想要给第一项添加样式,可以在为第一个<li> 添加一个类,并在该类中定义对应样式:

HTML:

<ul>
 <li class="first-item">我是第一个</li>
 <li>我是第二个</li>
</ul>

CSS:

li.first-item {
 color: orange
}

如果不用添加类的方法,我们可以通过给设置第一个<li> 的:first-child 伪类来为其添加样式。这个时候,被修饰的<li> 元素依然处于文档树中。

CSS:

li:first-child {
 color: orange
}

下面是另一个简单的 html 段落片段:

<p>Hello World, and wish you have a good day!</p>

如果想要给该段落的第一个字母添加样式,可以在第一个字母中包裹一个<span> 元素,并设置该 span 元素的样式

HTML:

<p><span class="first">H</span>ello World, and wish you have a good day!</p>

CSS:

.first {
 font-size: 5em;
}

如果不创建一个<span> 元素,我们可以通过设置<p> 的:first-letter 伪元素来为其添加样式。这个时候,看起来好像是创建了一个虚拟的<span> 元素并添加了样式,但实际上文档树中并不存在这个<span> 元素。

CSS:

p:first-letter {
 font-size: 5em;
}

从上述例子中可以看出,伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档数外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素。

伪元素是使用单冒号还是双冒号?

CSS3 规范中的要求使用双冒号 (::) 表示伪元素,以此来区分伪元素和伪类,比如::before 和::after 等伪元素使用双冒号 (::),:hover 和:active 等伪类使用单冒号 (:)。除了一些低于 IE8 版本的浏览器外,大部分浏览器都支持伪元素的双冒号 (::) 表示方法。

然而,除了少部分伪元素,如::backdrop 必须使用双冒号,大部分伪元素都支持单冒号和双冒号的写法,比如::after,写成:after 也可以正确运行。

对于伪元素是使用单冒号还是双冒号的问题,w3c 标准中的描述如下:

Please note that the new CSS3 way of writing pseudo-elements is to use a double colon, eg a::after { ... }, to set them apart from pseudo-classes. You may see this sometimes in CSS. CSS3 however also still allows for single colon pseudo-elements, for the sake of backwards compatibility, and we would advise that you stick with this syntax for the time being.

大概的意思就是:虽然 CSS3 标准要求伪元素使用双冒号的写法,但也依然支持单冒号的写法。为了向后兼容,我们建议你在目前还是使用单冒号的写法。

实际上,伪元素使用单冒号还是双冒号很难说得清谁对谁错,你可以按照个人的喜好来选择某一种写法。

伪类与伪元素的具体用法

这一章以含义解析和例子的方式列出大部分的伪类和伪元素的具体用法。下面是根据用途分类的伪类总结图和根据冒号分类的伪元素总结图:

某些伪类或伪元素仍然处于试验阶段,在使用前建议先在 Can I Use 等网站查一查其浏览器兼容性。接下来,我们会一一列举每种用法的具体运用,大家可以更直观的理解和记忆,处于试验阶段的伪类或伪元素会在标题中标注。

伪类

状态

由于状态伪类的用法大家都十分熟悉,这里就不用例子说明了。

1 :link

选择未访问的链接

2 :visited

选择已访问的链接

3 :hover

选择鼠标指针浮动在其上的元素

4 :active

选择活动的链接

5 :focus

选择获取焦点的输入字段

结构化

1 :not

一个否定伪类,用于匹配不符合参数选择器的元素。

如下例,除了第一个<li> 元素外,其他<li> 元素的文本都会变为橙色。

HTML:

<ul>
 <li class="first-item">一些文本</li>
 <li>一些文本</li>
 <li>一些文本</li>
 <li>一些文本</li>
</ul>

CSS:

li:not(.first-item) {
 color: orange;
}

2 :first-child

匹配元素的第一个子元素。

如下例,第一个<li> 元素的文本会变为橙色。

HTML:

<ul>
 <li>这里的文本是橙色的</li>
 <li>一些文本</li>
 <li>一些文本</li>
</ul>

CSS:

li:first-child {
 color: orange;
}

3 : last-child

匹配元素的最后一个子元素。

如下例,最后一个<li> 元素的文本会变为橙色。

HTML:

<ul>
 <li>一些文本</li>
 <li>一些文本</li>
 <li>这里的文本是橙色的</li>
</ul>

CSS:

li:last-child {
 color: orange;
}

4 first-of-type

匹配属于其父元素的首个特定类型的子元素的每个元素。

如下例,第一个<li> 元素和第一个<span> 元素的文本会变为橙色。

HTML:

<ul>
 <li>这里的文本是橙色的</li>
 <li>一些文本 <span>这里的文本是橙色的</span></li>
 <li>一些文本</li>
</ul>

CSS:

ul :first-of-type {
 color: orange;
}

5 :last-of-type

匹配元素的最后一个子元素。

如下例,最后一个<li> 元素的文本会变为橙色。

HTML:

<ul>
 <li>一些文本<span>一些文本</span> <span>这里的文本是橙色的</span></li>
 <li>一些文本</li>
 <li>这里的文本是橙色的</li>
</ul>

CSS:

ul :last-of-type {
 color: orange;
}

6 :nth-child

:nth-child 根据元素的位置匹配一个或者多个元素,它接受一个 an+b 形式的参数,an+b 匹配到的元素示例如下:

  • 1n+0,或 n,匹配每一个子元素。
  • 2n+0,或 2n,匹配位置为 2、4、6、8… 的子元素,该表达式与关键字 even 等价。
  • 2n+1 匹配位置为 1、3、5、7… 的子元素、该表达式与关键字 odd 等价。
  • 3n+4 匹配位置为 4、7、10、13… 的子元素。

如下例,有以下 HTML 列表:

<ol>
 <li>Alpha</li>
 <li>Beta</li>
 <li>Gamma</li>
 <li>Delta</li>
 <li>Epsilon</li>
 <li>Zeta</li>
 <li>Eta</li>
 <li>Theta</li>
 <li>Iota</li>
 <li>Kappa</li>
</ol>

CSS:

选择第二个元素,”Beta” 会变成橙色:

ol :nth-child(2) {
 color: orange;
}

选择位置序号是 2 的倍数的元素,”Beta”, “Delta”, “Zeta”, “kappa” 会变成橙色:

ol :nth-child(2n) {
 color: orange;
}

选择位置序号为偶数的元素:

ol :nth-child(even) {
 color: orange;
}

选择从第 6 个开始,位置序号是 2 的倍数的元素,”Zeta”, “Theta”, “Kappa” 会变成橙色:

ol :nth-child(2n+6) {
 color: orange;
}

7 :nth-last-child

:nth-last-child 与:nth-child 相似,不同之处在于它是从最后一个子元素开始计数的。

8 :nth-of-type

:nth-of-type 与 nth-child 相似,不同之处在于它是只匹配特定类型的元素。

如下例,第二个<p> 元素会变为橙色。

HTML:

<article>
 <h1>我是标题</h1>
 <p>一些文本</p>
 <a href=""><img src="images/rwd.png" alt="Mastering RWD"></a>
 <p>这里的文本是橙色的</p>
</article>

CSS:

p:nth-of-type(2) {
 color: orange;
}

9 :nth-last-type

:nth-last-of-type 与 nth-of-type 相似,不同之处在于它是从最后一个子元素开始计数的。

10 :only-child

当元素是其父元素中唯一一个子元素时,:only-child 匹配该元素。

HTML:

<ul>
 <li>这里的文本是橙色的</li>
</ul>
 
<ul>
 <li>一些文本</li>
 <li>一些文本</li>
</ul>

CSS:

ul :only-child {
 color: orange;
}

11 :only-of-type

当元素是其父元素中唯一一个特定类型的子元素时,:only-child 匹配该元素。

如下例,第一个 ul 元素只有一个 li 类型的元素,该 li 元素的文本会变为橙色。

HTML:

<ul>
 <li>这里的文本是橙色的</li>
 <p>这里不是橙色</p>
</ul>
 
<ul>
 <li>一些文本</li>
 <li>一些文本</li>
</ul>

CSS:

li:only-of-type {
 color: orange;
}

12 :target

当 URL 带有锚名称,指向文档内某个具体的元素时,:target 匹配该元素。

如下例,url 中的 target 命中 id 值为 target 的 article 元素,article 元素的背景会变为黄色。

URL:

http://example.com/#target

HTML:

<article id="target">
 <h1><code>:target</code> pseudo-class</h1>
 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit!</p>
</article>

CSS:

:target {
 background: yellow;
}

表单相关

1 :checked

:checked 匹配被选中的 input 元素,这个 input 元素包括 radio 和 checkbox。

如下例,当复选框被选中时,与其相邻的<label> 元素的背景会变成黄色。

HTML:

<input type="checkbox"/>
<label>我同意</label>

CSS:

input:checked + label {
 background: yellow;
}

2 :default

:default 匹配默认选中的元素,例如:提交按钮总是表单的默认按钮。

如下例,只有提交按钮的背景变成了黄色。

HTML:

<form action="#">
 <button>重置</button>
 <button type="submit">提交</button>
</form>

CSS:

:default {
 background: yellow;
}

3 :disabled

:disabled 匹配禁用的表单元素。

如下例,被禁用 input 输入框的透明度会变成 50%。

HTML:

<input type="text" disabled/>

CSS:

:disabled {
 opacity: .5;
}

4 :empty

:empty 匹配没有子元素的元素。如果元素中含有文本节点、HTML 元素或者一个空格,则:empty 不能匹配这个元素。

如下例,:empty 能匹配的元素会变为黄色。

第一个元素中有文本节点,所以其背景不会变成黄色;

第二个元素中有一个空格,有空格则该元素不为空,所以其背景不会变成黄色;

第三个元素中没有任何内容,所以其背景会变成黄色;

第四个元素中只有一个注释,此时该元素是空的,所以其背景会变成黄色;

HTML:

<div>这个容器里的背景是橙色的</div>
<div> </div>
<div></div>
<div><!-- This comment is not considered content --></div>

CSS:

div {
 background: orange;
 height: 30px;
 width: 200px;
}
 
div:empty {
 background: yellow;
}

5 :enabled

:enabled 匹配没有设置 disabled 属性的表单元素。

6 :in-range

:in-range 匹配在指定区域内元素。

如下例,当数字选择器的数字在 5 到 10 是,数字选择器的边框会设为绿色。

HTML:

<input type="number" min="5" max="10">

CSS:

input[type=number] {
 border: 5px solid orange;
}
 
input[type=number]:in-range {
 border: 5px solid green;
}

7 :out-of-range

:out-of-range 与:in-range 相反,它匹配不在指定区域内的元素。

8 :indeterminate

indeterminate 的英文意思是“ 不确定的”。当某组中的单选框或复选框还没有选取状态时,:indeterminate 匹配该组中所有的单选框或复选框。

如下例,当下面的一组单选框没有一个处于被选中时,与 input 相邻的 label 元素的背景会被设为橙色。

HTML:

<ul>
 <li>
 <input type="radio" name="list" id="option1">
 <label for="option1">Option 1</label>
 </li>
 <li>
 <input type="radio" name="list" id="option2">
 <label for="option2">Option 2</label>
 </li>
 <li>
 <input type="radio" name="list" id="option3">
 <label for="option3">Option 3</label>
 </li>
</ul>

CSS:

:indeterminate + label {
 background: orange;
}

9 :valid

:valid 匹配条件验证正确的表单元素。

如下例,当 email 输入框内的值符合 email 格式时,输入框的边框会被设为绿色。

HTML:

<input type="email"/>

CSS:

input[type=email]:valid {
 border: 1px solid green;
}

10 :invalid

:invalid 与:valid 相反,匹配条件验证错误的表单元素。

11 :optional

:optional 匹配是具有 optional 属性的表单元素。当表单元素没有设置为 required 时,即为 optional 属性。

如下例,第一个 input 的背景不会被设为黄色,第二个 input 的背景会被设为黄色。

HTML:

<input type="text" required />
<input type="text" />

CSS:

:optional {
 background: yellow;
}

12 :required

:required 与:optional 相反匹配设置了 required 属性的表单元素。

13 :read-only

:read-only 匹配设置了只读属性的元素,表单元素可以通过设置“readonly” 属性来定义元素只读。

如下例,input 元素的背景会被设为黄色。

HTML:

<input type="text" value="I am read only" readonly>

CSS:

input:read-only {
 background-color: yellow;
}

14 :read-write

:read-write 匹配处于编辑状态的元素。input,textarea 和设置了 contenteditable 的 HTML 元素获取焦点时即处于编辑状态。

如下例,input 输入框和富文本框获取焦点时,背景变成黄色。

HTML:

<input type="text" value="获取焦点时背景变黄"/>
 
<div class="editable" contenteditable>
 <h1>点击这里可以编辑</h1>
 <p>获取焦点时背景变黄</p>
</div>

CSS:

:read-write:focus {
 background: yellow;
}

15 :scope(处于试验阶段)

:scope 匹配处于 style 作用域下的元素。当 style 没有设置 scope 属性时,style 内的样式会对整个 html 起作用。

如下例,第二个 section 中的元素的文本会变为斜体。

HTML:

<article>
 <section>
 <h1>很正常的一些文本</h1>
 <p>很正常的一些文本</p>
 </section>
 <section>
 <style scoped>
 :scope {
 font-style: italic;
 }
 </style>
 <h1>这里的文本是斜体的</h1>
 <p>这里的文本是斜体的</p>
 </section>
</article>

注:目前支持这个伪类的浏览器只有火狐。

语言相关

1 :dir(处于实验阶段)

:dir 匹配指定阅读方向的元素,当 HTML 元素中设置了 dir 属性时该伪类才能生效。现时支持的阅读方向有两种:ltr(从左往右)和 rtl(从右往左)。目前,只有火狐浏览器支持:dir 伪类,并在火狐浏览器中使用时需要添加前缀 ( -moz-dir() )。

如下例,p 元素中的阿拉伯语(阿拉伯语是从右往左阅读的)文本会变成橙色。

HTML:

<article dir="rtl">
<p>التدليك واحد من أقدم العلوم الصحية التي عرفها الانسان والذي يتم استخدامه لأغراض الشفاء منذ ولاده الطفل.</p>
</article>

CSS:

article :-moz-dir(rtl) {
 color: orange;
}
 
/* unprefixed */
article :dir(rtl) {
 color: orange;
}

如下例,p 元素中的英语文本会变成蓝色

HTML:

<article dir="ltr">
 <p>اIf you already know some HTML and CSS and understand the principles of responsive web design, then this book is for you.</p>
</article>

CSS:

article :-moz-dir(ltr) {
 color: blue;
}
 
/* unprefixed */
article :dir(ltr) {
 color: blue;
}

2 :lang

:lang 匹配设置了特定语言的元素,设置特定语言可以通过为了 HTML 元素设置 lang=”” 属性,设置 meta 元素的 charset=”” 属性,或者是在 http 头部上设置语言属性。

实际上,lang=”” 属性不只可以在 html 标签上设置,也可以在其他的元素上设置。

如下例,分别给不同的语言设置不同的引用样式:

HTML:

<article lang="en">
 <q>Lorem ipsum dolor sit amet.</q>
</article>
<article lang="fr">
 <q>Lorem ipsum dolor sit amet.</q>
</article>
<article lang="de">
 <q>Lorem ipsum dolor sit amet.</q>
</article>

CSS:

:lang(en) q { quotes: '“' '”'; }
:lang(fr) q { quotes: '«' '»'; }
:lang(de) q { quotes: '»' '«'; }

其他

1 :root

:root 匹配文档的根元素。一般的 html 文件的根元素是 html 元素,而 SVG 或 XML 文件的根元素则可能是其他元素。

如下例,将 html 元素的背景设置为橙色

:root {
 background: orange;
}

2.:fullscreen

:fullscreen 匹配处于全屏模式下的元素。全屏模式不是通过按 F11 来打开的全屏模式,而是通过 Javascript 的 Fullscreen API 来打开的,不同的浏览器有不同的 Fullscreen API。目前,:fullscreen 需要添加前缀才能使用。

如下例,当处于全屏模式时,h1 元素的背景会变成橙色

HTML:

<h1 id="element">在全屏模式下,这里的文本的背景会变成橙色.</h1>
<button>进入全屏模式!</button>

JAVASCRIPT:

var docelem = document.getElementById('element');
var button = document.querySelector('button');
button.onclick = function() {
 if (docelem.requestFullscreen) {
 docelem.requestFullscreen();
 }else if (docelem.webkitRequestFullscreen) {
 docelem.webkitRequestFullscreen();
 } else if(docelem.mozRequestFullScreen) {
 docelem.mozRequestFullScreen();
 } else if(docelem.msRequestFullscreen) {
 docelem.msRequestFullscreen();
 }
}

CSS:

h1:fullscreen {
 background: orange;
}
 
h1:-webkit-full-screen {
 background: orange;
}
 
h1:-moz-full-screen {
 background: orange;
}
 
h1:-ms-fullscreen {
 background: orange;
}

伪元素

1 ::before/:before

:before 在被选元素前插入内容。需要使用 content 属性来指定要插入的内容。被插入的内容实际上不在文档树中。

HTML:

<h1>World</h1>

CSS:

h1:before {
 content: "Hello ";
}

2 ::after/:after

:after 在被元素后插入内容,其用法和特性与:before 相似。

3 ::first-letter/:first-letter

:first-letter 匹配元素中文本的首字母。被修饰的首字母不在文档树中。

CSS:

h1:first-letter {
 font-size: 5em;
}

4 ::first-line/:first-line

:first-line 匹配元素中第一行的文本。这个伪元素只能用在块元素中,不能用在内联元素中。

CSS:

p:first-line {
 background: orange;
}

5 ::selection

::selection 匹配用户被用户选中或者处于高亮状态的部分。在火狐浏览器使用时需要添加-moz 前缀。该伪元素只支持双冒号的形式。

CSS:

::-moz-selection {
 color: orange;
 background: #333;
}
 
::selection {
 color: orange;
 background: #333;
}

6 ::placeholder

::placeholder 匹配占位符的文本,只有元素设置了 placeholder 属性时,该伪元素才能生效。

该伪元素不是 CSS 的标准,它的实现可能在将来会有所改变,所以要决定使用时必须谨慎。

在一些浏览器中(IE10 和 Firefox18 及其以下版本)会使用单冒号的形式。

HTML:

<input type="email" placeholder="name@domain.com">

CSS:

input::-moz-placeholder {
 color:#666;
}
 
input::-webkit-input-placeholder {
 color:#666;
}
 
/* IE 10 only */
input:-ms-input-placeholder {
 color:#666;
}
 
/* Firefox 18 and below */
input:-moz-input-placeholder {
 color:#666;
}

7 ::backdrop(处于试验阶段)

::backdrop 用于改变全屏模式下的背景颜色,全屏模式的默认颜色为黑色。该伪元素只支持双冒号的形式

HTML:

<h1 id="element">This heading will have a solid background color in full-screen mode.</h1>
<button onclick="var el = document.getElementById('element'); el.webkitRequestFullscreen();">Trigger full screen!</button>

CSS:

h1:fullscreen::backdrop {
 background: orange;
}

转载自:http://www.alloyteam.com/2016/05/summary-of-pseudo-classes-and-pseudo-elements/