整合营销服务商

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

免费咨询热线:

jQuery 自定义动画-animate

jQuery 自定义动画-animate

定义动画

使用animate()方法

animate(params,[duration],[easing],[callback])

其中params为希望进行变换的CSS属性列表,以及希望变化到的最终值;

需要特别指出,params中的变量遵循camel(驼峰式)命名方式,例如:paddingLeft不能写成padding_left

params只能是CSS中用数值表示的属性,例如width、top、opacity等,像backgroundColor这样的属性不被animate()支持;

属性值必须加引号,例如:width: "90%",用逗号隔开

duration为持续的时间,三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)

fast: 快速的

easing为可选参数,通常供动画插件使用,用来控制变化工程的节奏,jQuery中只提供了linear和swing两个值

jQuery 代码:

点击按钮后div元素的几个不同属性一同变化

// 在一个动画中同时应用三种类型的效果

$("#go").click(function(){
    $("#block").animate({
        width:"90%",
        height:"100%",
        fontSize:"10em",
        borderWidth:"10px"
    }, 1000 );
});

HTML 代码:

<button id="go"> Run</button>
<div id="block">Hello!</div>

相对变化的自定义动画

在params的CSS属性列表中,jQuery还允许使用"+="或者"-="来表示相对变化(多次变化)

<html>
<head>
<title>animate()方法</title>
<style type="text/css">
<!--
body{
background:url(bg2.jpg);
}
div{
position:absolute; /* 绝对定位 */
left:90px; top:50px;
}
input{
border:1px solid #000033;
}
-->
</style>
<script language="javascript" src="jquery.min.js"></script>
<script language="javascript">
$(function(){
    $("input:first").click(function(){
    $("#block").animate({
    left: "-=80px" //相对左移
    },300);
    });
    $("input:last").click(function(){
    $("#block").animate({
    left: "+=80px" //相对右移
    },300);
    });
});
</script>
</head>
<body>
<input type="button" value="<<左"> <input type="button" value="右>>">
<div id="block"><img src="05.jpg"></div>
</body>
</html>

让指定元素左右移动

jQuery 代码:

$("#right").click(function(){
$(".block").animate({left: '+50px'}, "slow"); //+50px只能移动一次
});
$("#left").click(function(){
$(".block").animate({left: '-50px'}, "slow"); //-50px只能移动一次
});

HTML 代码:

<button id="left">?</button> <button id="right">?</button>
<div class="block"></div>

另外在CSS属性列表params中,还可以将属性的最终值设置为"show"、"hide"、"toggle"

在600毫秒内切换段落的高度和透明度

jQuery 代码:

$("p").animate({
height: 'toggle', opacity: 'toggle'
}, "slow");


用500毫秒将段落移到left为50的地方并且完全清晰显示出来(透明度为1)

jQuery 代码:

$("p").animate({
left: 50, opacity: 'show'
}, 500);


一个使用"easein"函数提供不同动画样式的例子。只有使用了插件来提供这个"easein"函数,这个参数才起作用。

jQuery 代码:

$("p").animate({
opacity: 'show'
}, "slow", "easein");


animate()方法还有另外一种形式

animate(params,options)

其中params与第一种形式完全相同,options为动画的可选参数列表,主要包括duration、easing、callback、queue等。

其中duration、easing、callback与第1种形式完全一样,queue为布尔值,表示当有多个animate()组成jQuery链时,当前

animate()与紧接着的下一个animate()是按顺序执行(true,默认值),还是同时触发(false);

动画效果的触发程序

jQuery代码:

$(function(){
    $("input:eq(0)").click(function(){
    //第一个animate与第二个animate同时执行,然后再执行第三个
    $("#block1").animate({width:"90%"},{queue:false,duration:1500})
    .animate({fontSize:"24px"},1000)
    .animate({borderRightWidth:"20px"},1000);
    });
    $("input:eq(1)").click(function(){
    //依次执行三个animate
    $("#block2").animate({width:"90%"},1500)
    .animate({fontSize:"24px"}, 1000)
    .animate({borderRightWidth:"20px"}, 1000);
    });
    $("input:eq(2)").click(function(){
    $("input:eq(0)").click(); //触发单击事件,等同于$("input:eq(0)").trigger("click");
    $("input:eq(1)").click(); //触发单击事件,等同于$("input:eq(1)").trigger("click");
    });
    $("input:eq(3)").click(function(){
    //恢复默认设置
    $("div").css({width:"", fontSize:"", borderWidth:""});
    });
});

HTML代码:

<input type="button" id="go1" value="Block1动画">
<input type="button" id="go2" value="Block2动画">
<input type="button" id="go3" value="同时动画">
<input type="button" id="go4" value="重置">
<div id="block1">Block1</div>
<div id="block2">Block2</div>

delay(duration,[queueName])

设置一个延时来推迟执行队列中之后的项目。

jQuery代码:

$("button").click(function(){
//$("li").animate(参与过渡的属性,时长,效果,回调函数);
$("li").delay(5000).animate({
"width": "500px"
});
})

HTML代码:

<button>延迟执行</button>
<ul>
<li>1111</li>
</ul>

实例: delay特效

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
list-style: none;
}
ul{
width: 500px;
height: 500px;
margin: 0 auto;
border: 1px solid orange;
position: relative;
}
li{
width: 50px;
height: 50px;
background-image: url("img/ym.jpg");
background-repeat: no-repeat;
display: none;
position: absolute;
}
</style>
</head>
<body>
<button>┏ (゜ω゜)=?</button>
<ul>
</ul>
<script src="js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
<script src="js/jquery-ui.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var str="";
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
str +="<li style='left: "+(j*50)+"px;top: "+(i*50)+"px;background-position: "+(j*-50)+"px "+(i*-50)+"px;'></li>";
}
}
$("ul").html(str);



$("button").click(function(){
//$("li").delay(Math.random()*1000).show()
$("li").each(function(){

$(this).delay(Math.random()*1000).fadeIn(100,"easeInOutBounce");
})

})
</script>
</body>
</html>

页面滚动到顶部的效果

$('html, body').animate({scrollTop:0}, 500); //页面滚动

实例: 返回顶部

av元素是什么?

Nav元素用于定义导航链接,是HTML5新增的元素,该元素可以将具有导航性质的链接归纳在一个区域中,使页面元素的语义更加明确。其中的导航元素可以链接到站点的其他页面或者当前页的其他部分。

Nav元素可以用作页面导航的链接组,在导航链接组里面有很多的链接,点击每个链接可以链接到其他页面或者当前页面的其他部分,并不是所有的链接组都要被放在Nav元素里面,只需要把最主要的、基本的、重要的放在Nav元素里面即可

比如说页脚底部如果有个版权声明,不建议使用Nav元素,而建议使用footer元素是最合适的。一个页面中可用多个Nav元素作为整体或者不同部分的导航

示例代码:

Nav元素示例代码

在上面这段代码中,通过在Nav元素内部嵌套无序列表ul来搭建导航结构。通常一个HTML页面中可以包含多个Nav元素,作为页面整体或不同部分的导航。

具体来说Nav元素可以用的场景如下:

1.传统导航条:目前主流网站上都有不同层级的导航条,其作用是跳转到网站的其他主页面。

2.侧边栏导航:目前主流博客网站及电商网站都有侧边栏导航,目的是将当前文章或当前商品页面跳转到其他文章或其他商品页面。

3.页内导航:它的作用是在本页面几个主要的组成部分之间进行跳转。

4.翻页操作:翻页操作切换的是网页的内容部分,可以通过单击“上一页”或“下一页”切换,也可以通过单击实际的页数跳转到某一页。

除此Nav元素也可以用于其他重要的、基本的导航链接组中。并不是所有的链接组都要被放进Nav元素,只需要将主要的和基本的链接放进Nav元素即可。

悉前端的人都会听过 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/