CSS3从入门到精通(笔记)

CSS3从入门到精通

一、CSS3简介

1. 什么是CSS3

​ CSS3 是最新的 CSS 标准,增加了新的特性

2. 兼容性

​ 目前主流浏览器已经支持绝大部分 CSS3 属性

​ 旧版本的浏览器对CSS3支持性会较差,浏览器厂商一般通过添加CSS3前缀来解决,也称为浏览器厂商前缀

浏览器厂商前缀
Chrome、Safari-webkit-
Firefox-moz-
IE-ms-
Opera-o-

3. 新增单位rem

​ em:根据父元素字体大小进行设置,是父元素的倍数

​ rem:root em 根据HTML根元素字体的大小进行设置,是根元素的倍数

​ 注意:

  • HTML根元素默认字体大小为16px,也称为基础字体大小
  • Chrome浏览器不支持12px以下的字体大小,其他浏览器没问题
  • rem不仅可以设置字体大小,也可以设置元素的宽高,对于适配移动端,可以使用rem

二、新增选择器

1. 结构性伪类

​ 根据页面中元素的结构来选择元素

1.1 child相关
E:first‐child/last‐child	父元素中的首/末E元素 
E:nth‐child(n)/nth‐last‐child(n)	父元素中的正数/倒数第n个E元素,n还支持odd、even写法 
E:only‐child	父元素中唯一的子元素E
1.2 type相关
E:first‐of‐type/last‐of‐type	同类型、同级别中的首/末E元素 
E:nth‐of‐type(n)/nth‐last‐of‐type(n)	同类型、同级别中的正数/倒数第n个E元素 
E:only‐of‐type	同类型、同级别中的唯一元素E

2. 元素状态伪类

​ 根据元素所处的状态来选择元素,类似于 a:hover

E:enabled	可用状态的E元素 
E:disabled	禁用状态的E元素 
E:read‐only	只读状态的E元素 
E:focus	得到焦点的E元素
E:checked	选中状态的E元素 

3. 属性选择器

E[attr]	有属性attr的E元素 
E[attr="val"]	属性attr的值为val的E元素 
E[attr^="val"]	属性attr的值以val开头的E元素 
E[attr$="val"]	属性attr的值以val结尾的E元素 
E[attr*="val"]	属性attr的值包含val的E元素

4. 其他选择器

E:empty	没有任何内部内容(无论是子元素还是文本)的元素
E:not(s)	否定/取反,选择所有不匹配选择器s的E元素 
E ~ F	选择同级别中E元素之后的F元素 
:root	文档根元素,即<html>元素 

三、新增样式

1. 文本效果

1.1 文本阴影

​ 语法:

text‐shadow: h‐shadow v‐shadow blur color;
	h‐shadow	必需,水平阴影的偏移位置,右偏是正方向 
	v‐shadow	必需,垂直阴影的偏移位置,下偏是正方向 
	blur	可选,模糊的距离 
	color	可选,阴影颜色 
注:可以指定多组数据,多组数据之间以逗号隔开
1.2 文本裁剪

​ 语法:

text‐overflow: clip|ellipsis|string;
	clip	裁剪多余文字 
	ellipsis	以省略号表示裁剪文字 
	string	以指定字符串表示裁剪文字(非所有浏览器都支持,Firefox支持) 
1.3 单词换行

​ 都是针对西文而言,用来设置是否对长单词进行断句,对中文没意义

​ 语法:

word-wrap: normal|break-word; 
	normal	使用浏览器默认的换行规则,有可能产生字符串溢出
	break‐word	允许在长单词或URL地址中间换行
word‐break: normal|break‐all;
	normal 使用浏览器默认的换行规则,有可能产生字符串溢出
	break‐all	允许在长单词或URL地址中间换行

​ 共同点:都是用来对长单词进行强行断句

​ 不同点:

  • word-wrap:break-word 会将长单词放在一个新行里,如果新行还是放不下,则会对长单词进行强制断句
  • word-break:break-all 不会把长单词放在一个新行里,如果当前行放不下,则会直接进行强制断句

2. 边框

2.1 圆角边框

​ 语法:

border‐radius: 左上 右上 右下 左下;
border-radius是一个简写属性,用于设置四个 border-*-radius 属性,如 border-top-left-radius
2.2 图片边框

​ 使用图片来创建边框,语法:

border-image: border-image-source|border-image-slice|border-image-width|border-image-outset|border-image-repeat
border-image是一个简写属性,用于设置以下属性:
	border-image-source 用在边框的图片的路径                                      
	border-image-slice  图片边框向内偏移                                          
	border-image-width  图片边框的宽度    
	border-image-outset	边框图像区域超出边框的量
	border-image-repeat 图像边框是否应平铺(repeat)、铺满(round)或拉伸(stretch)

3. 背景

3.1 背景图片

​ 设置背景图片的大小,语法:

background-size: length|percentage|cover|contain;
	length	设置背景图像的宽度和高度,第一个值表示宽度,第二个值表示高度。如果只设置宽度,则高度会根据图片宽高比自动进行缩放
	percentage	以父元素的百分比来设置背景图像的宽度和高度
	cover	保持图片宽高比不变,铺满整个容器的宽高,而图片多出的部分则会被截掉
	contain	保持图片宽高比不变,缩放至图片自身能完全显示出来,所以容器会有留白区域

​ 设置多个背景图片,语法:

background: url() position repeat, url() position repeat;
注:可以指定多组数据,多组数据之间以逗号隔开
	 多个背景图片重叠时,遵循先占先得原则
3.2 渐变背景

​ 线性渐变,语法:

background‐image: linear‐gradient(direction,fromColor,toColor...);
	direction	渐变的方向或角度,取值:to top、to right、度数(以deg为单位,按顺时针方向,指定过渡在哪个方向结束) 
	fromColor	渐变开始的颜色,从...颜色到... 
	toColor	渐变结束的颜色
注:还可以在颜色后面再加一个值,指定各颜色的位置

​ 放射性渐变,语法:

background‐image: radial‐gradient(type‐position,fromColor,toColor...);
	type-position 
    (1)渐变的形状 
 			circle 圆 
  	  ellipse 椭圆
    (2)设置半径的长度 
    	closest-side 指定径向渐变的半径从圆心到离圆心最近的边 
    	closest-corner 指定径向渐变的半径从圆心到离圆心最近的角 
    	farthest-side 指定径向渐变的半径从圆心到离圆心最远的边 
    	farthest-corner 指定径向渐变的半径从圆心到离圆心最远的角 
    (3)渐变圆心的位置 
    	关键字:at top、at center... 
			具体值:at 100px 100px 
	fromColor	渐变开始的颜色,从...颜色到... 
	toColor	渐变结束的颜色 

​ 重复性渐变,语法:

background‐image: repeating‐linear‐gradient(direction,fromColor,toColor number);  重复的线性渐变
background‐image: repeating‐radial‐gradient(type‐position,fromColor,toColor number); 	重复的放射性渐变 

4. 盒子属性

4.1 盒子大小

​ 默认情况下,按照盒子模型的规则,一个盒子所占空间为:width/height + padding + border + margin

​ 设置元素的width和height是否包含 内边距padding 和 边框border,语法:

box-sizing: content-box|border-box
	content-box 不包含内边距和边框(默认值) 
	border-box	包含边框和内边距
注:并不包含margin,也就是说margin是要单独计算大小的
4.2 尺寸调节

​ 对元素的尺寸进行调整,语法:

resize: none|both|horizontal|vertical;
	none	无法调整元素的尺寸
	both	可调整元素的高度和宽度
	horizontal	可调整元素的宽度
	vertical	可调整元素的高度
注:需要配合overflow属性使用,一般设置为auto
4.3 盒子阴影

​ 为元素添加阴影,语法:

box‐shadow: h‐shadow v‐shadow blur spread color inset 
	h‐shadow	必需,水平阴影的偏移位置,右偏是正方向 
	v‐shadow	必需,垂直阴影的偏移位置,下偏是正方向 
	blur	可选,模糊的距离 
	spread	可选,阴影的尺寸
	color	可选,阴影的颜色 
	inset	可选,将默认的外部阴影 (outset) 改为内部阴影(inset)

四、新增效果

1. 变形transform

​ transform 单词本义是改变、转换,能够对元素进行移动、缩放、转动、拉长或拉伸,称为变形或转换

​ 包含以下方法:

  • 平移:translate(x位置,y位置)

    语法:

    /* 分别设置横向和纵向移动多少 */ 
    transform:translateX(x);
    transform:translateY(y);
    /* 横向移动x,纵向移动y */ 
    transform:translate(x,y); 
    
  • 缩放:scale(x倍数,y倍数)

    语法:

    /*分别设置横向和纵向缩放多少*/ 
    transform:scaleX(x); 
    transform:scaleY(y);
    /*横向缩放x,纵向缩放y*/ 
    transform:scale(x,y);
    
  • 旋转:rotate(角度deg)

    语法:

    transform:rotate(度数);
    
  • 倾斜:skew(角度deg)

    语法:

    /* 分别设置横向和纵向倾斜多少 */ 
    transform:skewX(x); 
    transform:skewY(y);
    /* 横向倾斜x,纵向倾斜y */ 
    transform:skew(x,y);
    
  • 可以叠加多个变形操作,多个之间以空格隔开

    transform:scale(2,2) translate(100px,100px) rotate(30deg) skew(10deg,20deg);
    
  • 可以指定变形的基准点,默认为元素中心点

    transform‐origin: x轴 y轴;
    	x轴	left center right,
    	y轴	top	center bottom
    注:除了可以使用关键字,也可使用像素、百分比来设置
    

2. 过渡transition

​ transition 单词本义就是过渡,过渡就是当元素从一种样式变换为另一种样式时为元素添加效果

​ 包含以下属性:

  • transition-property 过渡的CSS属性名
  • transition-duration 过渡的时间,默认是 0
  • transition-timing-function 过滤的速度曲线,默认是 ease,另有linear、ease-in、ease-out、ease-in-out等
  • transition-delay 过渡延时,默认是 0
  • transition 简写属性 transition: property duration timing-function delay;

3. 动画animation

​ animation 单词本义就是动画,动画是使元素从一种样式逐渐变化为另一种样式的效果

​ 步骤:

  1. 定义动画

    使用@keyframes定义动画过程中的关键帧,其实就是定义不同时间点的CSS样式

    语法:

    @keyframes 动画的名称{ 
      百分比{
        样式名:样式值;
      }
      ......
    }
    注:使用百分比来定义时间点,或通过关键词"from""to",等价于0%和100%,建议使用百分比形式
    	 0%是动画的开始时间,100%动画的结束时间。
    
  2. 调用动画

    在某个元素上应用动画,包含以下属性:

    • animation-name 使用@keyframes定义的动画名称
    • animation-duration 持续时间,默认是 0
    • animation-timing-function 速度曲线,默认是 ease
    • animation-delay 延时时间,默认是 0
    • animation-iteration-count 播放次数,默认是 1,可以是数字,也可以是infinite(无限次)
    • animation-direction 播放方向,默认是 normal表示正常播放,alternate表示正反向轮流播放
    • animation 简写属性 animation: name duration timing-function delay iteration-count direction;

五、弹性布局

1. 简介

​ Flex弹性布局是CSS3的一种新的页面布局方案,可以简便、快速的实现各种页面布局

  • 采用flex布局的元素,称为弹性容器(Flex Container),简称为容器,也称为弹性盒子
  • 容器中的子元素,称为弹性项目(Flex Item),简称为项目
  • 容器中默认存在两条轴,默认水平显示的主轴和始终要垂直于主轴的侧轴(也叫交叉轴)
  • 容器中所有的子元素都是沿着主轴方向显示的

2. 常用属性

​ 先设置容器为弹性布局display:flex,然后设置弹性盒子的相关属性

属性名属性值含义
flex-directionrow(默认)、row-reverse、column、column-reverse主轴的方向,即项目的排列方向
flex-wrapnowrap(默认)、wrap、wrap-reverse如果一行放不下,是否换行
flex-flow简写属性flex- direction和flex- wrap的简写属性
justify- contentflex-start(默认)、flex-end、center、 space-between、space-around、space-evenly项目在主轴上的对齐方式
align-itemsstretch(默认)、flex-start、flex-end、center项目在交叉轴上的对齐方式
align-contentflex-start(默认)、flex-end、center、 space-between、space-around、space-evenly元素换行后设置多行对齐方式,容器必须设置flex-wrap换行
flex默认为0,表示不伸缩定义项目的伸缩比例
order默认为0,数值越小,排列越靠前定义项目的排列顺序

注:前6个为容器的属性,后2个为项目的属性

六、网格布局

1. 简介

​ Grid网格布局是一个二维的基于网格的布局系统,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局

  • 采用grid布局的元素,称为Grid容器(Grid Container),简称为容器
  • 网格容器中的子元素,称为网格项(Grid Item)
  • 组成网格线的分界线,称为列网格线和行网格线
  • 两个相邻的列网格线和两个相邻的行网格线组成的单元格,称为网格单元格

2. 常用属性

​ 先设置容器为网格布局display:grid,然后设置网格布局的相关属性

样式名属性值含义
grid-template-columnspx、%、auto、fr、repeat()、auto-fill定义每一列的列宽
grid-template-rowspx、%、auto、fr、repeat()、auto-fill定义每一列的行高
grid-column-gappx列与列的间隔
grid-row-gappx行与行的间隔
justify-itemsstart、end、center、stretch(默认)单元格内容的水平对齐
align-itemsstart、end、center、stretch(默认)单元格内容的垂直对齐
justify-contentstart(默认)、end、center、space-between、space-around、 space-evenly整个网格在容器中的水平对齐
align-contentstart(默认)、end、center、space-between、space-around、space-evenly整个网格在容器中的垂直对齐
grid-auto-flowrow(默认)、column自动放置元素的顺序
grid-column-start/grid-column-end简写属性:grid-column列的开始和结束
grid-row-start/grid-row-end简写属性:grid-row行的开始和结束

Grid布局和Flex布局的区别:

  • Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在区别
  • Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局
  • Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局
  • Grid 布局远比 Flex 布局强大,但兼容性不如Flex布局

七、多列布局

1. 简介

​ 多列布局就是创建多个列来对文本进行布局,其实就是将文本分成多列进行展示,就像报纸排版那样。

2. 常用属性

属性名属性值含义
column‐widthpx列的宽度
column‐count列的数量
columns简写属性column-width 和 column-count的简写属性
column‐fillbalance(默认)、auto列的填充方式
column‐gappx列之间的间隔
column‐rule类似于border属性的设置列之间分隔线的宽度、样式、颜色
column‐span1(默认)、all元素是否横跨多列

八、字体

1. 简介

​ 在CSS3之前,网页上只能使用已在用户计算机上安装好的字体。

​ 在CSS3中提供了@font-face规则,通过@font-face可以在网页上引用外部的独立字体文件

​ 语法:

/* 通过@font-face定义加载外部字体文件 */
@font-face {
	font-family: 自定义字体名称;
  src: 字体文件的路径
}

​ 常见的字体文件类型:.ttf.otf.woff.eot.svg

2. 阿里矢量图标库

​ https://www.iconfont.cn

​ 使用步骤:

  1. 引入项目下面生成的 fontclass 代码:
<link rel="stylesheet" href="./iconfont.css">
  1. 挑选相应图标并获取类名,应用于页面:
<span class="iconfont icon-xxx"></span>

九、其他

1. 媒体查询

@media媒体查询可以针对不同的屏幕尺寸设置不同的样式,能够判断设备尺寸进行不同样式的切换,是响应式布局的基础

​ 语法:

@media 媒体类型 and (媒体属性) {
  选择器{
    样式规则
  }
}

​ 媒体类型:

  • all 所有媒体(默认值)
  • screen 电脑屏幕、平板电脑、手机等彩色屏幕
  • print 打印机
  • tv 电视

​ 媒体属性:

  • min-width 最小宽度
  • max-width 最大宽度
  • min-height 最小高度
  • max-height 最大高度

2. 移动设备响应式

​ viewport视口是用户网页的可视区域,浏览器实际显示内容的区域,也称为视窗Viewport

​ 为页面增加以下meta标签以适应移动设备

<meta name="viewport" content="width=device‐width,initial‐scale=1.0,minimum‐scale=1.0,maximum‐ scale=1.0,user‐scalable=no"> 

​ 常用设置:

  • width=device‐width 页面大小与屏幕等宽
  • initial‐scale=1.0 初始缩放比例为1.0(不缩放)
  • minimum‐scale=1.0 最小缩放比例
  • maximum‐scale=1.0 最大缩放比例
  • user‐scalable=no 是否允许用户缩放

3. 视口单位

​ 视口单位是根据视口大小来定义的一种相对单位,按照百分比来计算,也称为视窗单位

​ 视口单位主要包括以下4个:

  • vw 视口宽度的百分比,1vw表示是视口宽度的1%
  • vh 视口高度的百分比 ,1vh表示是视口高度的1%
  • vmin 选取当前vw和vh中较小的那个
  • vmax 选取当前vw和vh中较大的那个

注:视口单位是相对于视口的高度和宽度设置的,而不是父元素的(CSS百分比是相对于包含它的最近的父元素的高度和宽度)

4. CSS3原生变量

​ CSS中原生的定义变量的语法是:‐‐变量名:变量值,调用变量的语法是:var(‐‐变量名)

  • 变量的定义和使用,只能在声明块{ }里面
  • 变量命名时不能包含$[^(%等字符
:root{
 	/* 定义变量 */ 
  ‐‐a:#ccc; 
}
div{
  /* 调用变量 */
  background:var(‐‐a); 
}

十、补充

1. Reset CSS

​ 重置浏览器标签的样式表

​ 最简单的CSS Reset内容寥寥几行就能完成:

* { 
  	padding: 0; 
  	margin: 0; 
  	border: 0; 
}

​ 但由于性能较低,不推荐使用。

​ 推荐使用国外名人Eric Meyer的CSS Reset https://meyerweb.com/eric/tools/css/reset/index.html

2. CSS hack

​ 什么是CSS hack

​ 由于不同厂商的浏览器,比如Internet Explorer、Chrome、Mozilla Firefox、Safari等,或者是统一厂商的浏览器的不同版本,比如IE6和IE7,对CSS的解析和认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。这个时候,我们就需要针对不同的浏览器,去写不同CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中,也能得到我们想要的页面效果。

​ 换言之:CSS hack的目的就是使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。

5.2 三种表现形式

  • 属性前缀法(CSS类内部 Hack)

    比如IE6能识别下划线_和星号*,IE7能识别星号*,但不能识别下划线_ ,而firefox两个都不能认识。

    div{
    	background:green;/*forfirefox*/
    	*background:red;/*forIE6*/(IE6和IE7)
    }
    
  • 选择器前缀法(选择器 Hack)

    语法是这样的:<hack> selector{ sRules }
    *html IE6能识别
    *+html IE7能识别
    :root IE9能识别
    
    *html #demo {width:120px;} 
    *+html #demo {width:130px;}
    :root #demo { width:200px;} 
    
  • IE条件注释法(HTML 头部引用 Hack), 针对所有IE(注:IE10+已经不再支持条件注释)

    <link rel="stylesheet" type="text/css" href="css.css" />
    <!–[if IE 7]>
    <!– 如果IE浏览器版是7,调用ie7.css样式表 –>
    <link rel="stylesheet" type="text/css" href="ie7.css" />
    <![endif]–>
    <!–[if lte IE 6]>
    <!– 如果IE浏览器版本小于等于6,调用ie.css样式表 –>
    <link rel="stylesheet" type="text/css" href="ie.css" />
    <![endif]–>
    
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky_programmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值