CSS样式基础知识

CSS选择器

就是找了一个统一的位置,去存放样式。然后将改样式作为模板,运用于其他的类似的标签上,节省了代码量。需要存放在标签中,然后放入head标签中

选择器类型

  • 标签选择器 head html div等

  • 类别选择器 class=“xxx”

    • 一个对象可以有多个类名,任何一个类名都可以被选中。<p class=“class1 class2”><\p>,在这个里面 .class1, .class2都可以用来选中对象
    • 一个类名可以被多个对象使用。于是与ID只能选择一个对象不同,可以通过class选择多个对象。
  • ID选择器 只能选择一个(ID名不可以重复)(注意:在企业开发中,如果仅仅是为了设置样式,一般不会用ID选择器,因为ID是留给JS使用的。)

  • 通用选择器,指定全局性的规则(一般用于将全局的padding和margin置为0)

  • 后代选择器 div p :中间用空格。注意,后代不仅仅是直接后代,孙子,曾孙子都可以。

<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        div p{
            color: red;
        }
    </style>
</head>
<body>
   <p>我是段落</p>
   <div>
       <p>我是段落</p>
       <ul>
           <li><p>我是段落</p></li> <!--这里虽然被li包围,但是函数属于div的后代-->
       </ul>
       <p>我是段落</p>
   </div>
    <p>我是段落</p>
</body>
</html>
  • 子元素选择器:div>p 中间用>:找到直接的儿子,不管孙子那些。
<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
      div>p{
          color: red;
      }
    </style>
</head>
<body>
   <p>我是段落</p>
   <div>
       <p class="duanluo">我是段落</p>
       <ul>
           <li><p>我是段落</p></li> <!--这里的P不是直接的儿子,因此不会被选中-->
       </ul>
       <p>我是段落</p>
   </div>
    <p>我是段落</p>
</body>
</html>
  • 并集选择器:用逗号连接。head, hetml, div{} 可以一起写
<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
      div, p, .content{
          color: red;
      }
    </style>
</head>
<body>
    <div>我是内容</div>
    <p>我是内容</p>
    <h1 class="content">我是内容</h1>
</body>
</html>
  • 交集选择题:divp:中间什么都不写,直接连接起来
<html >
<head>
    <meta charset="utf-8">
    <title></title>
   <style type="text/css">
       .cont1.cont2{
           color: red;
       }
    </style>
</head>
<body>
    <p class="cont1">我是内容</p>
    <p class="cont1 cont2">我是内容</p>
</body>
</html>
  • 兄弟选择器:如果只选择最近的一个兄弟,用+号,如果选择接下来好多个一摸一样的兄弟,用~
<!--把+号改成~号可以看到不一样的效果-->
<html >
<head>
    <meta charset="utf-8">
    <title></title>
   <style type="text/css">
       h1+p{
           color: red;
       }
    </style>
</head>
<body>
    <h1>我是标题</h1>
    <p class="cont1">我是内容</p>
    <p class="cont1 cont2">我是内容</p>
    <p class="cont1 cont2">我是内容</p>
    <h1>我是标题</h1>
    <p class="cont1">我是内容</p>
    <p class="cont1">我是内容</p>
    <p class="cont1">我是内容</p>
    <p class="cont1">我是内容</p>
    <p class="cont1">我是内容</p>
</body>
</html>
  • 序列选择器(针对选择同级别中的元素)
    内容太多,请参考链接

  • 属性选择器
    1.E[att]{}:选取带有指定属性的元素
    2.E[att=“val”]:选取带有指定属性和值的元素
    3.E[att~=“val”]:选取属性值中包含指定词汇的元素(不常用 )
    4.E[att^=“val”]:属性以指定元素开头
    5.E[att$=“val”]:属性以指定元素结尾
    6.E[att*=“val”]: 属性包换指定的元素

<html >
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">		
			div[dfsfdsfdffsfsfd]{background-color: red; height: 400px; width: 200px;}
			div[dfsfdsfdffsfsfd="cat"]{margin:0 auto; border: 5px blue solid;}
			div[dfsfdsfdffsfsfd^='c']{margin: 0 0;} /* 4 */
			div[dfsfdsfdffsfsfd$='g']{margin: 0 auto;} /* 5 */
			div[dfsfdsfdffsfsfd*='a']{margin-left:500px}/* 6 */
		</style>
	</head>
	<body>	
		<div dfsfdsfdffsfsfd = "dog"></div> <!-- 这个属性可以自己随便设置 --> <!-- 类型1 -->
		<div dfsfdsfdffsfsfd = "cat"></div><!-- 类型2 -->
		
		</div>
		
	</body>
</html>
  • 伪类选择器

找到一个标签,在这个标签的内容前面添加一个子元素,在这个标签的后面添加一个子元素。
::after ::before

  • :target:突出显示活动的HTML锚,就是锚点链接会出现高亮显示。
<html >
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">		
		:target{background-color: green;}
		
		</style>
	</head>
	<body>	
		<a href="#title1">跳转到标题1</a><a href="#title2">跳转到标题2</a>
		<h1 id="title1">标题1</h1>
		<h1 id="title2">标题2</h1>
		
	</body>
</html>

CSS三大特性

继承性

  • 并不是所有的属性都可以继承,只有以color/text-/font-/line-开头的属性才可以继承。
  • 不仅儿子可以继承,所有的后代都可以继承。
  • 有两个特殊的例子,
    • a标签的颜色和下划线是不可以继承的,需要认为设定。
    • h标签的字体大小是不可以继承的。

     常常应用于设置整个页面的字体,颜色等body{font,color}

<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        div{
            color: red;
            background: green;
        }

    </style>
</head>
<body>
<div>
    <p>我是段落</p>
    <ul>
        <li>我是段落</li>
    </ul>
</div>
</body>
</html>

层叠性
可以通过多个选择方式选中元素时,样式根据优先级发生了覆盖。

优先级

  • 判断方式1:直接选中的优先级>间接选中(继承)。而对于间接选中,谁离元素近就选谁。
<!--因为ul距离li比div近,因此继承ul的蓝色,而不是div的红色。如果直接设置li,那就是绿色-->
<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        ul{
            color: blue;
        }

        div{
            color: red;
        }
        /*li{*/
        /*    color: green*/
        /*}*/

    </style>
</head>
<body>
<div>
    <div>
        <ul>
            <li>我是段落</li>
        </ul>
    </div>
</div>
</body>
</html>
  • 判断方式2:如果是同类型的选择器,那么谁写在后面听谁的。
<!--绿色-->
div{
    color: red;
}
div{
    color: green;
}
  • 如果是不同类型的选择器
优先级样式权重
1行内样式<…style=""…>1000
2ID选择器#box100
3类选择器.item{}10
4标签选择器div{}1
5通用选择器*{}0
6继承
7浏览器默认

例如遇到:
box p .tt -----> 100+1+10
box .tt -----> 100+10
权重越大,代表优先级越高,代表被优先使用。具体遇到的时候,不用这么详细地记住,但是如果是为了寻找更加具体(深层)的标签,那么优先级肯定越高。

  • 优先级提升
    !important可以用来提升属性的优先级,注意点如下:
  1. 只能用于直接选中,不能用于间接选中
  2. 只能提升对应的属性。其他的属性不管
<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">

        .duanluo{
            color: red;
        }
        p{
            color: blue !important;
        }

    </style>
</head>
<body>
    <p class="duanluo">我是段落</p>
</body>
</html>

常用Style属性

文本属性

  • font-family 语法:font-family:字体1, 字体2, 字体3
    • 依次按照顺序寻找字体
    • 如何在一条语句中区分英文和中文的样式:font-family: “Times New Roman”, ‘宋体’。(因为英文的样只会匹配英文,当中文找不到对应的样式时,就自动匹配了后面的中文样式,由此起到了区分的作用。)
    • 中文字体需要加双引号
    • 带空格的英文字体需要加双引号 Times New Roman
    • 不带空格的英文字体不需要加双引号 Arial
  • font-weight:字体加粗 bolder/bold/normal/100-900
  • font-size:
  • font-style:italic/oblique/normal 字体倾斜,斜/更斜/正常
    • 注意:针对font-style/font-weight/font-size/font-family,有一个更加快捷的写法
      font:italic bold 20px 楷体"。注意:size的位置一定要在family的前面,不能交换。style和weight的位置可以交换。size和family一定要在所有属性的最后。其中size和famile是一定要写的,其他的可以省略。
    • 注意:fontsize这里,可以加上斜杠,表示第二个值是line-height;具体课看一下官方文档。
  • text-align: left/right/center/justify(两端对齐)
  • line-height:行高,文字在行高中默认是垂直居中的。所以为了句子在容器中垂直居中,可以将容器的高和字体的行高设置为一样。但是如有有多行文字,就只能用小盒子嵌套在大盒子中的方法来进行设置了,需要把文字用P标签进行包裹,然后看成一个整体。行高=文字大小(fontsize)+上边距+下边距
  • text-decoration: none/underline/overline/line-through 无/下划线/上划线/删除线
  • text-indent: 60px 文字缩进 一般是2em。1个em表示缩进一个文字的宽度

列表属性

  • list-style-type:disc/circle/square/none(实心圆、空心圆、实心方块、去掉列表符号)
  • list-style-image: url()使用图片作为列表符号
  • list-style-position:outside/inside (就是前面的符号点,是不是和后面的文字作为一个整体出现)
  • list-style:none去掉列表样式

背景属性

背景图片只是一种样式,不会溢出。而插入的图片,如果尺寸不合适,会有溢出的效果。

  • background-image:url()插入背景图片。整个html文档会发给服务器解析,其中遇到图片又会发送新的请求去解析图片。有几幅图就会发送几次请求,可以在开发者工具的Network中查看。

  • background-color:

  • background-repeat: no-repeat/repeat/repeat-x/repeat-y 不平铺/平铺/横向平铺/纵向平铺。应用:可以通过平铺,降低背景图片的大小,提升网页的访问速度,因为每次都要从服务器下载背景图片。(例如纯色的导航条)

  • background-positon: 值1控制水平(left/center/right), 值2控制垂直(top/center/bottom) 。如果只写一个值,那么第二个值默认是center。除此之外,还可以用%,或者是具体的数值来表示位置。应用:让最重要的信息作为背景居中显示,这样无论页面变大变小,信息都会出现。而如果采用img的方式,会出现滚动条,这是不推荐的。

  • background: 颜色,链接,位置,repeat…可以都写在一起,以减少代码量。

  • background-attachment:fixed/scroll。当出现滚动条的时候,背景图片会不会随着滚动条的滚动而变化。fixed就是保持不动。可以参考官网。

  • background-size:设置背景图片的大小

    • num1 num2: 直接定死图片大小,会失真
    • num% num% :按照窗口的大小,对图片进行缩放,会失真
    • num auto: 按照高度缩放比例,进行等比缩放,不会失真
    • auto num: 按照宽度缩放比例,进行等比缩放,不会失真
    • cover: 对图片进行等比缩放,直到宽、高都能覆盖整个页面
    • contain: 对图片进行等比缩放,宽高覆盖其中一个就行。
  • background-clip:(规定背景颜色等布局的位置)

    • border-box:背景从边框开始放置
    • padding-box:背景从padding区域开始
    • content-box:背景从content部分开始
  • background-origin:(规定背景图片等布局开始的位置)

    • border-box:背景图片从边框开始放置
    • padding-box:背景图片从padding区域开始
    • content-box:背景图片从content部分开始
  • 多重背景:可以插入多个背景,先插入的会覆盖后插入的。但是插入的图片都在top:0,left:0的位置,可以通过background-position对其进行调整。
    在这里插入图片描述

位置属性

position
语法:{position : static/absolute/relative/fixed }
position: absolute; left:0px; top:0px;可以这样写

  • static : 默认值,不具有位置
  • absolute: 绝对位置
  • relative:绝对位置
  • fixed: 在窗口上固定的一个位置。

如果,存在一个嵌套关系,那么absolute和ralative是一样的。都是相对于父容器作为参照物。
如果是一个平级关系,那么absoulute参照网页的最左上角。relative参照该容器的上一个容器的位置。
如果position设置为absolute, 那么这个位置将会空出来。下面的容器将会顶上来。

z-index
{z-index: auto/number}
当网页上发生层叠时,较大的值会覆盖在较小的值上面
但是,要先必须设置position后,方可使用。

宽度、高度自适应属性

  • min-height: 维持一个边框,如果文字超过边框,则边框进行扩展
  • max-height:维持一个边框,最大不能超过这个边框,如果内容小,边框随之减小。
  • max-width,min-width同理

box-shadow:

  • 左右偏移 上下偏移 模糊距离 阴影扩展的距离 阴影颜色 内/外阴影(通常指定前三个就好)。
  • 本身阴影的大小和元素是一样大的。通过上面这六个属性进行阴影的位置、大小的更改。

text-shadow:

  • 左右偏移 上下偏移 模糊距离 阴影颜色 (和盒子阴影一样,只是参数只有四个)

盒子模型

在这里插入图片描述
主要由四部分组成:内容(我们指定的width,height)+padding+border+margin
border: 2px solid/dashed/dotted/double(双线) red 边框像素 线性 颜色

  • 也可以单独设置border border-bottom/border-left/border-right/border-top
  • 也可以border-width,border-color, border-style这样统一设置。如果是四个值,那就是分别对(上、右、下、左)进行设置。如果设置是两个值,那就是分别对(上下、左右)进行设置
  • 甚至还可以设置地更加具体:border-top-width,border-top-style,border-top-color,其他地以此类推。
  • 如果不想要哪条边框,直接设置为none即可。例如border-bottom:none
    在这里插入图片描述
<!DOCTYPE html>
<html >
	<head>
		<meta charset="utf-8">
		<title></title>
		
	</head>
	<style type="text/css">
		#a{
			height: 200px; width: 200px;
			border-width: 3px;
			background : lightyellow;
			border-style: solid dashed;
			border-color: green red purple blue;
		}
	</style>
	
	<body>	
		<div id="a">			
		</div>
	</body>
</html>

padding:

  • padding:padding是额外加上去的,当加上padding的时候,就需要人为进行调整了。同样的,border此类也是额外加上去的。所以原来的容器尺寸会变大。格式也是:上 右 下 左
  • padding-top/padding-bottm/padding-left/padding-right

magin

box-sizing
由于加上boder,padding之后会引起元素尺寸的变化。CSS3增加了box-sizing属性,如果取值设置为content-box,那么原来的元素会变大。如果设置为border-box,则会保证原来的尺寸不变,缩减内容部分的尺寸来弥补。

设置小盒子在大盒子中水平垂直居中


浮动流(脱离标准流)

什么是浮动?
1.当一个元素浮动之后,这个元素看着从标准流中删除了一样。如果前面一个元素浮动了,后面一个元素没有浮动,则前面一个元素会盖住后面一个元素。设置方式为float:left/right.
2.浮动流是一种半脱离标准流的排版方式(浮动前在哪一行,浮动后就在哪一行)。它只有左对齐和右对齐。margin:0 auto对它无效。
3.元素浮动后,不区分块级、行内、行内块级。且所有的标签都可以设置宽高(有点类似行内块级的功能)

浮动的排序规则
1.在同一个方向上,先浮动的靠前,后浮动的靠后
2.在不同的方向上,左浮动找左浮动,右浮动找右浮动
3.元素浮动后的位置,由浮动元素浮动前在标准流中的位置决定。

如图所示:将1,3设置为浮动,2,4不变。其细节变化如下:
1号脱离标准流,2,3,4移动到一号的位置,此时1号覆盖在2,3,4上。
3号脱离标准流,因为2号并没有脱离标准流,所以2号占了一行。所以此时4号移动上来,贴在2号的下面,3号再覆盖到4号上面。(所以说浮动是半脱离标准流,因为3号在浮动的时候,考虑了2号的位置关系。)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
浮动元素的贴靠
在这里插入图片描述
浮动元素的字围现象
如果上方的正方形设置了float,那么在父元素中输入文字的时候,会出现字围现象。
在这里插入图片描述


定位流(不脱离标准流)

相对对位

  • postion: relative

  • 相对于自己之前在标准流中的定位,配合top/right/bottom/left使用。

  • 同一个方向上:用了left就不要用right,用了top就不要用right

  • 由于相对定位不脱离标准流,因此是区分块级、行内块级、行内元素的(设置height、weight)

  • 经常和absolute配合使用

  • 当给设置了定位流的元素添加margin等属性时,改变的是原来的元素,而不是定位完之后的元素(因为原来的元素并没有脱离标准流)

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            width: 100px;
            height: 100px;
        }
        .box1{
            background-color: red;
        }
        .box2{
            background-color: blue;
            position: relative;
            top: 10px;
            left: 10px;
            margin-top: 30px /*改变的是原来的位置,原来的移动30px后,再执行relative的属性*/
        }
        .box3{
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
</body>
</html>

绝对定位

  • postion: absolute

  • 绝对定位脱离标准流。(下面有元素的话会顶上来)且脱离的标准流之后,不区分块级、行内等,因此它可以设置宽高,有点类似于float。

  • 绝对定位对针对body来进行设置left,right,bottom,left。这个body指的是初始化的窗口大小,而不是整个html页面的大小。也就是说,定位好的元素会随着滚动条的移动而变化。

  • 绝对定位的参考:在一般情况下是body。如果祖先设置了Postion: relative/absolute/fixed,那么就会以祖先为参考。如果有多个祖先都设置了(例如,父亲设置了,祖父也设置了),那么会以距离最近的作为参考。

  • 一个绝对定位的元素会忽略祖先元素的padding。
    在这里插入图片描述
    入图所示:父元素设置了postion,boder,padding。子元素设置了postion,但是忽略了父元素设置的padding。像是在父亲给定的空间中,浮动起来了。

  • 如何让一个元素相对于其父元素水平居中。

<!--
1.将其设置为Postion:absolute
2.将其left,top个设置为50%
3.将margin-left,margin-top设置为元素大小的一半。
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            height: 500px;
            width: 500px;
            background-color: red;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -250px;
            margin-top: -250px;
        }

    </style>
</head>
<body>
    <div></div>
</body>
</html>
  • 一般来说,看到有元素覆盖在另一个元素上面的时候,都要想到用定位,父元素用relative,子元素用absolute。

固定定位

  • postion: fixed
  • 固定定位的元素是脱离标准流的,不会占用标准流的空间。也能设置宽高等。这些特性和absolute都是一样的
  • 区别:下拉条就算在拉动,元素还是保证在页面窗口中保持不变。

z-index

  • 默认情况下所有的元素都有一个默认的z-index,取值为0。
  • 定位流的z-index大于标准流
  • 如果没有指定z-index,后面编写的元素会覆盖住前面编写的元素。如果有设置,值大的覆盖值小的。
  • 如果两个元素的父元素没有设置z-index,两个子元素按照正常的流程进行比较。如果两个父元素设置了z-index,那么子元素设置的z-index会失效。即父元素谁大,就在上方。

过渡模块

transition:

<!--
1.hover里面写的是,改变后的尺寸。
2.原来的元素里面要写上:property,duration,delay,timing-function等属性。
3.如果有多个属性需要修改,就并排写,中间用逗号分开。
4.例子里面注意写法:移动到box1上面,但是修改的是box2的样式。
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
       .box1{
           width: 200px;
           height: 200px;
           background-color: yellow;

       }
        .box2{
            width: 100px;
            height: 100px;
            background-color: skyblue;
            transition-property: width,background-color ;
            transition-duration: 5s,5s;
            transition-delay: 2s,2s;
            transition-timing-function: linear, linear;
        }

       .box1:hover .box2{
           width: 500px;
           background-color: red;
       }


    </style>
</head>
<body>

<div class="box1">
<!--    在滑过box1的时候,对box2的形状进行改变-->
    <div class="box2"></div>
</div>

</body>
</html>
<!--
1.transition连写:property duration linear delay,中间用空格。
2.如果有多个属性需要修改,那中间用逗号分开。
3.连写的时候可以省略后面的两个参数。
4.如果要指定所有元素的运行时间:transition: all 5s。
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
       .box1{
           width: 200px;
           height: 200px;
           background-color: yellow;
           transition: width 2s linear 0s, background-color 2s linear 0s;
       }
       .box1:hover {
           width: 500px;
           background-color: red;
       }
    </style>
</head>
<body>
<div class="box1"></div>
</body>
</html>
<!--
手风琴效果的应用
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>92-过渡模块-手风琴效果</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        ul{
            width: 960px;
            height: 300px;
            margin: 100px auto;
            border: 1px solid #000;
            overflow: hidden;
        }
        ul li{
            list-style: none;
            width: 160px;
            height: 300px;
            /*background-color: red;*/
            float: left;
            border: 1px solid #000;
            box-sizing: border-box;
            /*transition-property: width;*/
            /*transition-duration: 0.5s;*/
            transition: width 0.5s;
        }
        ul:hover li{
            width: 100px;
        }
        ul li:hover{
            width: 460px;
        }
    </style>
</head>
<body>
<ul>
    <li><img src="images/ad1.jpg" alt=""></li>
    <li><img src="images/ad2.jpg" alt=""></li>
    <li><img src="images/ad3.jpg" alt=""></li>
    <li><img src="images/ad4.jpg" alt=""></li>
    <li><img src="images/ad5.jpg" alt=""></li>
    <li><img src="images/ad6.jpg" alt=""></li>
</ul>
</body>
</html>

2D效果

  • transform : rotate(30deg)
  • transform:translate(100px, 200px)
  • transform:translateX(100px):
  • transform:translateY(200px)
    • 注意旋转命令会改变该元素的横纵坐标轴。也就是说,当一个物体先旋转,再平移的时候,不会朝着水平方向,而是旋转了多少度的那个方向。

在这里插入图片描述

```html
<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        div{width:100px; height: 100px; border: 2px green solid; margin: 50px auto; transition: all 5s ;}

        div:nth-child(6):hover{
            transform:  rotate(30deg) translate(100px, 100px);
        }
    </style>
</head>
<body>
<div>点击放大</div>
<div>按照左上角进行旋转30°</div>
<div>X轴平移,Y轴平移</div>
<div>X轴Y轴各缩放2倍</div>
<div>X轴Y轴按30°方向扭曲</div>
<div>所有效果进行叠加</div>
</body>
</html>
  • transform:scale(100px, 200px)
  • transform:scaleX(100px)
  • transform:scaleY(200px)
  • transform:skew(30deg, 30deg)
  • transform:skewX(30deg)
  • transform:skewY(30deg)
  • transform-origin(横坐标值,纵坐标值) ,可以用具体数值/top left等值/百分数
    • 注意:元素的中线点与元素的本身有关。即当我先发生平移等运动时,元素的中心点随之发生了变化。

注意:对元素做变化的属性,例如transform写在hover这种动作里。而设置的命令,例如transition,transform-origin写在元素的属性里。
注意:

<html >
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        div{width:100px; height: 100px; border: 2px green solid; margin: 50px auto; transition: all 2s; transform-origin: left top;}
        div:nth-child(1):hover{width: 200px; height: 200px; }
        div:nth-child(2):hover{transform: rotate(30deg);}
        div:nth-child(3):hover{transform: translate(50px, 50px);}
        div:nth-child(4):hover{transform: scale(2,2); }
        div:nth-child(5):hover{ transform: skew(30deg, 30deg);}
        div:nth-child(6):hover{transform: rotate(30deg) translate(50px, 50px) scale(2,2) skew(30deg, 30deg); width: 200px; height: 200px;}
    </style>
</head>
<body>
<div>点击放大</div>
<div>按照左上角进行旋转30°</div>
<div>X轴平移,Y轴平移</div>
<div>X轴Y轴各缩放2倍</div>
<div>X轴Y轴按30°方向扭曲</div>
<div>所有效果进行叠加</div>
</body>
</html>

perspective
在进行rotateX,rotateY,rotateZ时,为了更好地观察旋转的程度,可以给旋转元素的父元素设置perspective属性,值越小,效果越明显。

<!--因为要观察inner,所以需要给它的父元素outer设置-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"

    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .outer{
            width: 200px;
            height: 300px;
            background-color: lightcyan;
            border: 1px solid #000;
            box-sizing: border-box;
            margin: 0 auto;
            margin-top: 200px;
            perspective: 400px; 

        }
        .inner{
            width: 200px;
            height: 300px;
            background-color: red;
            transform-origin: center bottom;
            transition: all 2s;
        }
        .outer:hover .inner{
            transform: rotateX(90deg);
        }
    </style>
</head>
<body>
<div class="outer">
    <div class="inner"></div>
</div>
</body>
</html>

动画模块

动画就是在不用鼠标操控下就可以自动进行播放的属性。

<!--
形式1:from...to...
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            background-color: red;
            animation: aaa 2s;


        }
        @keyframes aaa {
            from{
                margin-left: 0;
            }
            to{
                margin-left: 400px;
            }
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>
<!--如果要设置多段动画,就可以用%-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 200px;
            height: 200px;
            background-color: yellow;
            animation: aaa 2s;
            animation-iteration-count: infinite;
        }
        .box1:hover{
            animation-play-state: paused;
        }
        @keyframes aaa {
            0%{

                    margin-left: 0;
                    margin-top: 0;
            }
            25%{
                margin-left: 200px;
                margin-top: 0;
            }
            50%{
                margin-left: 200px;
                margin-top: 200px;
            }
            75%{
                margin-left: 0px;
                margin-top: 200px;
            }
            100%{
                margin-left: 0px;
                margin-top: 0;
            }
        }
    </style>
</head>
<body>

<div class="box1">

</div>

</body>
</html>

其他的属性都比较好理解,只有下面这个属性。。。。

<!--
在默认状态下,物体是正方着放animation-fill-mode:none
1.backward:开始保持保持第一个状态的样子(旋转10°)
2.forward:结束保持保持最后一个状态的样子(旋转70°)
3.both:开始也有状态,结束也有状态
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 200px;
            height: 200px;
            background-color: red;
            margin: 0 auto;
            margin-top: 200px;
            animation: aaa 5s;
            animation-delay: 2s;
            /*animation-fill-mode: backwards;*/
        }
        @keyframes aaa {
            0%{
                transform: rotate(10deg);
            }
            50%{
                transform: rotate(50deg);
            }
            100%{
                transform: rotate(70deg);
            }
        }
    </style>
</head>
<body>
<div class="box1"></div>
</body>
</html>


三维

如果要一个物体具备3d效果,只需要给他的父元素设置transform-style: preserve-3d;

<!--制作一个立方体-->
<!--
只要记住四个面:分别先设置顶部,后面,底部,前面(90,180,270,360)
设置4个面的时候,因为旋转导致3个轴的位置也发生了变化,所以是在Z轴平移。
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            width: 200px;
            height: 200px;
            border: 1px solid #000;
            box-sizing: border-box;
            margin: 150px auto;
            position: relative;
            transform-style: preserve-3d;
            /*transform: rotateX(0deg) rotateY(0deg);*/
            animation: rotate 5s
        }
        li{
            list-style: none;
            width: 200px;
            height: 200px;
            font-size: 50px;
            line-height: 200px;
            text-align: center;
            position: absolute;
        }
        li:nth-child(1){
            background-color: red;
            transform: rotateX(90deg) translateZ(100px);

        }
        li:nth-child(2){
            background-color: orange;
            transform: rotateX(180deg) translateZ(100px);

        }
        li:nth-child(3){
            background-color: yellow;
            transform: rotateX(270deg) translateZ(100px);

        }
        li:nth-child(4){
            background-color: green;
            transform: rotateX(360deg) translateZ(100px);

        }
        li:nth-child(5){
            background-color: blue;
            transform: translateX(100px) rotateY(90deg);

        }
        li:nth-child(6){
            background-color: purple;
            transform: translateX(-100px) rotateY(90deg);

        }
        @keyframes rotate {
            0%{
                transform: rotateX(0deg) rotateY(0deg);
            }
            50%{
                transform: rotateX(180deg) rotateY(180deg);
            }
            100%{
                transform: rotateX(360deg) rotateY(360deg);
            }
        }

    </style>
</head>
<body>

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>


</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值