CSS高级教程
因为Typora的老毛病,代码和文字一多,就会卡的不行,因此另开一篇水文。接上文CSS慢学
圆角
CSS border-radius 属性定义元素角的半径。
用法大概清楚,有个椭圆角的,有点牛。
上面这个是x长移动,y短一点,下面这个就变成了完全的椭圆。
#rcorners1 {
border-radius: 50px / 15px;
background: #73AD21;
padding: 20px;
width: 200px;
height: 150px;
}
#rcorners3 {
border-radius: 50%;
background: #73AD21;
padding: 20px;
width: 200px;
height: 150px;
}
边框图像
border-image属性,该属性有三部分:
- 用作边框的图像
- 在哪里裁切图像
- 定义中间部分应重复还是拉伸
border-image 属性接受图像,并将其切成九部分,就像井字游戏板。然后,将拐角放置在拐角处,并根据您的设置重复或拉伸中间部分。
**注意:**为了使 border-image 起作用,该元素还需要设置 border 属性!
**提示:**border-image 属性实际上是以下属性的简写属性:
- border-image-source
- border-image-slice
- border-image-width
- border-image-outset
- border-image-repeat
#borderimg {
border: 10px solid transparent;
padding: 15px;
border-image: url(border.png) 30 stretch;
}
多重背景
CSS 允许您通过 background-image 属性为一个元素添加多幅背景图像。
不同的背景图像用逗号隔开,并且图像会彼此堆叠,其中的第一幅图像最靠近观看者。
下面的例子有两幅背景图像,第一幅图像是花朵(与底部和右侧对齐),第二幅图像是纸张背景(与左上角对齐):
#example1 {
background-image: url(flower.gif), url(paper.gif);
background-position: right bottom, left top;
background-repeat: no-repeat, repeat;
}
background-size 的其他两个可能的值是 contain 和 cover。
contain 关键字将背景图像缩放为尽可能大的尺寸(但其宽度和高度都必须适合内容区域)。这样,取决于背景图像和背景定位区域的比例,可能存在一些未被背景图像覆盖的背景区域。
cover 关键字会缩放背景图像,以使内容区域完全被背景图像覆盖(其宽度和高度均等于或超过内容区域)。这样,背景图像的某些部分可能在背景定位区域中不可见。
全尺寸背景图像
现在,我们希望网站上的背景图像始终覆盖整个浏览器窗口。
具体要求如下:
- 用图像填充整个页面(无空白)
- 根据需要缩放图像
- 在页面上居中图像
- 不引发滚动条
html {
background: url(img_man.jpg) no-repeat center fixed;
background-size: cover;
}
带有文本的大图像
这个也曾经是我想要的404界面设计。
https://www.w3school.com.cn/tiy/t.asp?f=css3_background_hero
指定背景图像的位置
background-origin
该属性接受三个不同的值:
- border-box – 背景图片从边框的左上角开始
- padding-box -背景图像从内边距边缘的左上角开始(默认)
- content-box – 背景图片从内容的左上角开始
指定背景的绘制区域
background-clip 属性指定背景的绘制区域。
CSS background-clip 属性指定背景的绘制区域。
该属性接受三个不同的值:
- border-box – 背景绘制到边框的外部边缘(默认)
- padding-box – 背景绘制到内边距的外边缘
- content-box – 在内容框中绘制背景
其他
渐变颜色:https://www.w3school.com.cn/css/css3_gradients.asp
文字阴影:https://www.w3school.com.cn/css/css3_shadows.asp
元素阴影:https://www.w3school.com.cn/css/css3_shadows_box.asp
文本效果,包括文字溢出,字换行,换行规则,书写模式:https://www.w3school.com.cn/css/css3_text_effects.asp
web字体:https://www.w3school.com.cn/css/css3_fonts.asp
工具提示:https://www.w3school.com.cn/css/css_tooltip.asp
图像样式:https://www.w3school.com.cn/css/css3_images.asp
object-fit 属性:https://www.w3school.com.cn/css/css3_object-fit.asp
按钮:https://www.w3school.com.cn/css/css3_buttons.asp
分页实例:https://www.w3school.com.cn/css/css3_pagination.asp
多列:https://www.w3school.com.cn/css/css3_multiple_columns.asp
用户界面:https://www.w3school.com.cn/css/css3_user_interface.asp
2D转换
通过使用 CSS transform 属性,您可以利用以下 2D 转换方法:
- translate()
- rotate()
- scaleX()
- scaleY()
- scale()
- skewX()
- skewY()
- skew()
- matrix()
translate() 方法
方法从其当前位置移动元素(根据为 X 轴和 Y 轴指定的参数)。
div {
transform: translate(50px, 100px);
}
rotate() 方法
rotate() 方法根据给定的角度顺时针或逆时针旋转元素。正值是顺时针,负值是逆时针
/*顺时针旋转20度*/
div {
transform: rotate(20deg);
}
scale() 方法
scale() 方法增加或减少元素的大小(根据给定的宽度和高度参数)。
下面的例子把
div {
transform: scale(2, 3);
}
scaleX() 宽度,scaleY() 高度
skew() 方法
skew() 方法使元素沿 X 和 Y 轴倾斜给定角度。
skewX() 方法使元素沿 X 轴倾斜给定角度。
skewY() 方法使元素沿 Y 轴倾斜给定角度。
matrix() 方法
matrix() 方法把所有 2D 变换方法组合为一个。
matrix() 方法可接受六个参数,其中包括数学函数,这些参数使您可以旋转、缩放、移动(平移)和倾斜元素。
参数如下:matrix(scaleX(),skewY(),skewX(),scaleY(),translateX(),translateY())
3D转换
通过 CSS transform 属性,您可以使用以下 3D 转换方法:
- rotateX()
- rotateY()
- rotateZ()
rotateX() 方法
rotateX() 方法使元素绕其 X 轴旋转给定角度(这种是我想象中的,因为是3D的)
#myDiv {
transform: rotateX(150deg);
}
rotateY() 方法
rotateY() 方法使元素绕其 Y 轴旋转给定角度:
rotateZ() 方法
rotateZ() 方法使元素绕其 Z 轴旋转给定角度:
过渡
这个更需要看实例:https://www.w3school.com.cn/css/css3_transitions.asp
- transition
- transition-delay
- transition-duration
- transition-property
- transition-timing-function
指定过渡的速度曲线
transition-timing-function 属性规定过渡效果的速度曲线。
transition-timing-function 属性可接受以下值:
- ease – 规定过渡效果,先缓慢地开始,然后加速,然后缓慢地结束(默认)
- linear – 规定从开始到结束具有相同速度的过渡效果
- ease-in -规定缓慢开始的过渡效果
- ease-out – 规定缓慢结束的过渡效果
- ease-in-out – 规定开始和结束较慢的过渡效果
- cubic-bezier(n,n,n,n) – 允许您在三次贝塞尔函数中定义自己的值
延迟过渡效果
transition-delay 属性规定过渡效果的延迟(以秒计)。
动画
这个挺重要的!
https://www.w3school.com.cn/css/css3_animations.asp
动画和过渡的区别:https://zhuanlan.zhihu.com/p/145929287
其主要区别在于:transition需要触发一个事件才会随着时间改变其CSS属性;animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果。
1)动画不需要事件触发,过渡需要。
2)过渡只有一组(两个:开始-结束) 关键帧,动画可以设置多个。
| 属性 | 描述 |
|---|---|
| @keyframes | 规定动画模式。 |
| animation | 设置所有动画属性的简写属性。 |
| animation-delay | 规定动画开始的延迟。 |
| animation-direction | 定动画是向前播放、向后播放还是交替播放。 |
| animation-duration | 规定动画完成一个周期应花费的时间。 |
| animation-fill-mode | 规定元素在不播放动画时的样式(在开始前、结束后,或两者同时)。 |
| animation-iteration-count | 规定动画应播放的次数。 |
| animation-name | 规定 @keyframes 动画的名称。 |
| animation-play-state | 规定动画是运行还是暂停。 |
| animation-timing-function | 规定动画的速度曲线。 |
变量
var() 函数用于插入 CSS 变量的值。
var() 函数的语法如下:
var(name, value)
| 值 | 描述 |
|---|---|
| name | 必需。变量名(以两条破折号开头)。 |
| value | 可选。回退值(在未找到变量时使用)。 |
**注释:**变量名称必须以两个破折号(–)开头,且区分大小写!
var() 如何工作
首先:CSS 变量可以有全局或局部作用域。
全局变量可以在整个文档中进行访问/使用,而局部变量只能在声明它的选择器内部使用。
如需创建具有全局作用域的变量,请在 :root 选择器中声明它。 :root 选择器匹配文档的根元素。
如需创建具有局部作用域的变量,请在将要使用它的选择器中声明它。
下面的例子与上面的例子相同,但是在这里我们使用 var() 函数。
首先,我们声明两个全局变量(–blue 和 –white)。然后,我们使用 var() 函数稍后在样式表中插入变量的值:
:root {
--blue: #1e90ff;
--white: #ffffff;
}
body { background-color: var(--blue); }
h2 { border-bottom: 2px solid var(--blue); }
.container {
color: var(--blue);
background-color: var(--white);
padding: 15px;
}
button {
background-color: var(--white);
color: var(--blue);
border: 1px solid var(--blue);
padding: 5px;
}
局部申明
:root {
--blue: #1e90ff;
--white: #ffffff;
}
body {
background-color: var(--blue);
}
h2 {
border-bottom: 2px solid var(--blue);
}
.container {
color: var(--blue);
background-color: var(--white);
padding: 15px;
}
button {
--blue: #0000ff;
background-color: var(--white);
color: var(--blue);
border: 1px solid var(--blue);
padding: 5px;
}
在媒体查询中使用变量
https://www.w3school.com.cn/css/css3_variables_mediaqueries.asp
Flexbox
https://www.w3school.com.cn/css/css3_flexbox.asp
在 Flexbox 布局模块(问世)之前,可用的布局模式有以下四种:
- 块(Block),用于网页中的部分(节)
- 行内(Inline),用于文本
- 表,用于二维表数据
- 定位,用于元素的明确位置
弹性框布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。
父元素(容器)
通过将 display 属性设置为 flex,flex 容器将可伸缩:
.flex-container {
display: flex;
}
以下是 flex 容器属性:
| 属性 | 描述 |
|---|---|
| display | 规定用于 HTML 元素的盒类型。 |
| flex-direction | 规定弹性容器内的弹性项目的方向。 |
| justify-content | 当弹性项目没有用到主轴上的所有可用空间时,水平对齐这些项目。 |
| align-items | 当弹性项目没有用到主轴上的所有可用空间时,垂直对齐这些项。(垂直对齐) |
| flex-wrap | 规定弹性项目是否应该换行,若一条 flex 线上没有足够的空间容纳它们。 |
| align-content | 修改 flex-wrap 属性的行为。与 align-items 相似,但它不对齐弹性项目,而是对齐 flex 线。 |
| flex-flow | flex-direction 和 flex-wrap 的简写属性。 |
| order | 规定弹性项目相对于同一容器内其余弹性项目的顺序。 |
| align-self | 用于弹性项目。覆盖容器的 align-items 属性。 |
| flex | flex-grow、flex-shrink 以及 flex-basis 属性的简写属性。 |
justify-content
center 中心对齐
flex-start :开头对齐
flex-end:末段对齐
space-around:有点两端对齐内味,space-around 值显示行之前、之间和之后带有空格的 flex 项目:
space-between:之间有空格,但是行首和行尾没有空格
完美居中
.flex-container {
display: flex;
height: 300px;
justify-content: center;
align-items: center;
}
媒体查询
https://www.w3school.com.cn/css/css3_mediaqueries.asp
媒体查询语法
媒体查询由一种媒体类型组成,并可包含一个或多个表达式,这些表达式可以解析为 true 或 false。
@media not|only mediatype and (expressions) {
CSS-Code;
}
如果指定的媒体类型与正在显示文档的设备类型匹配,并且媒体查询中的所有表达式均为 true,则查询结果为 true。当媒体查询为 true 时,将应用相应的样式表或样式规则,并遵循正常的级联规则。
除非您使用 not 或 only 运算符,否则媒体类型是可选的,且隐含 all 类型。
您还可以针对不同的媒体使用不同的样式表:
<link rel="stylesheet" media="mediatype and|not|only (expressions)" href="print.css">
CSS3 媒体类型
| 值 | 描述 |
|---|---|
| all | 用于所有媒体类型设备。 |
| 用于打印机。 | |
| screen | 用于计算机屏幕、平板电脑、智能手机等等。 |
| speech | 用于大声“读出”页面的屏幕阅读器。 |
响应式布局
视口:https://www.w3school.com.cn/css/css_rwd_viewport.asp
设置视口
HTML5 引入了一种方法,使 Web 设计者可以通过 <meta> 标签来控制视口。
您应该在所有网页中包含以下 <meta> 视口元素:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
它为浏览器提供了关于如何控制页面尺寸和缩放比例的指令。
width=device-width 部分将页面的宽度设置为跟随设备的屏幕宽度(视设备而定)。
当浏览器首次加载页面时,initial-scale=1.0 部分设置初始缩放级别。
下面分别是不带视口 meta 标签的网页、以及带视口 meta 标签的网页的例子:





