当前位置: 首页 > news >正文

HTML与CSS进阶

目录

  • 一、HTML进阶
    • 1. HTML5、XHTML和HTML
    • 2. id属性和class属性
    • 3. 浏览器标题栏小图标
    • 4. 图片语义化
    • 5. fieldset 标签和 legend 标签
    • 6. 列表语义化
    • 7. img标签和背景图片区别
  • 二、HTML5
    • 1. H5新增内容
    • 2. HTML5新增标签
      • 2.1. 新增了哪些语义化标签
      • 2.2. 新增多媒体音频标签
      • 2.3. 新增 input 标签
      • 2.4. 新增表单属性
  • 三、CSS3新增
    • ==1. CSS3属性选择器==
    • ==2. 结构伪类选择器==
    • 4. 2D转换
      • 4.1. 2D 转换之translate
      • 4.2. 2D 转换之rotate
      • 4.3. 2D 转换之scale
      • 4.4. 2D 转换综合写法以及顺序问题
    • 5. 动画(animation)
    • 6. CSS 过渡transition
      • 6.1. 过渡属性transition-property
      • 6.2. 过渡持续时间transition-duration
      • 6.3. 过渡时间函数transition-timing-function
    • 7. 3D转换
      • 7.1. 3D 移动translate3d
      • 7.2. 透视perspective
      • 7.3. 3D 旋转rotate
      • 7.4. 3D呈现transform-style

一、HTML进阶

1. HTML5、XHTML和HTML

1.1. 什么是XHTML

  • XHTML 指「可扩展超文本标签语言」(EXtensible HyperText Markup Language)。

  • XHTML 的目标是取代 HTML。

  • XHTML 与 HTML 4.01 几乎是相同的。

  • XHTML 是更严格更纯净的 HTML 版本。

  • XHTML 是作为一种 XML 应用被重新定义的 HTML,是严格版本的HTML。

  1. XHTML标签必须小写。html文件不区分大小写。

  2. XHTML标签必须闭合。 空标签也需要闭合,例如<br>要写成<br/>。

  3. XHTML标签用id属性代替name属性。
    在XHTML中,除了表单元素之外的所有元素,都应该用id而不是name。

  4. XHTML标签属性必须用引号,单引号、双引号都可以。

1.2. HTML5简述

HTML指的是HTML 4.01, XHTML是HTML的过渡版本,XHTML是XML风格的HTML 4.01。而HTML 5指的是下一代的HTML,也就是HTML 4.01的升级版。

HTML 5已经不再是单纯意义上的标签了,它已经远远超越了标签的范畴。HTML 5 除了新增部分标签之外,还增加了一组技术,包括canvas、SVG、WebSocket.本地存储等。这些新增的技术都是使用JavaScript来操作。也就是说,HTML 5使得HTML从一门“标记语言” 转变为一门“编程语言”。

对于HTML 5中的新技术,在此不做详细介绍。单纯从新增的标签上来看,HTML 5有 以下几个特点。

  1. 文档类型说明

基于HTML 5设计准则中的“化繁为简”原则,页面的文档类型<!DOCTYPE>被极大地 简化了。

HTML5文档声明如下:<!DOCTYPE html>

  1. 标签不再区分大小写
  2. 允许属性值不加引号
  3. 允许部分属性的属性值省略 checked=“checked” 等价于checked

1.3. HTML、XHTML 和 HTML 5

HTML 指的是 HTML 4.01, XHTML 是HTML的过渡版,HTML5是HTML的升级版。

2. id属性和class属性

id属性具有唯一性,也就是说在一个页面中相同的id只允许出现一次。W3C建议,对于页面关键的结构或者大结构,我们才使用id。所谓的关键结构,指的是诸如LOGO、导航、 主体内容、底部信息栏等结构。对于一些小地方,还是建议使用class属性。

可以为同一个页面的相同元素或者不同元素设置相同的class,然后使得相同class的元素具有相同的CSS样式。
对于一个元素而言,我们可以定义多个class 一般来说,定义多个class的目的 在于:一般用一个class抽取公共样式,然后用另外一个class定义单独样式。

对于id和class,我们总结一下:对于页面关键结构,建议使用id;对于小地方,建议 使用class。就算我们不需要对关键结构进行CSS操作或者JavaScript操作,也建议加上id.以便搜索引擎识别页面结构。

3. 浏览器标题栏小图标

在浏览网页的时候,我们会发现几乎所有网站的页面在浏览器标题栏前面都会有一个小 图标

想要实现这个效果,我们只需要在head标签添加一个link标签即可。

语法:

<link rel="shortcut icon" type="image/x-icon" href="favicon.icon"/>

说明:

rel和type这两个属性的取值是固定形式,无需多讲。href属性取值为小图标的地址, 这个地址是根据小图标在站点文件夹路径而定的,跟图片引用路径是一样的道理。

这里注意一下,小图标格式是.ico,而不是.jpeg、.png、.gif等格式。对于.ico格式的 图标制作,我们可以搜索一下“在线icon",会发现很多不错的在线工具,大家可以收藏一下。

4. 图片语义化

在HTML 5中,引入了 figure和figcaption两个元素 来增强图片的语义化。

语法:

<figure><img src="" alt=""/><figcaption></figcaption></figure>

说明:

figure元素用于包含图片和图注,figcaption元素用于表示图注文字。在实际开发中, 对于“图片+图注”效果,我们都建议使用figure和figcaption这两个元素来实现,从而使 得页面的语义更加良好。

5. fieldset 标签和 legend 标签

使用fieldset和legend标签有两个作用。

  • 增强表单的语义。

  • 可以定义fieldset元素的disabled属性来禁用整个组中的表单元素。

<fieldset><legend> 表单组标题 </legend></fieldset>
    <form action="index.aspx" method="post"><fieldset><legend>登录学习网</legend><p><label for="name"> 账号:</1abel><input type="text" id="name" name="name" /></p><label for="pwd"> 密码:</label><input type="password" id="pwd" name="pwd" /></p><input type="checkbox" id="remember-me" name="remember-me" /> <label for="remember-me"> 记住我 </label><input type="submit" value="登录" /></fieldset></form>

6. 列表语义化

<li><\span>l</span>HTML 教程 </li>

<ul><li><span>l</span>HTML 教程 </li><li><span>2</span>CSS 教程 </li><li><span>3</span>JavaScript 教程 </li> 
</ul>

7. img标签和背景图片区别

想要在页面显示一张图片,我们有两种方式:一是使用img标签;二是使用背景图片。 这两种实现方式最明显的区别在于:使用img标签添加图片,是通过HTML来实现;使用背景图片,是通过CSS来实现。

在实际开发中,很多人添加图片的方式很随意。对于什么时候使用img标签,什么时候 使用背景图片,并不是很清楚我们应该根据HTML的语义来判断。如果图片作为HTML的一 部分,并且想要被捜索引擎识别,则应该使用img标签,例如常见的各种图片列表。如果图片仅仅是起到修饰作用,并且不想被搜索引擎识别,则应该使用背景图片。

图标图片就应该使用背景图片实现

二、HTML5

1. H5新增内容

1.1. 什么是HTML5

定义:HTML5定义了HTML标准的最新版本,是对HTML的第五次重大修改,号称下一代的HTML。
两个概念:

  • 是一个新版本的HTML语言,定义了新的标签、特性和属性
  • 拥有一个强大的技术集,这些技术集是指:HTML5、CSS3、JavaScript,这也是广义上的HTML5。

1.2. HTML5拓展了哪些内容

  • 语义化标签
  • 本地存储
  • 兼容特性
  • 2D、3D
  • 动画、过渡
  • CSS3特性
  • 性能与集成

2. HTML5新增标签

2.1. 新增了哪些语义化标签

  • header — 头部标签
  • nav — 导航标签
  • article — 内容标签
  • section — 块级标签
  • aside — 侧边栏标签
  • footer — 尾部标签

2.2. 新增多媒体音频标签

多媒体标签有两个,分别是音频 audio和视频video。
谷歌浏览器把音频和视频标签的自动播放都禁止了,谷歌浏览器中视频添加 muted 标签可以自己播放

  1. audio
    播放的格式是有限的。
    格式:Ogg Vorbis、 MP3、 Wav
    audio属性
属性描述
autoplayautoplay如里出现该属性则音频在就绪后马上播放
controlscontrols如果出现该属性,则向用户显示控件,比如播放按钮
looploop如果出现该属性,则每当音频结束时重新开始播放
srcurl要播放的音频的URL
一<!-- 注意:在 chrome 浏览器中已经禁用了 autoplay 属性 --><!-- <audio src="./media/snow.mp3" controls autoplay></audio> -->
二​<!-- 因为不同浏览器支持不同的格式,所以我们采取的方案是这个音频准备多个文件--><audio controls><source src="myAudio.mp3" type="audio/mpeg"><source src="myAudio.ogg" type="audio/ogg"></audio>
  1. video
    格式: Ogg、MPEG4、WebM
    video属性
属性描述
autoplayautoplay视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题
controlscontrols向用户显示播放控件
widthpixels(像素)设置播放器宽度
heightpixels(像素)设置播放器高度
looploop播放完是否继续播放该视频,循环播放
preloadauto(预先加载视频)规定是否预加载视频(如果有了autoplav 就忽略该属性)
preloadnone(不应加载视频)规定是否预加载视频(如果有了autoplav 就忽略该属性)
srcurl视频url地址
posterlmgurl加载等待的画面图片
mutedmuted静音播放

<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>

2.3. 新增 input 标签

属性值说明
type=“email”限制用户输入必须为Email类型
type=“url”限制用户输入必须为URI类型
type=“date”限制用户输入必须为日期类型
type=“time”限制用户输入必须为时间类型
type=“month”限制用户输入必须为月类型
type=“week”限制用户输入必须为周类型
type=“number”限制用户输入必须为数字类型
type=“tel”手机号码
type=“search”搜索框
type=“color”生成一个颜色选择表单

2.4. 新增表单属性

属性说明
requiredrequired表单拥有该属性表示其内容不能为空,必填
placeholder提示文本(占位符)表单的提示信息,存在默认值将不显示
autofocusautofocus自动聚焦属性,页面加载完成自动聚焦到指定表单
autocompleteoff /on当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。
默认已经打开,如 autocomplete=”on"
关闭 autocomplete =" off"
-需要放在表单内同时加上name属性
-同时成功提交
multiplemultiple可以多选文件提交

三、CSS3新增

1. CSS3属性选择器

选择符简介
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元素
  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;}

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-of-type区别
    • nth-child 选择父元素里面的第几个子元素,不管是第几个类型,都排上,都先做个排序,不过真正选择的时候还是选择要求的类型,如果选了2,但2不符合类型,则不选。
    • nth-of-type 选择指定类型的元素,比如选择所有p类型,之后按这个指定p类型的数据做个排序,只把p类型选出来排序,然后选偶数。注意其他类型的不选进排序里面。
案例1p:nth-child(2n){background-color: #64b0ff;}
<body><p>p1</p><p>p2</p><p>p3</p><p>p4</p><p>p5</p><p>p6</p>
</body>
案例2
因为nth-child选择器在计算子元素是第n个元素,是连同所有父元素中所有子元素一起计算的,
这样的话,p2其实是第三个元素,但是h1和h2由于没有被选中,所以颜色不变。p,h1{height:30px;width:300px;border:1px solid #00A2E9;}p:nth-child(2n){background-color: #64b0ff;}<p>p1</p><h1>h1</h1>/*增加了h1标签*/<p>p2</p><h1>h2</h1>/*增加了h1标签*/<p>p3</p><p>p4</p><p>p5</p><p>p6</p>
案例3p:nth-of-type(2n){background-color: #64b0ff;}<p>p1</p><h1>h1</h1>/*增加了h1标签*/<p>p2</p><h1>h2</h1>/*增加了h1标签*/<p>p3</p><p>p4</p><p>p5</p><p>p6</p>


6666

nth-child(n)参数n详解

  • 注意:本质上就是选中第几个子元素
  • n 可以是数字、关键字、公式
  • n 如果是数字,就是选中第几个
  • 常见的关键字有 even 偶数、odd 奇数
  • 常见的公式如下(如果 n 是公式,则从 0 开始计算)
  • 但是第 0 个元素即超出了元素的个数会被忽略
  • 比如2n是0、2、4因为第0个元素没有,则忽略,这个不是索引那种,是从1开始的。
2n     偶数  
2n+1   奇数  
5n     5  10 15... 
n+5    从第5个开始(包含第五个)到最后
-n+5   前5个(包含第5个)...
<style>ul li:first-child {background-color: lightseagreen;}ul li:last-child {background-color: lightcoral;}ul li:nth-child(3) {background-color: aqua;}/* 偶数 */ul li:nth-child(even) {background-color: aquamarine;}/* 奇数 */ul li:nth-child(odd) {background-color: blueviolet;}/*n 是公式,从 0 开始计算 */ul li:nth-child(n) {}/* 偶数 */ul li:nth-child(2n) {}/* 奇数 */ul li:nth-child(2n + 1) {}/* 选择第 0 5 10 15, 应该怎么选 */ul li:nth-child(5n) {}/* n + 5 就是从第5个开始往后选择 */ul li:nth-child(n + 5) {}/* -n + 5 前五个 */ul li:nth-child(-n + 5) {}
</style>

::before 在元素内部的前面插入内容
::after 在元素后部的后面插入内容

  • 伪元素选择器注意事项
    • before 和 after 必须有 content 属性
    • before 在内容前面,after 在内容后面
    • before 和 after 创建的是一个元素,但是属于行内元素
    • 创建出来的元素在Dom 中查找不到,所以称为伪元素
    • 伪元素和标签选择器一样,权重为 1
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;}<div>哈哈哈</div>

伪元素字体图标
p {position: relative;width: 220px;height: 22px;border: 1px solid lightseagreen;margin: 60px;}
p::after {content: '\ea50';font-family: 'icomoon';position: absolute;top: -1px;right: 10px;
}
<p></p>

4. 2D转换

  • 2D转换是改变标签在二维平面上的位置和形状
  • 2D的移动主要是指水平、垂直方向上的移动
  • 移动:translate
  • 旋转:rotate
  • 缩放:scale

4.1. 2D 转换之translate

transform: translate(x, y)
transform: translateX(n)

transfrom: translateY(n)
x就是X轴上水平移动
y就是y轴上水平移动
transform: translate(100px, 0)
transform: translateY(100%);

  • translate最大的优点就是不影响其他元素的位置
  • translate中的100%单位,百分数是相对于本身的宽度和高度来进行计算的
  • 行内标签没有效果
div {background-color: lightseagreen;width: 200px;height: 100px;/* 平移 *//* 水平垂直移动 100px *//* transform: translate(100px, 100px); *//* 水平移动 100px *//* transform: translate(100px, 0) *//* transform: translateX(100px); *//* 垂直移动 100px *//* transform: translate(0, 100px) *//* transform: translateY(100px); *//*百分比用法*/transform: translateY(100%);   
}

让一个盒子水平垂直居中

div {position: relative;width: 500px;height: 500px;background-color: pink;/* 1. 我们tranlate里面的参数是可以用 % *//* 2. 如果里面的参数是 % 移动的距离是 盒子自身的宽度或者高度来对比的 *//* 这里的 50% 就是 50px 因为盒子的宽度是 100px *//* transform: translateX(50%); */}p {position: absolute;top: 50%;left: 50%;width: 200px;height: 200px;background-color: purple;/1.* margin-top: -100px;margin-left: -100px; *//2.* translate(-50%, -50%)  盒子往上走自己高度的一半   */transform: translate(-50%, -50%);}span {/* translate 对于行内元素是无效的 */transform: translate(300px, 300px);}

4.2. 2D 转换之rotate

  • rotate旋转
    • 2D旋转指的是让元素在二维平面内顺时针或者逆时针旋转
/* 单位是:deg */
img:hover {transform: rotate(360deg)
}
  • rotate 里面跟度数,单位是 deg
  • 角度为正时,顺时针,角度为负时,逆时针
  • 默认旋转的中心点是元素的中心点
设置元素旋转的中心(transform-origin)transform-origin: x y;
  • 后面的参数 x 和 y 用空格隔开
  • x y 默认旋转的中心点是元素的中心(50% 50%),等价于center center
  • 还可以给x y 设置像素或者方位名词(top、bottom、left、right、center)

4.3. 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)}

4.4. 2D 转换综合写法以及顺序问题

  • 同时使用多个转换,其格式为 transform: translate() rotate() scale()
  • 顺序会影响到转换的效果(先旋转会改变坐标轴方向)
  • 当我们同时有位置或者其他属性的时候,要将位移放到最前面。(可能是想要先移动好再旋转吧)

5. 动画(animation)

自己总结动画和过渡写法区别

  • 动画由a变b是写在定义动画里面的,直接在a那调用动画即可,而暂停是写在鼠标经过a那里的
  • 由a变b,过渡效果是在初始盒子定义a状态并写上过渡transition: all 2s;,在之后鼠标经过写b的状态

是CSS3中最具颠覆性的特征之一,可通过设置多个节点来精确的控制一个或者一组动画,从而实现复杂的动画效果。

  1. 先定义动画
  2. 再调用定义好的动画
/*1. 定义动画*/
@keyframes 动画名称 {0% {transform: translate(0px)}100% {transform: translate(500px, 0)}
}
div {width: 100px;height: 100px;background-color: red;/* 调用动画 */animation-name: 动画名称;/* 持续时间 */animation-duration: 0.5S;/* 动画速度曲线 */animation-timing-function: ease-in-out;/* 动画等待多长时间执行 */animation-delay: 2s;/* 规定动画播放次数 infinite: 无限循环 */animation-iteration-count: infinite;/* 是否逆行播放 */animation-direction: alternate;/* 动画结束之后的状态 */animation-fill-mode: forwards;
}
div:hover {/* 规定动画是否暂停或者播放 */animation-play-state: paused;
}
  • 0% 是动画的开始,100 % 是动画的完成,这样的规则就是动画序列

  • 动画是使元素从一个样式逐渐变化为另一个样式的效果,可以改变任意多的样式任意多的次数

  • 用百分比来规定变化发生的时间,或用 from 和 to,等同于 0% 和 100%

属性描述
@keyframes规定动画。
animation所有动画属性的简写属性,除了animation-play-state属性。
animation-name规定@keyframes动画的名称。(必须的)
animation-duration规定动画完成一个周期所花费的秒或毫秒,默认是0。(必须的)
animation-timing-function规定动画的速度曲线,默认是"ease".
animation-delay规定动画何时开始,默认是0。
animation-iteration-count规定动画被播放的次数,默认是1,还有infinite
animation-direction规定动画是否在下一周期逆向播放,默认是"normal ",alternate逆播放
animation-play-state规定动画是否正在运行或暂停。默认是"running".还有"paused".
animation-fill-mode规定动画结束后状态,保持forwards回到起始backwards

动画简写方式

/* animation: 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 起始与结束状态 */
animation: name duration timing-function delay iteration-count direction fill-mode
animation: move 2s linear 1s infinite alternate forwards;
  • 简写属性里面不包含 animation-paly-state
  • 暂停动画 animation-paly-state: paused; 经常和鼠标经过等其他配合使用
  • 要想动画走回来,而不是直接调回来:animation-direction: alternate
  • 盒子动画结束后,停在结束位置:animation-fill-mode: forwards=

速度曲线细节

  • animation-timing-function: 规定动画的速度曲线,默认是ease
描述
linear动画从头到尾的速度是相同的。匀速
ease默认。动画以低速开始,然后加快,在结束前变慢
ease-in动画以低速开始。
ease-out动画以低速结束
ease-in-out动画以低速开始和结束
steps()指定了时间函数中的间隔教量(步长)
/*打字机效果*/
div {width: 0px;height: 50px;line-height: 50px;white-space: nowrap;overflow: hidden;background-color: aquamarine;animation: move 4s steps(24) forwards;
}@keyframes move {0% {width: 0px;}100% {width: 480px;}
}

6. CSS 过渡transition

  • 通过过渡transition,可以让web前端开发人员不需要javascript就可以实现简单的动画交互效果。

  • 过渡transition是一个复合属性,包括transition-property、transition-duration、transition-timing-function、transition-delay这四个子属性。通过这四个子属性的配合来完成一个完整的过渡效果。

transition-property: 过渡属性(默认值为all)
transition-duration: 过渡持续时间(默认值为0s)
transiton-timing-function: 过渡函数(默认值为ease函数)
transition-delay: 过渡延迟时间(默认值为0s)

鼠标移动到元素上,会出现宽度变化效果
.test{height: 100px;width: 100px;background-color: pink;transition-duration: 3s;
/* 以下三值为默认值,稍后会详细介绍 */transition-property: all;transition-timing-function: ease;transition-delay: 0s;
}    
.test:hover{width: 500px;
}
<div class="test"></div>

复合属性

  • 过渡transition的这四个子属性只有<transition-duration>是必需且不能为0。其中,<transition-duration>和<transition-delay>都是时间。

  • 当两个时间同时出现时,第一个是<transition-duration>,第二个是<transition-delay>;

  • 当只有一个时间时,它是<transition-duration>,而为默认值0s

注意:

  • transition的这四个子属性之间不能用逗号隔开,只能用空格隔开。因为逗号隔开的代表不同的属性(transition属性支持多值,多值部分稍后介绍);而空格隔开的代表不同属性的四个关于过渡的子属性。
.test{height: 100px;width: 100px;background-color: pink;/*代表持续时间为2s,延迟时间为默认值0s*/transition;2s;/*代表持续时间为1s,延迟时间为2s*/transition: 1s 2s;
}    
.test:hover{width: 500px;
}
<div class="test"></div>

6.1. 过渡属性transition-property

  • 初始值: all
  • 可应用于所有元素
  • 可过渡的样式,可用逗号分开写多个样式
 none: 没有指定任何样式all: 默认值,表示指定元素所有支持transition-property属性的样式<transition-property>: 可过渡的样式,可用逗号分开写多个样式transition-property: width,background;

6.2. 过渡持续时间transition-duration

  • 初始值: 0s
  • 该属性不能为负值
  • 若该属性为0s则为默认值,若为0则为无效值。所以必须带单位
  • 该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间。

6.3. 过渡时间函数transition-timing-function

  • 初始值: ease
  • 过渡时间函数共三种取值,分别是关键字、steps函数,比如steps(24)啊和bezier函数
ease: 开始和结束慢,中间快。
linear: 匀速。
ease-in: 开始慢。
ease-out: 结束慢。
ease-in-out: 和ease类似,但比ease幅度大。
steps:步长,比如steps(24)

7. 3D转换

3D的特点:近大远小,物体和面遮挡不可见

  • x 轴:水平向右 – 注意:x 轴右边是正值,左边是负值
  • y 轴:垂直向下 – 注意:y 轴下面是正值,上面是负值
  • z 轴:垂直屏幕 – 注意:往外边的是正值,往里面的是负值

3D 转换知识要点

  • 3D 位移:translate3d(x, y, z)
  • 3D 旋转:rotate3d(x, y, z)
  • 透视 :perspctive
  • 3D呈现 transfrom-style

7.1. 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(100px, 100px, 100px)transform: translate3d(100px, 100px, 0)

7.2. 透视perspective

  • 知识点讲解

    • 如果想要网页产生 3D 效果需要透视(理解成 3D 物体投影的 2D 平面上)
    • 实际上模仿人类的视觉位置,可视为安排一只眼睛去看
    • 透视也称为视距,所谓的视距就是人的眼睛到屏幕的距离
    • 距离视觉点越近的在电脑平面成像越大,越远成像越小
    • 透视的单位是像素
  • 知识要点

    • 透视需要写在被视察元素的父盒子上面
    • 注意下方图片
    • d:就是视距,视距就是指人的眼睛到屏幕的距离
    • z:就是 z 轴,z 轴越大(正值),我们看到的物体就越大

      body {
      /*透视需要写在被视察元素的父盒子上面 */
      perspective: 1000px;
      }
  • translateZ与perspective的区别

    • perspecitve 给父级进行设置视距的,translateZ 给子元素进行设置不同的大小

7.3. 3D 旋转rotate

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 为角度
  1. 3D 旋转rotateX
  • 左手法则:
    • 左手的手拇指指向 x 轴的正方向(右方)
    • 其余手指的弯曲方向就是该元素沿着 x 轴旋转的方向
div {/*透视写在被视察元素的父盒子上面 */perspective: 300px;
}
/*被观察元素*/
img {display: block;margin: 100px auto;transition: all 1s;
}img:hover {transform: rotateX(-45deg)
}
  1. 3D 旋转rotateY
  • 左手法则:
    • 左手的拇指指向 y 轴的正方向(下方)
    • 其余的手指弯曲方向就是该元素沿着 y 轴旋转的方向(正值)
div {perspective: 500px;
}img {display: block;margin: 100px auto;transition: all 1s;
}img:hover {transform: rotateY(180deg)
  1. 3D 旋转rotateZ
div {perspective: 500px;
}img {display: block;margin: 100px auto;transition: all 1s;
}img:hover {transform: rotateZ(180deg)
}
  1. rotate3d
  • transform: rotate3d(x, y, z, deg) – 沿着自定义轴旋转 deg 为角度

  • x, y, z 表示旋转轴的矢量,是标识你是否希望沿着该轴进行旋转,最后一个标识旋转的角度

  • transform: rotate3d(1, 1, 0, 45deg) – 沿着对角线旋转 45deg

  • transform: rotate3d(1, 0, 0, 45deg) – 沿着 x 轴旋转 45deg

div {perspective: 500px;
}img {display: block;margin: 100px auto;transition: all 1s;
}img:hover {transform: rotate3d(1, 1, 0, 180deg)
}

7.4. 3D呈现transform-style

  • 控制子元素是否开启三维立体环境
  • transform-style: flat 代表子元素不开启 3D 立体空间,默认的
  • ransform-style: preserve-3d 子元素开启立体空间
  • 代码写给父级,但是影响的是子盒子
  <div class="box"><div></div><div></div></div>body {perspective: 500px;}.box {position: relative;width: 200px;height: 200px;margin: 100px auto;transition: all 2s;/* 让子元素保持3d立体空间环境 */transform-style: preserve-3d;}.box:hover {transform: rotateY(60deg);}.box div {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: pink;}.box div:last-child {background-color: purple;transform: rotateX(60deg);}

http://www.taodudu.cc/news/show-3389045.html

相关文章:

  • 【软件工程】【第二章可行性分析与需求分析】
  • 贪吃蛇身子改进加贪吃蛇向右移动
  • javaEE初阶——多线程(九)——JUC常见的类以及线程安全的集合类
  • react怎么只让接口请求一次
  • 完全日期(蓝桥杯)
  • deepflow grafana plugin 编译问题解决
  • Python3 基础语法
  • 信息技术与计算机文化达标卷,2018教师资格考试模拟试卷:初中《信息技术学科知识与能力》...
  • HTML5及CSS3
  • (-):wav文件转化为txt文件
  • 基于ALSA的WAV播放和录音程序
  • 周报(CSS3+HTML5)
  • HTML5和CSS3
  • HTML5+CSS3知识点-周5.md
  • 迅捷音频编辑软件 - 多功能的MP3格式转换器附带音频剪辑功能
  • 第二章, 微格式:语义标注和常义冲突
  • 美国地名索引(在美国的英文名市、中国)
  • 3分钟看完凯迪克金奖作品
  • wi-fi以连接但无法上网_Wi-Fi无法扩展以弥合数字鸿沟
  • grads_Covid-Era Tech Grads从父母的家中开始工作
  • vscode如何连接新设备_【头条】糊盒部门如何确定现有设备是否胜任新挑战,还是需要新技术替代?博斯特有方法!...
  • vscode如何连接新设备_糊盒部门如何确定现有设备是否胜任新挑战,还是需要新技术替代?博斯特有方法!...
  • 故障诊断2—研究展望(未完待续)
  • 点云智能分类研究进展与展望
  • 【读论文】点云信息提取研究进展和展望(2017)
  • 2022展望
  • 【论文总结】区块链数据隐私保护:研究现状和展望
  • 展望2018
  • 6G展望
  • 区块链技术总结及发展展望
  • Hadoop未来展望
  • 人工智能研究综述与协同智能研究展望(简纲)
  • Java程序设计总结与展望_20145205《Java程序设计》课程总结
  • 工业边缘计算研究现状与展望
  • SVM研究展望
  • 深度学习在控制领域的研究现状与展望----总结