HTML5
新增标签
-
新增了那些语义化标签
-
header
--- 头部标签 -
nav
--- 导航标签 -
article
--- 内容标签 -
section
--- 块级标签 -
aside
--- 侧边栏标签 -
footer
--- 尾部标签
-
- 使用语义化标签的注意
- 语义化标签主要针对搜索引擎
- 新标签可以使用一次或者多次
- 在 `IE9` 浏览器中,需要把语义化标签都转换为块级元素
- 语义化标签,在移动端支持比较友好,
多媒体音视频标签
- 多媒体标签有两个,分别是
- 音频 --
audio
- 视频 --
video
-
audio
标签说明
- 可以在不使用标签的情况下,也能够原生的支持音频格式文件的播放,
- 但是:播放格式是有限的
<body>
<!-- 注意:在 chrome 浏览器中已经禁用了 autoplay 属性 -->
<!-- <audio src="./media/snow.mp3" controls autoplay></audio> -->
<!--
因为不同浏览器支持不同的格式,所以我们采取的方案是这个音频准备多个文件,放置多个source标签
-->
<audio controls>
<source src="./media/snow.mp3" type="audio/mpeg" />
</audio>
</body>
video 代码演示
<body>
<!-- <video src="./media/video.mp4" controls="controls"></video> -->
<!-- 谷歌浏览器禁用了自动播放功能,如果想自动播放,需要添加 muted 属性 -->
<video controls="controls" autoplay muted loop poster="./media/pig.jpg">
<source src="./media/video.mp4" type="video/mp4">
<source src="./media/video.ogg" type="video/ogg">
</video>
</body>
多媒体标签总结
- 音频标签与视频标签使用基本一致
- 多媒体标签在不同浏览器下情况不同,存在兼容性问题
- 谷歌浏览器把音频和视频标签的自动播放都禁止了
- 谷歌浏览器中视频添加 muted 标签可以自己播放
CSS3
属性选择器
属性选择器代码演示
button {
cursor: pointer;
}
button[disabled] {
cursor: default
}
input[type=search] {
color: skyblue;
}
span[class^=black] {
color: lightgreen;
}
span[class$=black] {
color: lightsalmon;
}
span[class*=black] {
color: lightseagreen;
}
结构伪类选择器
ul li:first-child {
background-color: lightseagreen;
}
ul li:last-child {
background-color: lightcoral;
}
ul li:nth-child(3) {
background-color: aqua;
}
nth-child
参数详解
nth-child 详解
-
注意:本质上就是选中第几个子元素
-
n 可以是数字、关键字、公式
-
n 如果是数字,就是选中第几个
-
常见的关键字有
even
偶数、odd
奇数 -
常见的公式如下(如果 n 是公式,则从 0 开始计算)
-
但是第 0 个元素或者超出了元素的个数会被忽略
<style>
/* 偶数 */
ul li:nth-child(even) {
background-color: aquamarine;
}
/* 奇数 */
ul li:nth-child(odd) {
background-color: blueviolet;
}
/*n 是公式,从 0 开始计算 */
ul li:nth-child(n) {
background-color: lightcoral;
}
/* 偶数 */
ul li:nth-child(2n) {
background-color: lightskyblue;
}
/* 奇数 */
ul li:nth-child(2n + 1) {
background-color: lightsalmon;
}
/* 选择第 0 5 10 15, 应该怎么选 */
ul li:nth-child(5n) {
background-color: orangered;
}
/* n + 5 就是从第5个开始往后选择 */
ul li:nth-child(n + 5) {
background-color: peru;
}
/* -n + 5 前五个 */
ul li:nth-child(-n + 5) {
background-color: tan;
}
</style>
nth-child
和 nth-of-type
的区别
<style>
div :nth-child(1) {
background-color: lightblue;
}
div :nth-child(2) {
background-color: lightpink;
}
div span:nth-of-type(2) {
background-color: lightseagreen;
}
div span:nth-of-type(3) {
background-color: #fff;
}
</style>
-
nth-child
选择父元素里面的第几个子元素,不管是第几个类型 -
nth-of-type
选择指定类型的元素
伪元素选择器
-
before
和after
必须有content
属性 -
before
在内容前面,after 在内容后面 -
before
和after
创建的是一个元素,但是属于行内元素 - 创建出来的元素在
Dom
中查找不到,所以称为伪元素 - 伪元素和标签选择器一样,权重为 1
<style>
div {
width: 100px;
height: 100px;
border: 1px solid lightcoral;
}
div::after,
div::before {
width: 20px;
height: 50px;
text-align: center;
display: inline-block;
}
div::after {
content: '德';
background-color: lightskyblue;
}
div::before {
content: '道';
background-color: mediumaquamarine;
}
</style>
伪元素的案例, 添加字体图标
p {
width: 220px;
height: 22px;
border: 1px solid lightseagreen;
margin: 60px;
position: relative;
}
p::after {
content: '\ea50';
font-family: 'icomoon';
position: absolute;
top: -1px;
right: 10px;
}
2D
转换之 translate
-
2D
转换是改变标签在二维平面上的位置和形状 - 移动:
translate
- 旋转:
rotate
- 缩放:
scale
translate
语法
- x 就是 x 轴上水平移动, y 就是 y 轴上水平移动
transform: translate(x, y)
transform: translateX(n)
transfrom: translateY(n)
-
2D
的移动主要是指 水平、垂直方向上的移动 -
translate
最大的优点就是不影响其他元素的位置 -
translate
中的100%单位,是相对于本身的宽度和高度来进行计算的 - 行内标签没有效果
div {
background-color: lightseagreen;
width: 200px;
height: 100px;
/* 平移 */
/* 水平垂直移动 100px */
transform: translate(100px, 100px);
/* 水平移动 100px */
transform: translate(100px, 0)
/* 垂直移动 100px */
transform: translate(0, 100px)
/* 水平移动 100px */
transform: translateX(100px);
/* 垂直移动 100px */
transform: translateY(100px)
}
2D 转换 rotate
-
rotate 旋转
-
2D
旋转指的是让元素在二维平面内顺时针或者逆时针旋转
-
-
rotate
语法
单位是:deg
transform: rotate(度数) -
重点知识点
-
rotate
里面跟度数,单位是deg
- 角度为正时,顺时针,角度为负时,逆时针
- 默认旋转的中心点是元素的中心点
img:hover {
transform: rotate(360deg)
}
动画及旋转综合案例
.box {width: 300px;height: 40px;margin-top: 20px;border: 1px solid #ccc;position: relative;}
.box::after{ //使用after伪元素来做那个三角
content: "";
position: absolute;
right: 10px;
bottom: 15px;//以上是定位位置
width: 16px;
height: 16px;
border-right: 1px solid red;
border-bottom: 1px solid red;//做一个正方形,右边和下边给边框
transform: rotate(45deg);//再旋转45度,就成了向下的箭头
transition: all 0.5s;//给一个动画,谁用用到谁身上
}
.box:hover::after{
transform: rotate(225deg);//鼠标移动到box上,after伪类旋转225度
bottom:5px;
}
二、设置元素旋转中心点(transform-origin)
-
transform-origin
基础语法
transform-origin: x y;
- 重要知识点
- 注意后面的参数 x 和 y 用空格隔开
- x y 默认旋转的中心点是元素的中心 (50% 50%),等价于
center
center
- 还可以给 x y 设置像素或者方位名词(
top
、bottom
、left
、right
、center
)
2D
转换之 scale
-
scale
的作用- 用来控制元素的放大与缩小,语法transform: scale(x, y)
-
- 注意,x 与 y 之间使用逗号进行分隔
-
transform: scale(1, 1)
: 宽高都放大一倍,相当于没有放大 -
transform: scale(2, 2)
: 宽和高都放大了二倍 -
transform: scale(2)
: 如果只写了一个参数,第二个参数就和第一个参数一致 -
transform:scale(0.5, 0.5)
: 缩小 -
scale
最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子
div:hover { /* 注意,数字是倍数的含义,所以不需要加单位 */ transform: scale(2, 2) /* 实现等比缩放,同时修改宽与高 */ transform: scale(2) /* 小于 1 就等于缩放*/ transform: scale(0.5, 0.5) }
2D
转换综合写法以及顺序问题
- 同时使用多个转换,其格式为
transform: translate() rotate() scale()
- 顺序会影响到转换的效果(先旋转会改变坐标轴方向)
- 但我们同时有位置或者其他属性的时候,要将位移放到最前面
div:hover {
transform: translate(200px, 0)
rotate(360deg) scale(1.2)
}
下面是3D部分,可以暂时不用掌握
一、 认识 3D
转换
-
3D
的特点- 近大远小
- 物体和面遮挡不可见
- 三维坐标系
-
x 轴:水平向右 -- 注意:x 轴右边是正值,左边是负值
-
y 轴:垂直向下 -- 注意:y 轴下面是正值,上面是负值
-
z 轴:垂直屏幕 -- 注意:往外边的是正值,往里面的是负值
<img src="images\sanwei.png">
-
二、3D
转换
-
3D
转换知识要点-
3D
位移:translate3d(x, y, z)
-
3D
旋转:rotate3d(x, y, z)
- 透视:
perspctive
-
3D
呈现transfrom-style
-
-
3D
移动translate3d
-
3D
移动就是在2D
移动的基础上多加了一个可以移动的方向,就是 z 轴方向 -
transform: translateX(100px)
:仅仅是在 x 轴上移动 -
transform: translateY(100px)
:仅仅是在 y 轴上移动 -
transform: translateZ(100px)
:仅仅是在 z 轴上移动 -
transform: translate3d(x, y, z)
:其中x、y、z 分别指要移动的轴的方向的距离 - 注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充
- 语法
transform: translate3d(x, y, z)
- 代码演示
transform: translate3d(100px, 100px, 100px)
/* 注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充 */
transform: translate3d(100px, 100px, 0)
三、透视 perspective
-
知识点讲解
- 如果想要网页产生
3D
效果需要透视(理解成3D
物体投影的2D
平面上) - 实际上模仿人类的视觉位置,可视为安排一直眼睛去看
- 透视也称为视距,所谓的视距就是人的眼睛到屏幕的距离
- 距离视觉点越近的在电脑平面成像越大,越远成像越小
- 透视的单位是像素
- 如果想要网页产生
-
知识要点
- 透视需要写在被视察元素的父盒子上面
- 注意下方图片
-
d:就是视距,视距就是指人的眼睛到屏幕的距离
-
z:就是 z 轴,z 轴越大(正值),我们看到的物体就越大
-
-
代码演示
body { perspective: 1000px; }
四、 translateZ
-
translateZ
与perspecitve
的区别
-
perspecitve
给父级进行设置,translateZ
给 子元素进行设置不同的大小
五、3D
旋转rotateX
3D 旋转指可以让元素在三维平面内沿着 x 轴、y 轴、z 轴 或者自定义轴进行旋转
-
语法
-
transform: rotateX(45deg)
-- 沿着 x 轴正方向旋转 45 度 -
transform: rotateY(45deg)
-- 沿着 y 轴正方向旋转 45 度 -
transform: rotateZ(45deg)
-- 沿着 z 轴正方向旋转 45 度 -
transform: rotate3d(x, y, z, 45deg)
-- 沿着自定义轴旋转 45 deg 为角度
-
-
代码案例
div {
perspective: 300px;
}
img {
display: block;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateX(-45deg)
}
-
左手准则
-
左手的手拇指指向 x 轴的正方向
-
其余手指的弯曲方向就是该元素沿着 x 轴旋转的方向
-
六、3D
旋转 rotateY
- 代码演示
div {
perspective: 500px;
}
img {
display: block;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateY(180deg)
}
-
左手准则
-
左手的拇指指向 y 轴的正方向
-
其余的手指弯曲方向就是该元素沿着 y 轴旋转的方向(正值)
-
七、 3D
旋转 rotateZ
- 代码演示
div {
perspective: 500px;
}
img {
display: block;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateZ(180deg)
}
rotate3d
-
transform: rotate3d(x, y, z, deg)
-- 沿着自定义轴旋转 deg 为角度 - x, y, z 表示旋转轴的矢量,是标识你是否希望沿着该轴进行旋转,最后一个标识旋转的角度
-
transform: rotate3d(1, 1, 0, 180deg)
-- 沿着对角线旋转 45deg -
transform: rotate3d(1, 0, 0, 180deg)
-- 沿着 x 轴旋转 45deg
-
-
代码演示
div { perspective: 500px; } img { display: block; margin: 100px auto; transition: all 1s; } img:hover { transform: rotate3d(1, 1, 0, 180deg) }
3D
呈现transform-style
transform-style
- 控制子元素是否开启三维立体环境
-
transform-style: flat
代表子元素不开启3D
立体空间,默认的 -
transform-style: preserve-3d
子元素开启立体空间 - 代码写给父级,但是影响的是子盒子
meta视口标签的主要目的:
布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们布局的视口就多宽,我们开发最终会用理想视口,而理想视口就是将布局视口的宽度修改为视觉视口。
box-sizing: border-box;CSS3中的盒子模型:CSS中设置的宽度width 里面包含了 border 和 padding , padding 和 border 不会撑大盒子。
/*移动端特殊样式*/
//meta 标签
<meta name="viewport" content="width=device-width, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
//CSS3盒子模型
box-sizing: border-box;
-webkit-box-sizing: border-box;
/*点击高亮我们需要清除清除 设置为transparent 完成透明*/
-webkit-tap-highlight-color: transparent;
/*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-appearance: none;
/*禁用长按页面时的弹出菜单*/
img,a { -webkit-touch-callout: none; }
流式布局,就是百分比布局,也称非固定像素布局。通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制。
二倍图
我们本身需要一个5050像素(css像素)的图片,但如果就这样直接放到我们的iphone8里面就会被放大2倍,成为100100 就会模糊
我们采取的是直接放一个 100* 100 图片,然后手动的把这个图片设置为 50* 50,这样放到iphone8里面就不会模糊了,
我们准备的图片,比我们实际需要的大2倍,这就方式就是 2倍图
<!-- 模糊的 -->
<img src="images/apple50.jpg" alt="">
<!-- 我们采取2倍图 -->
<img src="images/apple100.jpg" alt="">
<!--css部分 -->
img:nth-child(2) {
width: 50px;
height: 50px;
}
实际做法是准备一张二倍图放进去,然后手动把图片设置缩小一倍,也就是按照测试像素设置即可。
background-size: 背景图片宽度 背景图片高度;
div {
width: 50px;
height: 50px;
border: 1px solid red;
background: url(images/apple100.jpg) no-repeat;
background-size: 50px 50px;
}
/* 1. 我们有一个 50 * 50的盒子需要一个背景图片,但是根据分析这个图片还是要准备2倍, 100*100 */
/* 2. 我们需要把这个图片缩放一半,也就是 50*50 background-size*/
Normalize.css:保护了有价值的默认值,修复了浏览器的bug
flex布局
Flex布局原理就是:给父盒子添加flex属性,来控制子盒子的位置排列方式从而实现flex布局。当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。Flex布局又叫伸缩布局、弹性布局、伸缩盒布局、弹性盒布局、flex 布局。
flex-direction
默认的主轴是row,x轴。
flex-direction:column;将主轴改为y轴,纵轴
justify-content
能够设置主轴子元素排列形式,
flex-start默认值,所有子元素在主轴头部显示,左对齐
flex-end所有子元素在主轴尾部显示,右对齐
flex-center所有子元素在主轴居中对齐,居中对齐
space-around所有子元素平分剩余空间,平分对齐,
space-between所有子元素先两边贴边在平分剩余空间,两边贴边中间平分
flex-wrap
控制布局是否换行,默认不换换nowrap
align-items
设置侧轴子元素排列(单行),如果是多行使用align-content
flex-start 表示从头开始
flex-end 表示从结尾开始
center 表示居中显示
stretch 会将子元素拉伸
Align-content适应于换行多行的情况, 可以设置 上对齐、 下对齐、居中、拉伸以及平均分配剩余空间等属性值
单行用align-items,多行用align-content
flex用来设置分配剩余空间的比列
比如一个父盒子里面三个子盒子,分别左中右,给父盒子开启flex布局,左右的盒子宽度固定,中间的盒子设置flex:1即可占据剩余全部。
align-self控制子项自己在侧轴上的排列方式
align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。
span:nth-child(2) {
/* 设置自己在侧轴上的排列方式 */
align-self: flex-end;
}
order 属性定义项目的排列顺序,数值越小,排列越靠前,默认为0。
注意:和 z-index 不一样。
.item2 {
order: -1;
}
网友评论