一幅长文细学HTML5和CSS3(三)——CSS3(下)

举报
ArimaMisaki 发表于 2022/08/17 15:28:26 2022/08/17
【摘要】 CSS3的基本使用

3.23 CSS3新特性

CSS3的现状

  • 新增的CSS3特性有兼容性问题,ie9+才支持
  • 移动端支持优于PC端
  • 不断改进中,应用相对广泛

3.23.1 属性选择器

属性选择器可以更具特定属性来选择元素,这样就不用借助与类或id选择器。

选择符 简介
E[att] 选择具有att属性的E元素
E[att = “val”] 选择具有att属性且属性值等于val的E元素
E[att^“val”] 匹配具有att属性且值以val开头的E元素
E[att$=“val”] 匹配具有att属性且值以val结尾的E元素
E[att*=“val”] 匹配具有att属性且值中含有val的E元素

程序清单3_23_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>
        /* E[att] */
        div[class]{
            background-color: rgb(248, 127, 147);
        }

        /* E[att = "val"] */
        div[id = "Test2"]{
            background-color: skyblue;
        }

        /* E[att^"val"] */
        div[id ^= "tes"]{
            background-color: gold;
        }

        /* E[att$="val"] */
        div[id $= "4"]{
            background-color: red;
        }

        /* E[att*="val"] */
        div[id *= "on"]{
            background-color: green;
        }

        div{
            height:200px;
            margin: 2px;
        }
    </style>
</head>
<body>
    <div class = "Test1"></div>
    <div id = "Test2"></div>
    <div id = "test3"></div>
    <div id = "Test4"></div>
    <div id = "ontest5"></div>
</body>
</html>

3.23.2 结构伪类选择器

结构伪类选择器主要根据文档结构来选择器元素,常用于根据父级选择器里面的子元素

选择符 简介
E:first-child 匹配父元素中的第一个子元素E
E:last-child 匹配父元素中的最后一个子元素E
E:nth-child(n) 匹配父元素中的第n个子元素E
E:first-of-type 指定类型E的第一个
E:last-of-type 指定类型E的最后一个
E:nth-of-type(n) 指定类型E的第n个

说明:nth-child

nth-child选择器可以选择某个父元素的一个或多个特定的子元素

  • n可以是数字、关键字和公式
  • n如果是数字,就是选择第n个子元素,里面数字从1开始
  • n可以是关键字:even偶数,odd奇数
  • n可以是公式,公式的变量仅仅只能使用字母n。若公式只填n则选择器从0开始计算,但是第0个元素或者超出了元素的个数会被忽略,可以理解为此时选择器相当于全选子元素。也可以填2n,3n之类的,或者2n+1啥的,看你需求了。

区别:child和type

child要求类型指定正确,如div里套两个标签,先一个p标签后一个div标签,如果此时选用div div:first-child则选不出来p标签也选不出来div标签,因为这样写==意为选取div且第一个元素==,而嵌套的标签中没有符合要求的。

type则不用这么要求,还是上面那个例子,如果选用div div:first-of-type则可以选出div标签,因为这样写==意为选出div中的第一个div标签==。


程序清单3_23_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>
        ul li{
            height:50px;
            width: 100px;
            margin: 2px;
            list-style: none;
        }

        ul li:first-child{
            background-color: skyblue;
        }

        ul li:last-child{
            background-color: pink;
        }

        ul li:nth-child(2){
            background-color: gold;
        }

        /* nth-child选择器可以选择某个父元素的一个或多个特定的子元素 */
        ol li{
            height:50px;
            width: 100px;
            margin: 2px;
            list-style: none;
        }

        ol li:nth-child(even){
            background-color: red;
        }

        ol li:nth-child(odd){
            background-color: blue;
        }

        /* ol li:nth-child(n){
            background-color: yellow;
        } */

        /* ol li:nth-child(2n){
            background-color: yellow;
        } */

        /* child和type */
        div p,div{
            height:50px;
            width: 100px;
            margin: 2px;
            background-color: pink;
        }

        /* 可打开下面的两个标签试着对比 */
        div div:first-child{
            background-color: blue;
        }

        /* div div:first-of-type{
            background-color: blue;
        } */
    </style>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <ol>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ol>
    <div>
        <p></p>
        <div></div>
    </div>
</body>
</html>

3.23.3 伪元素选择器

伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构。

选择符 简介
::before 在元素内部的前面插入内容
::after 在元素内部的后面插入内容

说明:伪元素选择器的使用

  • CSS3引入双冒号是为了将伪类和伪元素区别开来,浏览器也接受由CSS2原来的单冒号写法,即element::before和element:before等价。
  • before和after创建的元素属于行内元素,可以理解为一个最左边的盒子和一个最右边的盒子。该元素在文档树中无法找到,故称为伪元素。
  • before和after必须有content属性
  • before在父元素内容的前面创建元素,after在父元素内容的后面插入元素
  • 伪元素选择器和标签选择器一样,选中为1

程序清单3_23_3

<!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>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        div::before{
            content:'I';
        }

        div::after{
            content:'You';
        }
    </style>
</head>
<body>
    <div>Love</div>
</body>
</html>

3.23.4 盒子模型

CSS3中可以通过box-sizing来指定盒模型。该属性有两个值:content-box(默认)、border-box。

类型 说明
content-box 盒子大小为:width+padding+border
border-box 盒子大小为:width

:一般在初始化时就可以将盒子们全局设定为border-box。


3.23.5 滤镜

filter属性可以将模糊或颜色偏移等图形效果应用于元素,格式为==filter:函数()==,这里我们只讲一个较常用的函数blur模糊,参数传px数值,数值越大越模糊。


3.23.6 计算

calc函数可以用于CSS属性的计算,如宽度不想直接声明具体数值而想先计算再返回值,那就可以使用calc函数。calc函数仅允许加减乘除。

:加减乘除运算符左右必须有两个空格,否则运算失败。


3.23.7 过渡

过渡(transition)是CSS3中具有颠覆性的特征之一。我们可以在不使用Flash动画和js的情况下就能做出过渡动画的效果。其经常和:hover一起搭配使用。

格式:transition:要过渡的属性 花费时间 [运动曲线] [何时运动];

使用方式:谁用过渡给谁加

属性值 说明
过渡属性 想要变化的css属性,宽度高度 背景颜色 内边边距都可以,如果想要全部变化,写all即可
花费时间 单位是s(秒),必须写单位
运动曲线 默认是ease,可以选择其他曲线,见下图
何时开始 单位是s(秒),可以设置延迟触发时间,必须写单位,默认是0s。

image-20220727104228550


程序清单3_23_7

<!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>
        div{
            width: 200px;
            height: 200px;
            background: pink;
            
            border-radius: 200px;

            transition: all 2s;

        }

        div:hover{
            width: 400px;
            height: 400px;
            background: skyblue;

            border-radius: 20px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

3.23.8 2D转换

转换(tansform)是CSS3具有颠覆性的特征之一,可以实现元素的位移、选择、缩放等效果。


移动

语法

  • transform:translate(x,y);
  • transform:translateX(n);
  • transform:translateY(n);

说明

  • 定义2D转换中的移动,沿着X和Y轴移动元素
  • translate最大的优点,就是不会影响其他元素的位置
  • translate中的百分比单位是相对于自身元素的百分比,如一个盒子高30px,使用translataY(50%)实际上是往下移动15px
  • 对行内标签没有效果

旋转

语法:transform:rotate(度数);

说明

  • rotate里面度数要带单位,单位为deg
  • 角度为正则顺时针,负为逆时针
  • 默认旋转的中心点是元素的中心点

缩放

语法:transform:scale(x倍数,y倍数);

说明:scale缩放的最大优势在于可以设置转换中心点缩放,默认以中心点缩放且不影响其他盒子。


旋转、缩放中心点

语法:transform-origin:x y;

说明

  • 注意后面的参数x和y用空格隔开
  • xy默认转换的中心点是元素的中心点(50% 50%)
  • 还可以给xy设置像素或者方位名词

综合写法

语法:transform:translate() rotate() scale()…

说明

  • 综合写法的顺序会影响转换的效果
  • 移动要写在所有属性的最前面

3.23.9 动画

动画(animation)是CSS3具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。


定义动画的方式

@keyframes 动画名称{
	0%{
		width:100px;
	}
	100%{
		width:200px;
	}
}

:from和to等价于0%和100%


调用动画的方式

拥有动画的选择器{
	animation-name: 动画名;
    animation-duration: 动画花费时长;
}

动画序列

通过定义动画序列中一段时间内不同的关键帧所拥有的状态,可以实现一个动画经过多种状态,这是过渡所做不到的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。