H5_Day2
一、选择器
已经学习的选择器:
基础选择器:通配符,标签、类、ID
高级选择器:交集、并集等
在HTML5中,新增了一些选择器,比如属性选择器,子类选择器,关系型选择器,伪类选择器,伪选择器等
1.1、属性选择器
属性选择器利用的是[]进行表示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } /* p标签且自定义属性为v-if的标签 */ p[v-if]{ color:red; } /* p标签且自定义属性为v-if = “xixi”的标签 */ p[v-if = "xixi"]{ color:green; } /* p标签且自定义属性为v-if的开头为li的标签 */ p[v-if^="li"]{ color:cyan; } /* p标签且自定义属性为v-if的结尾为tion的标签 */ p[v-if$="tion"]{ color:blue; } /* p标签且自定义属性为v-if且属性值中含有i的标签 */ p[v-if*="i"]{ font-size:20px; } </style> </head> <body> <p v-if>123</p> <p v-if = "xixi">123</p> <p v-if = "like">123</p> <p v-if = "condition">123</p> <p v-if = "iam">123</p> </body> </html>
注意:标签的属性分为两种,一种是系统内置的:class id src type等等,一种是程序员自定义的。
属性选择器的写法中的属性可以是系统内置的,也可以是自定义的。
jQuery函数库也支持属性选择器的写法
1.2子类选择器
作用:匹配某些父元素的子节点来使用的。子类选择器分为两种:一种是不区分子元素类型的选择器;一种是区分子元素类型的选择器
1.2.1不区分子元素类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } /* 子类选择器,代表匹配div的子元素中索引值为1且为h1标签的标签 */ h1:first-child{ color:red; } /* 子类选择器,代表匹配div的子元素中最后一个索引值且为h4标签的标签*/ h4:last-child{ background: gray; } /* 匹配某一父亲节点的第N个子元素的标签 */ p:nth-child(6){ color:blue; } /* 匹配某一父亲节点的所有偶数索引值且标签名为p的标签 */ p:nth-child(2n){ background: green; } /* 匹配某一父亲节点的倒数第N个子元素的标签 */ h4:nth-last-child(2){ background: yellow; } </style> </head> <body> <div> <h1>一级标题</h1> <h1>一级标题</h1> <p>wuhu</p> <p>wuhu</p> <p>wuhu</p> <p>wuhu11</p> <p>wuhu</p> <p>wuhu</p> <p>wuhu</p> <p>wuhu</p> <h4>四级标题</h4> <h4>四级标题</h4> </div> </body> </html>
子类选择器【不区分子元素类型】,表示任意标签都是父节点的子元素,索引值从一开始
l 子类选择器【不区分子元素类型】:任意类型标签都是父节点子元素。
l 选择器:first-child,代表的含义是匹配某一个父元素的第一个儿子标签。
l 选择器:last-child,代表的含义是匹配某一个父元素的最后一个儿子标签。
l 选择器:nth-child(索引值),代表的是匹配某一个父元素的索引值为几的儿子标签。【索引值从1开始的】
l 选择器:nth-last-child(索引值),代表的是匹配某一个父元素的索引值为几的倒数儿子标签。
1.2.2区分子元素类型
匹配某一父元素中某一类型的子节点。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ padding: 0; margin: 0; } /* 匹配p类型的子节点的第一个 */ p:first-of-type{ color:red; } /* 匹配p类型的子节点的最后一个 */ p:last-of-type{ background: cyan; } /* 匹配h1类型的子节点的第N个,同样的可以为2n,3n等 */ h1:nth-of-type(5){ background: yellow; } /* 匹配h1类型的子节点的倒数第N个 */ h1:nth-last-of-type(3){ background: blue; } </style> </head> <body> <div> <h1>123</h1> <h1>123</h1> <h1>123</h1> <p>123</p> <p>123</p> <p>123</p> <p>123</p> <p>123</p> <p>123</p> <h1>123</h1> <h1>123</h1> <h1>123</h1> </div> </body> </html>
l div:first-of-type:匹配的是某一个父元素内部div类型的第一个子节点
l div:last-of-type:匹配的是某一个父元素内部div类型的最后一个子节点
l div:nth-of-type(index):匹配的是某一个父元素内部div类型的索引值为几的子节点
l div:nth-last-of-type(index):匹配的是某一个父元素内部div类型的索引值为倒数第几的子节点
1.3、关系选择器
在HTML5中,新增了关系选择器。
语法规则:(A,B代表的是基础选择器或者高级选择器)
A+B 代表匹配的是A选择器节点的后面紧随的下一个姊妹元素B
A~B 代表匹配的是A选择器后面紧随的后面所有的姊妹元素B
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } /* 代表匹配p节点后面的第一个姊妹元素h1标签 */ p+h1{ color:red; } /* 代表匹配p节点后面的所有姊妹元素h1标签 */ p~h1{ background: cyan; } </style> </head> <body> <p>123</p> <p>123</p> <p>123</p> <h1>一级标题</h1> <h1>一级标题</h1> <h1>一级标题</h1> </body> </html>
1.4、伪类选择器
常用的:
div:hover:鼠标移上
input:disabled:不可使用
input:focus:聚焦
div:empty:空的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } div{ width: 200px; height: 200px; background: green; } /* :hover 鼠标移上事件 */ div:hover{ background: red; } /* :disabled 匹配到不可用的表单元素,可用的不能匹配到 */ input:disabled{ border:3px solid black; } /* :focus 匹配到聚焦的表单元素 */ input:focus{ font-size: 20px; } /* :empty 匹配到空的标签,不是空的不能匹配 */ div:empty{ width: 300px; height: 200px; background: green; } </style> </head> <body> <div>1</div> <input type="text" disabled> <input type="text"> <input type="text" autofocus> <div></div> </body> </html>
1.5、伪选择器
基本语法:
基础选择器或高级选择器::伪选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } /* ::first-letter 选中文本的第一个字 */ p::first-letter{ font-size: 20px; } /* ::first-line 选中文本的第一行 */ p::first-line{ color:red; } /* ::selection 对文字选中部分加样式*/ p::selection{ background: blue; } </style> </head> <body> <p> 四个历史时期各自承担前后相继的历史任务:救国、立国、富国、强国《决议》将新时代确定为党的百年奋斗的一个单独时期,凸显了新时代在实现中华民族伟大复兴进程中的标示性意义。这既具有充分的理论依据和现实依据,又具有重大意义“四个伟大飞跃”,对应四个历史时期,是我们党推进中华民族伟大复兴的四个里程碑、四座伟大丰碑。第四个伟大飞跃是一次大集成,是在前三个伟大飞跃基础上实现的,把中华民族伟大复兴事业推向一个新高度,即进入了不可逆转的历史进程 </p> </body> </html>
二、伪元素(CSS3)
在HTML5中,新增了伪元素的概念,一共两个
伪元素:某一个父元素的内部子节点。
1.双闭合标签才有伪元素
2.伪元素务必带content属性,主要是用来设置子元素的文本
3.伪元素务必脱离标准文档流【定位或者浮动或者转块】
三个要求缺一不可
语法规则:
基础选择器或者高级选择器::after或者before
一个标签只能有两个伪元素,多了会覆盖同样定义的前面的伪元素(before或者after)
通过CSS层叠样式给父元素添加子标签。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } div{ width: 400px; height: 400px; border:2px solid black; position:relative; margin:200px auto; } /* 添加伪元素方法之一: ::after */ div::after{ /* 务必带content属性 */ content:""; /* 务必脱标 */ position:absolute; width: 20px; height: 20px; background: cyan; left:200px; top:200px; } /* 添加伪元素方法之二: ::before */ div::before{ content:""; position:absolute; width: 20px; height: 20px; border-radius:50%; background: yellow; } </style> </head> <body> <div> </div> </body> </html>
三、border-radius圆角设置(CSS3)
属性值写法有两种:
一种是百分比写法;一种是数字+px。
其中数字+px也有两种写法:
border-radius:50px; border-radius:50px 50px 50px 50px;(分别为左上角、右上角、左下角、右下角)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } .cur{ width: 400px; height: 400px; position: relative; margin:50px auto; } .cur p:nth-of-type(1){ position: absolute; width: 200px; height: 200px; background: green; border-radius:0 200px 0 200px; } .cur p:nth-of-type(2){ position: absolute; width: 200px; height: 200px; background: green; border-radius:200px 0px 200px 0px; left:200px; } .cur p:nth-of-type(3){ position: absolute; width: 200px; height: 200px; background: green; border-radius:0 200px 0 200px; top:200px; left:200px; } .cur p:nth-of-type(4){ position: absolute; width: 200px; height: 200px; background: green; border-radius:200px 0px 200px 0px; top:200px; } </style> </head> <body> <div class = "cur"> <p></p> <p></p> <p></p> <p></p> </div> </body> </html>
做四叶草,左边和右边的数值保持一致
四、阴影效果(CSS3)
4.1盒子阴影
阴影功能分为两种:盒子阴影【box-shadow】、文本阴影【text-shadow】。
盒子阴影的写法:
1.(外)box-shadow:10px(右侧阴影) 10px(底部阴影) 10px(模糊程度)cyan(阴影颜色),10px(右侧阴影) 10px(底部阴影) 10px(模糊程度)yellow(阴影颜色);
可以给盒子添加多个阴影,但是多个阴影之间要用逗号隔开
2.(内)box-shadow:inset 10px(右侧阴影) 10px(底部阴影) 10px(模糊程度)cyan(阴影颜色);
代表内部阴影,表示div盒子加上阴影。
4.2文本阴影
使用方式跟盒子阴影一致,但是文本阴影只有外阴影,没有内部阴影。
同样的,多个阴影之间用逗号隔开。
五、background系列属性
l background背景系列综合属性
l background-image:背景图设置
l background-color:背景颜色设置
l background-position:背景图定位
l background-repeat:背景图重复设置
5.1background-origin
background-origin主要作用是可以设置背景图的起源,属性值有三个,分别是border-box padding-box content-box
颜色表示rgba(0,0,0,.2)最后一个参数表示透明度
<style> *{ margin: 0; padding: 0; } div{ width: 600px; height: 600px; border:5px solid rgba(0,0,0,.2); margin:100px auto; background:url(../images/2.jpg) no-repeat; padding:100px; /* 设置背景图起源 */ background-origin:content-box; } </style>
默认值是padding-box。
5.2、background-clip
背景图裁剪,他也是HTML5中新增的样式,主要的作用是可以对背景图进行裁剪。
属性值有四个:border-box padding-box content-box text
前三个是边框、内边距、内容区之外的图片全部裁剪掉,只留下内部的图片。
如果是文本裁剪则需要注意以下问题
1.浏览器是有兼容问题的,需要在background-clip:text之前加上谷歌浏览器私有前缀-webkit-
2.需要给文字加上透明度才可以看到文字裁剪。
<style> *{ padding: 0; margin: 0; } div{ width: 1000px; height: 1000px; border:20px solid rgba(0, 0, 0, .2); background:url(../images/2.jpg) no-repeat; background-origin:border-box; -webkit-background-clip: text; font-size: 20px; color:rgba(0, 0, 0, .2); } </style>
5.3,background-size
可以设置背景图的尺寸大小。
属性值有:数字+px,也可以是百分比,也可以是cover或者contain
background-size:200px 200px;//第一个代表宽度 第二个代表高度
background-size:50% 50%;//宽度的百分比和高度的百分比,参考的是盒子的宽高。
background-size:cover;//覆盖,相当于把原图的宽高进行拉伸,导致只能看到图片的一部分
background-size:contain;//将原图尽可能的在盒子中原封不动的展示出来
5.4、小练习。
概述:向刚才看见图片,在国内经常称之为‘精灵图’。但是在国外雪碧图。它是一种CSS图像合并技术。
该方法是将小图标和背景图合并到一张图片上。然后利用CSS的背景图定位来显示需要展示的图片部分。
简单点来说,在工作的时候经常在一整张图片中,分割出一部分自己想要的进行展示。
优点:减少加载网页图片对服务器的请求次数,提高网页的加载速度。
<style> *{ margin: 0; padding: 0; } div{ width: 144px; height: 164px; background:url(../images/jingling.png) no-repeat; background-position: 0 -700px; margin: 100px auto; border:1px solid black; /* 需求,让自由女神的W/H是原图的一倍 */ background-size:416px 1310px; } </style>
l 如果显示图片【精灵图】:如果是原图一半。
l 背景图尺寸大小是原图一半
l 背景图定位数据也是原来数据一半
l 显示图标W、H也是原来一半即可
六、过度动画transition
过度动画的触发是有条件的:
过度动画必须要有事件触发;【用hover或者JS给他绑定事件都可以】
参与过度动画的元素,某一些样式的属性值务必发生变化;
transition是一个综合的属性,由如下四个属性组成:过渡动画的属性 过渡动画的总时间 过渡动画速率 过渡动画延迟时间
可以给一个标签绑定多个动画,多个transition属性值之间用逗号隔开。【不建议这么写】
1.transition-property
2.transition-duration
3.transition-timing-function 属性值有linear(匀速)、ease-in(以慢速开始,后面速度变快)、ease-out(以慢速结束)、ease(以慢速开始慢速结束)、ease-in-out(与ease一样)、
4.transition-delay【m/ms】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /* 清除默认样式 */ *{ margin:0; padding: 0; } div{ width: 200px; height: 200px; background: cyan; margin:100px auto; /* 添加过渡动画:宽度变宽 */ transition:width 2s linear 0s, height 2s linear 0s; } div:hover{ width: 400px; height: 400px; } </style> </head> <body> <div></div> </body> </html>
当宽高同时参与动画时,可以写为:
当元素的全部属性都参与变化时就可以写all
transition:all 2s linear 0s;
div:hover{
width: 400px; height: 400px; }