- 过渡
- 动画
- 变换
- 网格布局
- 其他与未来
w3school HTML 教程 w3school HTML 标签参考手册 MDN HTML 教程 MDN HTML 元素参考 w3school CSS 教程 w3school CSS 参考手册 MDN CSS 教程 MDN CSS 参考手册 在线文档用于查阅参考资料
黑马程序员web前端开发入门教程 尚硅谷Web前端零基础入门HTML5+CSS3基础教程 在线视频学习资源用来辅助学习,上面两个是我个人觉得质量比较高的,二选一选择一个视频资源个人比较习惯的跟着学习即可
通常当 CSS 的属性值更改后,浏览器会立即更新相应的样式,例如当鼠标悬停在元素上时,通过 :hover 选择器定义的样式会立即应用在元素上,在 CSS3 中加入了一项过渡功能,通过该功能可以将元素从一种样式在指定时间内平滑的过渡到另一种样式,类似于简单的动画
transition 可以不用厂商前缀,不过鉴于标准刚刚稳定,对于基于 Webkit的浏览器仍然需要厂商前缀,如果想兼容旧版本的浏览器那么可能需要厂商前缀(例如Firefox 15 及之前版本, Opera 12 及之前版本)
transition一般在css中配合:hover, :active等伪类使用,实现相应等动画效果
transition-property 属性规定应用过渡效果的 CSS 属性的名称
- none 没有属性会获得过渡效果
- all 默认值,所有属性都将获得过渡效果
- property 定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔
transition-duration 属性规定完成过渡效果需耗费的时间 单位以秒或毫秒计,默认值0 该属性必须指定
transition-timing-function 属性规定过渡效果的速度曲线
- linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))
- ease 默认值,规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))
- ease-in 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))
- ease-out 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))
- ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))
- cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值
cube-bezier() 函数定义三次贝塞尔曲线(Cubic Bezier curve),关于这个函数这里不作解释,可参考 链接 实际贝塞尔函数各参数取值效果可通过 链接 观察
transition-delay 属性规定过渡效果开始的延迟时间 默认值是0
transition 属性是一个简写属性,用于同时设置四个过渡属性: transition-property、transition-duration、transition-timing-function、transition-delay
transition: all 2s ease 1s;
一般建议使用transition 属性一次性设置所有过渡属性
动画和过渡类似,都可以通过纯 CSS 实现一些动态效果,不同的是过渡需要在某个属性变化时触发,而动画可以自动触发动态效果 动画使元素逐渐从一种样式变为另一种样式
设置动画效果,必须先设置一个关键帧,关键帧设置了动画执行的每一个步骤,即指定每一步的属性变化 @keyframes规则有两种设置方式,如下所示
@keyframes move
{
0% {top:0px;}
25% {top:200px;}
50% {top:100px;}
75% {top:200px;}
100% {top:0px;}
}
@keyframes mymove
{
from {top:0px; background:red; width:100px;}
to {top:200px; background:yellow; width:300px;}
}
animation-name 属性为 @keyframes 动画规定名称 该属性必须指定 默认值none,即无动画效果
animation-duration 属性定义动画完成一个周期所需要的时间 单位可以是秒或毫秒 该属性必须指定 默认值0,即无动画效果
animation-delay 属性定义动画开始的延迟时间 单位可以是秒或毫秒 默认值是0 允许负值,-2s 使动画马上开始,但跳过 2 秒进入动画
animation-iteration-count 属性定义动画的播放次数 默认值是1 取值可以是正整数或infinite(无限播放)
animation-direction 属性定义是否应该轮流反向播放动画
- normal 默认值,动画正常播放
- alternate 动画轮流交替播放
- reverse 动画反向播放
- alternate-reverse 动画轮流反向交替播放
(8)动画播放控制 animation-play-state
属性
animation-play-state 属性规定动画运行还是暂停
- paused 动画暂停
- running 默认值,动画进行
animation-timing-function 属性规定动画的速度曲线
- linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))
- ease 默认值,规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))
- ease-in 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))
- ease-out 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))
- ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))
- cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值
animation-fill-mode 属性规定动画在播放之前或之后其动画效果 none 默认值,不改变默认行为 forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义) backwards 在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义) both 向前和向后填充模式都被应用。
(11)动画简写属性 animation
属性
用于同时设置6个动画属性(除animation-fill-mode外)
animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count、animation-direction
语法:animation: name duration timing-function delay iteration-count direction;
animation:move 3s ease 1s infinite alternate;
建议使用animation属性一次性设置所有的动画属性
变换是指通过 CSS 来改变元素的形状或位置,transform 属性应用于元素的2D或3D转换,可以将元素进行旋转,缩放,移动,倾斜等操作 变换不会影响页面布局 变换的实现原理是移动坐标轴,而不是元素本身
CSS变换 transform 属性提供了一些函数用于控制各种变换方式 所有函数都应在 transform 属性中应用 参考 链接
将元素进行水平位移 translate(x,y) 定义 2D 平移 translate3d(x,y,z) 定义 3D 平移 translateX(x) 定义 x 轴上的平移 translateY(y) 定义 y 轴上的平移 translateZ(z) 定义 z 轴上的 3D 平移 可以注意到元素2D平移效果类似于相对定位
对元素在指定坐标轴上分别进行缩放 scale(x,y) 定义 2D 缩放转换 scale3d(x,y,z) 定义 3D 缩放转换 scaleX(x) 通过设置 X 轴的值来定义缩放转换 scaleY(y) 通过设置 Y 轴的值来定义缩放转换 scaleZ(z) 通过设置 Z 轴的值来定义 3D 缩放转换
对元素进行旋转操作 rotate(angle) 定义 2D 旋转 rotate3d(x,y,z,angle) 定义 3D 旋转 rotateX(angle) 定义沿着 X 轴的 3D 旋转 rotateY(angle) 定义沿着 Y 轴的 3D 旋转 rotateZ(angle) 定义沿着 Z 轴的 3D 旋转
对元素进行倾斜的旋转 skew(x-angle,y-angle) 定义沿着 X 和 Y 轴的 2D 倾斜转换 skewX(angle) 定义沿着 X 轴的 2D 倾斜转换 skewY(angle) 定义沿着 Y 轴的 2D 倾斜转换
perspective(n) 为 3D 转换元素定义透视视图 matrix(n,n,n,n,n,n) 定义 2D 转换,使用六个值的矩阵 matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) 定义 3D 转换,使用 16 个值的 4x4 矩阵
transform-origin 属性控制变换元素的基准位置,即坐标轴原点位置
语法:依次指定 x 坐标、y 坐标、z 坐标
transform-style 属性规定如何在 3D 空间中呈现被嵌套的元素
- flat 子元素将不保留其 3D 位置
- preserve-3d 子元素将保留其 3D 位置
backface-visibility 属性定义元素不面向屏幕时,元素背面是否可见
- visible 背面可见
- hidden 背面不可见
CSS 网格布局模块提供了带有行和列的基于网格的布局系统,它使网页设计变得更加容易,而无需使用浮动和定位 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局 关于网格布局,可以参考 链接
当 元素的 display 属性设置为 grid 或 inline-grid 时,它就会成为网格容器,其中的最近子元素就会成为网格元素
display: grid``display: inline-grid
采用网格布局的区域,称为"容器"(container) 容器内部采用网格定位的子元素,称为"项目"(item)
网格项的垂直线被称为列(column) 网格项的水平线被称为行(row) 每列/行之间的间隔称为间隙(gap) 列之间的线称为列线(column lines),行之间的线称为行线(row lines),统称为线(line) 正常情况下,n行有n + 1根水平网格线,m列有m + 1根垂直网格线 行和列的交叉区域,称为单元格(cell) 正常情况下,n行和m列会产生n x m个单元格
grid-template-columns
属性定义网格容器中各列的宽度及个数
grid-template-rows
属性定义网格容器中各行的高度及个数
其值是以空格分隔的列表,其中每个值定义相应列的长度
.grid-container {
/* 所有列有相同的宽度,使用auto关键字 */
grid-template-columns: auto auto auto auto;
/* 各行宽度不相同 */
grid-template-rows: 80px 200px;
/* 可以使用绝对单位,亦可使用相对单位 */
grid-template-columns: 33.33% 33.33% 33.33%;
/* 可以使用repeat()函数,简化重复的值或模式 */
grid-template-rows: repeat(3, 33.33%);
grid-template-columns: repeat(2, 100px 20px 80px);
/* 可以使用auto-fill关键字表示自动填充 */
grid-template-columns: repeat(auto-fill, 100px);
/* 如上代码表示每列宽度100px,然后自动填充,直到容器不能放置更多的列 */
/* 可以用fr关键字控制各列与各行的比例关系 */
grid-template-columns: 150px 1fr 2fr;
/* 如上代码表示第一列宽度150px,第三列宽度是第二列的2倍 */
/* 可以使用minmax()函数控制列与行长度范围 */
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
/* 可以指定网格线的名称,同一根线允许有多个名字 */
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4 column-4];
}
justify-content
属性用于在容器内水平方向如何对齐整个网格
仅网格的总宽度小于容器的宽度时生效
align-content
属性用于垂直方向如何对齐容器内的整个网格
仅网格的总高度小于容器的高度时生效
以上两个属性作用可参考相应flex布局的作用
place-content
属性是align-content属性和justify-content属性的简写属性
语法: place-content:
justify-items
属性设置单元格内容的水平位置(左中右)
align-items
属性设置单元格内容的垂直位置(上中下)
以上两个属性作用可参考相应flex布局的作用
place-items
属性是align-items属性和justify-items属性的合并简写形式
语法: place-items:
grid-column-gap
属性用于设置列间距
grid-row-gap
属性用于设置行间距
grid-gap
属性是以上两个属性的简写属性
语法: grid-gap: ;
根据最新标准,上面三个属性名的grid-前缀已经删除,grid-column-gap和grid-row-gap写成column-gap和row-gap,grid-gap写成gap
网格布局允许指定区域(area),一个区域由单个或多个单元格组成
grid-template-areas
属性用于定义区域
.grid-container {
/* 定名为a到i的九个区域 */
grid-template-areas: 'a b c'
'd e f'
'g h i';
/* 将9个单元格分成a、b、c三个区域 */
grid-template-areas: 'a a a'
'b b b'
'c c c';
/* 可以使用.表示不需要的单元格 */
grid-template-areas: 'a . c'
'd . f'
'g . i';
}
另外需要注意的是,区域的命名会影响到网格线的名称
grid-auto-flow
属性控制自动放置的项目如何插入网格中
默认值是row,即"先行后列"
也可以设成column,变成"先列后行"
可以设成row dense和column dense,用于处理部分项目指定位置后如何排列剩余项目位置
grid-auto-columns
属性和grid-auto-rows
属性用来设置浏览器自动创建的多余网格的列宽和行高
实际取值要求同grid-template-columns 属性与grid-template-rows 属性
grid-template
属性是grid-template-columns、grid-template-rows和grid-template-areas这三个属性的简写属性
grid
属性是grid-template-rows、grid-template-columns、grid-template-areas、 grid-auto-rows、grid-auto-columns、grid-auto-flow这六个属性的简写属性
grid-column
属性定义将项目放置在哪一列上
grid-column 属性是 grid-column-start
和 grid-column-end
属性的简写属性
grid-row
属性定义了将项目放置在哪一行上
grid-row 属性是 grid-row-start
和 grid-row-end
属性的简写属性
.grid-item {
/* 第 1 列开始并在第 5 列之前结束 */
grid-column: 1 / 5;
/* 从第 1 列开始,并跨越 3 列 */
grid-column: 1 / span 3;
}
grid-area
属性是 grid-row-start、grid-column-start、grid-row-end 和 grid-column-end 属性的简写属性,也可以规定项目的名称
/* 作简写属性 */
.grid-item {
/* 从 row-line 1 和 column-line 2 开始,在 row-line 5 和 column line 6 结束 */
grid-area: 1 / 2 / 5 / 6;
/* 从 row-line 2 和 column-line 开始,并跨越 2 行和 3 列 */
grid-area: 2 / 1 / span 2 / span 3;
}
/* 指定项目名称 */
/* 项目名称需在grid-template-areas属性中指定 */
.grid-item {
grid-area: area;
}
justify-self
属性设置单个单元格内容的水平位置,跟justify-items属性的用法类似
align-self
属性设置单个单元格内容的垂直位置,跟align-items属性的用法类似
place-self
属性是align-self属性和justify-self属性的合并简写形式
(i)中心居中效果
.box {
display: grid;
place-content: center;
/* 代码非常简洁!*/
}
(ii)二栏布局
<div class="grid">
<div class="left"></div>
<div class="right"></div>
</div>
.grid{
display: grid;
grid-template-rows: 200px auto;
}
<div class="container">
<header>
Header
</header>
<aside>
Left Sidebar
</aside>
<article>
Article
</article>
<aside>
Right Sidebar
</aside>
<footer>
Footer
</footer>
</div>
.container {
display: grid;
grid-template-columns: 150px auto 150px;
grid-gap: 1em;
}
header, footer {
grid-column: 1 / 4;
}
header,
aside,
article,
footer {
background: #eaeaea;
display: grid;
place-content: center;
height: 17vh;
}
@media all and (max-width: 700px) {
aside,
article {
grid-column: 1 / 4;
}
}
这一节内容是偏介绍性的,希望能够让大家了解到CSS即将出现或已出现的新特性 可参考 CSS 发展状况报告 亦可参考 知乎文章
要实现全局CSS变量,需要在html或body或**:root伪类中声明 自定义属性必须以--开头,使用 var()**来访问
:root{
--colorRed:red;
--size:16px;
--h:35px;
--l-h:35px;
}
a{
display:block;
height:var(--h);
line-height:var(--l-h);
color:var(--colorRed);
/* var() 可以接收第二个参数作为缺省值 */
font-size:var(--size, 20px);
outline:1px solid #666;
}
:root{
--overflow-ellipsis:{
overflow:hidden;
text-overflow: ellipsis;
white-space: nowrap;
};
}
.title{
width:200px;
@apply --overflow-ellipsis;
}
rgb()、rgba() 、hsl() 和 hsla() 可以直接使用空格做分割符,并且rgb() 和 hsl() 函数在第三个值和第四个值之间加上 / 可以取替 rgba() 和 hsla() 十六进制描述颜色可以在原本的语法规则中最后两位添加新的位值来描述透明度 可以在color() 函数中指定颜色空间
动态计算样式的length
:root {
--xPosition: 50px;
--yPosition: 50px;
}
.container {
background-position: calc(100% - var(--xPosition) calc(100% - var(--yPosition)))
}
查询浏览器是否支持给定的属性 在@关键字后面的条件成立时,应用 { } 里的样式规则
.card {
margin: 10px;
border: 1px solid #ddd;
}
@supports (box-shadow: 3px 5px 5px #eee) {
.card {
box-shadow: 3px 5px 5px #eee
}
}
支持与(and)或(or)非(not)逻辑运算
@supports (display: grid) and (not (display: inline-grid)) {}
@supports (transform-style: preserve) or (-moz-transform-style: preserve) {}
基本语法
@media media-type and (media-feature-rule) {
/* CSS rules go here */
}
一个媒体类型,告诉浏览器这段代码是用在什么类型的媒体上的(例如印刷品或者屏幕)
- all
- screen
- speech
一个媒体表达式,是一个被包含的CSS生效所需的规则或者测试 常用的为宽和高 一组CSS规则,会在测试通过且媒体类型正确的时候应用
@media screen and (max-width: 400px) {
body {
color: blue;
}
}
支持与(and)或(or)非(not)逻辑运算
h1 {
mask-image: url(mask.png);
}
OOCSS - Object-Oriented CSS)
- 结构与样式分离
- 容器与内容分离
BEM - Block & Element & Modifier 在选择器中,我们用以下三种符号来表示以上内容
- 中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号
- __ 双下划线:双下划线用来连接块和块的子元素
- _ 单下划线:单下划线用来描述一个块或者块的子元素的一种状态
SMACSS
- Base:页面的基本样式命名规则
- Layout:布局命名规则
- Module:模块规命名规则
- State:状态命名规则
- Theme:主题命名规则
- Changing State:可变状态的命名规则
修饰符是--,子模块是__
sass less stylus
CSS Houdini PostCSS
随着前端工程的普及,CSS的发展可谓是一日千里,近日也有一些数学属性的提案在发起,以后会发展成什么样,没人可以知道。只是总的来说,CSS的未来是一片光明的 CSS,未来可期!
提交课后作业和笔记可以积累积分,积累积分可以获得奖励
课后作业发我的邮箱[email protected]
发送邮件主题按如下格式前端-姓名-第x周-第x次
, 如 前端-陈思远-第1周-第1次
每次课程作业在下下次课程之前发送到我的邮箱
(1)作业1 在第一周第三次作业中,我们做了如下一个模块,当时我们并没有要求做样式过渡的效果,现在请在之前作业的基础上利用过渡补充完成过渡效果,做成一个完整的模块
(2)作业2 利用动画和变换制作一个旋转相册 参考样式如下,仅供参考 可以有自己的样式与想法,不必拘泥于例子的样式
参考代码已上传Gitee和Github仓库 Gitee链接 GIthub链接 作业代码仅供参考,还希望大家能够自己独立完成作业,有问题可以在群里提问或者私戳我,希望大家在前端的学习过程中都能够有所思考,有所收获