css进阶学习笔记(css3)
css3的新特性(下面的内容在css基础中更全)
属性选择器
根据元素特定属性的选择元素
A元素[属性名]–选择具有属性名属性的A元素
A元素[属性名=”属性值”]–选择具有该属性名且值为该属性值的A元素
A元素[属性名^=”val”]–选择具有该属性名且值以val开头的A元素
A元素[属性名$=”val”]–选择具有该属性名且值以val结尾的A元素
A元素[属性名*=”val”]–选择具有该属性名且值含有val的A元素
结构伪类选择器
选择父级选择器里面的子元素
A:first-child–选择父元素中的第一个子元素
A:last-child–选择父元素中的最后一个子元素A
A:nth-child(n)–选择父元素中的第n个子元素AA
A:first-of-type 指定类型A的第一个
A:last-of-type 指定类型A的最后一个
A:nth-of-type 指定类型A的第n个
伪元素选择器
- 利用css创建新标签元素,不需要html标签,从而简化html结构
- element::before 在元素内部的前面插入内容
- elemnet::after 在元素内部的后面插入内容
- 注意:创建的元素属于行内元素
- 必须要有content属性
如div::before{content:”早上好,又是美好的一天呢”} - 使用场景:
伪元素字体图标(配合字体图标网站)
鼠标放上去有黑色半透明盒子
伪元素清除浮动(额外标签法的升级优化)见浮动
css3盒子模型
在选择器的最后一行添加box-ing:值
通过box-sizing指定盒模型,有两个值:content-box,border-box
box-sizing:content-box 盒子大小为width+padding+border(以前默认的)
box-sizing:border-box 盒子大小为width。此时oadding和border不会撑大盒子,而是会挤压里面的内容(前提是padding+border不超过width)
flex布局和grid布局(看对应文章)
css3
边框,圆角,边框图片
边框border
border:npx 边框类型 边框颜色;
可以接受多个值
- 第一个值是宽度npx,
- 第二个值是类型solid(直线),dashed(虚线),double(双实现),ridge(突起的边框)
- 第三个值是颜色,可以英文单词可以其他表示方式
圆角border-radius
border-radius: npx 给元素添加圆角,px值越大元素越接近圆
值如果为百分比,则为盒子的宽度与高度的比值
1 | /*设置一个值,那么作用于四个角*/ |
椭圆角 50%
1 | border-radius: 50px / 15px; |
边框图片 border-image
使用图片(border.png)作为边框
语法:
1 | div { |
简写形式(常用):
1 | div { |
理解属性:
- border-image-slice
这是最重要的属性之一,因为它决定了如何切割图像。假设你的图像是一个正方形,并且你想让它作为边框使用,那么你需要指定从每一边裁剪掉多少像素。如果图像尺寸为100x100像素,并设置 border-image-slice: 30;,则图像会被分成9部分:顶部、底部、左侧、右侧各30像素宽/高,中心区域为40x40像素。 - border-image-repeat
决定了边框图像在边缘上的表现方式。stretch 会拉伸图像以填充空间;repeat 会简单地重复图像,可能导致不连续的效果;而 round 则会自动调整图像大小,图片会尽可能地重复以填满边框区域完整且均匀分布。
感觉还是好难理解呢,下面是代码和对应图片例子:
定义中间部分是重复还是拉伸 border-image: url(border.png) 30 stretch拉伸中间图片作为边框|round重复填充中间图片作为边框;
该属性分为三个部分:
要用作边框的图像(“border.png”);
在何处对图像进行切片;
比较好的官方文档
背景
背景图片background-image
不同的背景图像和图像用逗号隔开
1 | #example1 { |
可以给不同的图片设置多个不同的属性
1 | #example1 { |
其他
background-image:设置背景图片。
background-repeat:控制背景图片的重复方式。
background-size:控制背景图片的大小。
background-position:控制背景图片的位置。
background-attachment:控制背景图片是否随页面滚动
背景填充方式 background-repeat(css2)
控制背景图片的重复方式
repeat:默认值,背景图片在水平和垂直方向上重复。
no-repeat:背景图片不重复。
repeat-x:背景图片在水平方向上重复。
repeat-y:背景图片在垂直方向上重复。
是否随页面滚动background-attachment(css2)
scroll:默认值,背景图片随页面滚动
fixed:背景图片固定在视口中,不随页面滚动
背景大小 background-size
小可以用长度、百分比指定,也可以使用两者之一 关键词:auto:默认值,图片保持原始大小。
cover:图片会缩放以覆盖整个元素,可能会裁剪图片。
contain:图片会缩放以适应元素,不会裁剪图片。length或percentage
:指定图片的具体宽度和高度
背景图像的区域 background-origin
background-origin属性指定了背景图像的位置区域。
content-box, padding-box,和 border-box区域内可以放置背景图像。
多背景图片
可以为一个元素设置多个背景图像,每个图像可以通过逗号分隔指定。
1 | body { |
例题
要求:用图像填充整个页面(无空白);根据需要缩放图像;页面上的居中图像;不会导致滚动条
1 | html { |
渐变
线性渐变 (linear-gradient) 和 径向渐变 (radial-gradient);
盒阴影 (box-shadow) 和 文本阴影 (text-shadow)
颜色
RGBA颜色
A:alpha 参数是一个介于 0.0 之间的数字 (完全透明)和 1.0(完全不透明)
HSLA 颜色
HSL 代表色相、饱和度和亮度
- 色相是色轮上的度数(从 0 到 360):
- 0(或 360)为红色
- 120 为绿色
- 240 是蓝色
- 饱和度是一个百分比值:100% 是全色。
- 亮度也是一个百分比;0% 为深色(黑色),100% 为白色。
A:alpha 参数是一个介于 0.0 之间的数字 (完全透明)和 1.0(完全不透明)
不透明度opacity
opacity属性值必须是介于 0.0 (完全透明) 和 1.0 (完全不透明) 之间的数字
渐变-线性渐变
1 | background-image: linear-gradient(direction, color-stop1, color-stop2, ...); |
- 第一个值是减白拿的方向
- 如果您想对渐变的方向进行更多控制, 您可以定义一个角度,而不是预定义的方向(到 Bottom、到 top、to right、to left、to lower right 等)。值 0deg 相当于 “到顶部”。值 90deg 等效于 “to right”。值 180 度相当于 “to bottom”。
- 默认从上到下(此时direction可以不写)
- 从左到右to right
- 对角线,左上到右下to bottom right
- 使用角度 180°(从上到下)180deg
- 后面的值是色标,≥2个颜色进行渐变
使用透明度(transparent)
用于创建减弱变淡的效果,做法把颜色编程带有透明度的颜色即可,如
1 | #grad { |
重复的线性渐变函数
repeating-linear-gradient() 函数用于重复线性渐变:
1 | #grad { |
渐变-径向渐变
径向渐变由其中心定义,默认情况下,形状为椭圆,大小为最远角,位置为中心
1 | background-image: radial-gradient(shape size at position, start-color, ..., last-color); |
渐变-圆锥渐变
(看文档吧)
阴影
文本阴影text-shadow
1 | text-shadow: h-offset v-offset blur-radius color; |
- h-offset:水平偏移量,正值向右偏移,负值向左偏移。
- v-offset:垂直偏移量,正值向下偏移,负值向上偏移。
- blur-radius:模糊半径,值越大,阴影越模糊。可以省略,省略时默认为 0。
- color:阴影的颜色,可以是任何有效的 CSS 颜色值(如 #ff0000、red、rgba(255, 0, 0, 0.5) 等)。可以省略,省略时默认为黑色
常见效果
- 简单阴影:text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
- 内阴影:text-shadow: -2px -2px 4px rgba(0, 0, 0, 0.5);
- 彩色阴影:text-shadow: 2px 2px 4px blue
- 文字边框
可以使用 text-shadow 属性在周围创建普通边框 一些文本(无阴影):1
2
3
4h1 {
color: coral;
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
} - 多重阴影
1
2
3
4
5.text {
text-shadow:
2px 2px 4px rgba(0, 0, 0, 0.5),
-2px -2px 4px rgba(255, 255, 255, 0.5);
}
文本溢出text-overflow属性
1 | selector { |
clip:默认值,直接裁剪文本,不添加任何指示符。
ellipsis:显示省略号(…)来表示被裁剪掉的文本。
为了使 text-overflow 生效,通常需要设置以下属性:
- white-space: 控制如何处理元素内的空白字符。
- 常用的值有:nowrap: 强制在同一行内显示所有文本,不允许换行。
- overflow: 必须设置为 hidden 或其他非 visible 的值,以便隐藏超出容器部分的内容。
1
2
3<div class="container">
这是一个非常长的文本示例,它将超出其父容器的边界...
</div>1
2
3
4
5
6.container {
width: 200px; /* 设置一个固定的宽度 */
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出容器的内容 */
text-overflow: ellipsis; /* 使用省略号表示被裁剪的文本 */
}
盒阴影 box-shadow
CSS3文本溢出属性指定应向用户如何显示溢出内容
如果多个阴影,通过逗号分隔多个阴影值
1 | box-shadow: h-offset v-offset blur-radius spread-radius color; |
- h-offset:水平偏移量,正值向右偏移,负值向左偏移。
- v-offset:垂直偏移量,正值向下偏移,负值向上偏移。
- blur-radius:模糊半径,值越大,阴影越模糊。可以省略,省略时默认为 0。
- spread-radius:扩展半径,正值会扩大阴影的大小,负值会缩小阴影的大小。可以省略,省略时默认为 0。
- color:阴影的颜色,可以是任何有效的 CSS 颜色值(如 #ff0000、red、rgba(255, 0, 0, 0.5) 等)。可以省略,省略时默认为黑色。
常见效果:
简单阴影:box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
内阴影:box-shadow: inset 2px 2px 4px rgba(0, 0, 0, 0.5);
多重阴影:box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5), -2px -2px 4px rgba(255, 255, 255, 0.5);
彩色阴影:box-shadow: 2px 2px 4px blue;
扩展阴影:box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.5);
注意
文本阴影和盒阴影的内阴影和多重阴影不要搞混
- 内阴影(不一样)
- 文本:text-shadow: -2px -2px 4px rgba(0, 0, 0, 0.5);
- 盒子:内阴影:box-shadow: inset 2px 2px 4px rgba(0, 0, 0, 0.5);
- 多重阴影(一样的)
- 文本:text-shadow:
2px 2px 4px rgba(0, 0, 0, 0.5),
-2px -2px 4px rgba(255, 255, 255, 0.5);
- 文本:text-shadow:
- 盒子:多重阴影:box-shadow:
2px 2px 4px rgba(0, 0, 0, 0.5),
-2px -2px 4px rgba(255, 255, 255, 0.5);
- 盒子:多重阴影:box-shadow:
2D与3D变换
2D 变形
1 | .box { |
1 |
|
过渡与动画
过渡transition(常搭配:hover)
1 | transition: property duration timing-function delay; |
property:指定需要过渡的CSS属性,如background-color、width、height等。可以使用all表示所有属性。
duration:过渡的持续时间,单位为秒(s)或毫秒(ms)。
timing-function:过渡的动画曲线,常见的值有ease(默认)、linear、ease-in、ease-out、ease-in-out,或者使用 cubic-bezier() 自定义曲线
delay:过渡的延迟时间,单位为秒(s)或毫秒(ms)(可选,默认为 0s)
过渡是一个状态,定义元素从一种样式变换到另一种样式的过渡效果
transition:要过渡的属性 花费时间 运动曲线 何时开始;
属性:如宽度高度背景颜色,如果想要所有的属性都变化过渡,写一个all
花费时间:必须写单位,如1.5s
运动曲线 默认ease,可以省略
何时开始:必须写单位,默认0s,可以省略如果多个属性逗号分隔,如
div{
width:200px;
height:100px;
background-color:red;
transition:width 0.6s,height 0.6s;
或transition:all 0.6s;
}
动画 (@keyframes + animation):创建复杂的动画序列
动画比过渡更强大,允许你定义复杂的多步骤动画序列,而不仅仅是在两个状态之间进行过渡。动画通过关键帧(@keyframes)来定义动画的不同阶段
1 | @keyframes slidein { |
- animation-name:定义的@keyframes动画名称。
- duration:动画的持续时间。
- timing-function:动画的动画曲线。
- delay:动画的延迟时间。
- iteration-count:动画的播放次数,infinite表示无限
循环。 - direction:动画的播放方向,normal(默认值)、reverse、alternate、alternate-reverse。
- fill-mode:动画结束后的状态,none(默认值)、forwards、backwards、both。
媒体查询
媒体查询允许你根据设备的特性(如屏幕宽度、高度、方向等)应用不同的CSS样式。这使得你可以为不同的设备(如桌面、平板、手机)提供优化的用户体验
1 | @media media-type and (media-feature) { |
- media-type:指定媒体类型
- 如screen(屏幕)、print(打印)、all(所有设备)等。
- media-feature:指定媒体特性
- width:设备屏幕的宽度。
- height:设备屏幕的高度。
- orientation:设备的方向,portrait(竖屏)或landscape(横屏)。
- aspect-ratio:设备屏幕的宽高比。
- resolution:设备的分辨率。
常用媒体特性
@media (max-width: 768px){}
当屏幕宽度小于或等于 768px 时,应用大括号内的样式
- min-width 和 max-width:
min-width: 768px:当屏幕宽度 ≥ 768px 时生效。
max-width: 768px:当屏幕宽度 ≤ 768px 时生效。 - orientation:
orientation: portrait:竖屏(高度 > 宽度)。
orientation: landscape:横屏(宽度 > 高度)。 - resolution:
min-resolution: 2dppx:针对高分辨率屏幕(如 Retina 屏)
其他
字体图标
<i class="fas fa-star"></i>
滤镜filter
filter:函数(npx)
如filter:blur(5px) 模糊处理函数blur(),n越大模糊程度越大(变虚变近视)
calc函数
calc()函数在声明css属性时执行一些计算
如width:calc(100%-80px);