CSS是层叠样式表(Cascading Style Sheets )
的简称.
有时我们也会称之为CSS样式表或级联样式表。
CSS是也是一种标记语言
CSS主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式边距等)以及版面的布局和外观显示样式。
CSS 规则由两个主要的部分构成
cssh1{
color:red;
font-size: 24px;
}
:
分开;
进行区分cssh3{ color: deeppink; font-size: 20px; }
cssh3 {
color: pink;
fontsize: 20px;
}
推荐展开式风格
cssh3 {
color: pink;
}
cssH3 {
COLOR: PINK;
}
推荐使用小写字母,特殊情况除外。
cssh3 {
color: pink;
}
建议遵循以下顺序:
css.jdc {
display: block;
position : relative;
float: left;
width: 100px;
height : 100px;
margin: 0 10px;
padding: 20px 0;
font-family: Arial,'Helvetica Neue',Helvetica,sans-serif;
color: #333;
background: rgba (0,0,0,.5);
border-radius: 10px;
}
按照CSS样式书写的位置(或者引入的方式),CSS样式表可以分为三大类:
<style>
标签理论上可以放在HTML文档的任何地方,但一般会放在文档的<head>
标签中行内样式表(内联样式表)是在元素标签内部的style属性中设定CSS样式。适合于修改简单样式.
xml<div style="color: red; font-size: 12px;">青春不常在,抓紧谈恋爱</div>
样式单独写到CSS文件中,之后把CSS文件引入到HTML页面中使用.
新建一个后缀名为.css
的样式文件,把所有CSS代码都放入此文件中
在HTML页面中,使用<link>
标签引入这个文件。
css<link rel="stylesheet" href="css文件路径">
属性 | 作用 |
---|---|
rel | 定义当前文档与被链接文档之间的关系,在这里需要指定为"stylesheet",表示被链接的文档是一个样式表文件。 |
href | 定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径。 |
使用外部样式表设定CSS,通常也被称为外链式或链接式引入,这种方式是开发中常用的方式
选择器分类:
基础选择器式由单个选择器组成的,包括以下选择器:
标签选择器(元素选择器)是指用HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的CSS样式。
cssh1{
color: red;
font-size: 24px;
}
如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器。
在标签中使用class
属性标注标签
xml<div class="box"></div>
在css样式表中使用类选择器语法单独选择类标签
css.类名{
属性1: 属性值1;
}
我们可以给一个标签指定多个类名,从而达到更多的选择目的。这些类名都可以选出这个标签.
多个类名中间使用空格分开
xml<div class="red font20"></div>
HTML元素以id属性来设置id选择器,CSS中id选择器以“#"来定义。
css#id名{
属性1: 属性值1;
}
注意
属性只能在每个HTML文档中出现一次类选择器可重复使用,id选择器只能在HTML中出现一次
在CSS中,通配符选择器使用*
定义,它表示选取页面中所有元素(标签)。
css*{
属性1: 属性值1;
}
后代选择器又称为包含选择器
语法:
css父元素1 子元素2{样式声明}
子元素选择器(子选择器)只能选择作为某元素的最近一级子元素
语法:
css父元素1>子元素2{样式声明}
上述语法表示选择元素1里面的所有直接后代(子元素)元素2
并集选择器可以选择多组标签,同时为他们定义相同的样式,通常用于集体声明.
并集选择器是各选择器通过英文逗号(,
)连接而成,任何形式的选择器都可以作为并集选择器的一部分
css元素1,
元素2{
color: red;
}
伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素
伪类选择器使用冒号(:
)表示,比如:hover 、:first-child
链接伪类选择器
cssa : link /*选择所有未被访问的链接*/
a : visited /*选择所有已被访问的链接*/
a : hover /*选择鼠标指针位于其上的链接*/
a : active /*选择活动链接(鼠标按下未弹起的链接)*/
注意
link - :visited - :hover - :active
伪类选择器 伪类选择器用于选取获得焦点的表单元素
cssinput:fucus{
background-color: red;
}
CSS Fonts
(字体)属性用于定义字体系列、大小、粗细、和文字样式(如斜体)。
CSS
使用font-family
属性定义文本的字体系列。
cssp { font-family:"微软雅黑"; }
div {font-family: Arial, "Microsoft rahei","微软雅黑";}
body {font-family. 'Microsoft YaHei',tahoma,arial,'Hiragino Sans GB';}
CSS使用font-size
属性定义字体大小。
cssp {
font-size: 20px;
}
body
指定整个页面文字的大小CSS使用font-weight
属性设置文本字体的粗细。
cssp{
font-size: bold;
}
属性值 | 描述 |
---|---|
normal | 默认值(不加粗的) |
bold | 定义粗体(加粗的) |
100~900 | 400等同于normal,而700等同于bold注意这个数字后面不跟单位 |
CSS使用font-style
属性设置文本的风格。
cssp{
font-style: normal;
}
属性值 | 作用 |
---|---|
normal | 默认值,浏览器会显示标准的字体样式 font-style: normal; |
italic | 浏览器会显示斜体的字体样式。 |
使用font
属性把文字属性综合写,节约代码
cssbody{
font:font-style font-weight font-size/line-height font-family;
}
font
属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开font-size
和font-family
属性,否则font属性将不起作用color
属性用于定义文本的颜色
cssdiv{
color: red;
}
表示方式 | 属性值 |
---|---|
预定义的颜色值 | red, green,blue |
十六进制 | #FF0000,#FF6600,#29D794 |
RGB代码 | rgb(255,0,0)或rgb(100%,0%,0%) |
text-align
属性用于设置元素内文本内容的水平对齐方式
cssdiv{
text-align: center;
}
属性值 | 解释 |
---|---|
left | 左对齐(默认值) |
right | 右对齐 |
center | 居中对齐 |
text-decoration
属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等。
属性值 | 描述 |
---|---|
none | 默认。没有装饰线(最常用) |
underline | 下划线。链接a自带下划线(常用) |
overline | 上划线。(几乎不用) |
line-through | 删除线。(不常用) |
text-indent
属性用来指定文本的第一行的缩进,通常是将段落的首行缩进
cssdiv{
text-indent: 10px;
}
通过设置该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值
cssp {
text-indent : 2em;
}
em是一个相对单位,就是当前元素( font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的1个文字大小。
line-height
属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离.
cssp{
line-height: 26px;
}
Emmet
语法的前身是Zencoding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法.
div
然后tab键,就可以生成<div></div>
*
就可以了比如div*3
就可以快速生成3个divul > li
就可以了+
就可以了比如div+p
id
名字的,直接写.demo
或者#two
tab键就可以了div
类名是有顺序的,可以用自增符号$
{}
表示CSS基本采取简写形式即可.
w200
按tab 可以生成width: 200px;
lh26
按tab 可以生成line-height: 26px;
Vscode
快速格式化代码:shift+alt+f
<div>
自己占一行,比如一行可以放多个<span>
。常见的块元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>
等,其中<div>
标签是最典型的块元素
特点:
注意:
<p>
标签主要用于存放文字,因此<p>
里面不能放块级元素,特别是不能放<div>
<h1>~<h6>
等都是文字类块级标签,里面也不能放其他块级元素常见的行内元素有<a>、<strong>、<b>、<em>、ci>、<del>、<s>、<ins>、<u>、<span>
等,其中<span>
标签是最典型的行内元素。有的地方也将行内元素称为内联元素
特点:
注意:
<a>
里面可以放块级元素,但是给<a>
转换一下块级模式最安全在行内元素中有几个特殊的标签——<img />、<input />、<td>
,它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素。
特点:
display :block
display: inline
display: inline-block
让文字的行高等于盒子的高度就可以让文字在当前盒子内垂直居中
通过CSS背景属性,可以给页面元素添加背景样式。 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。
background-color
属性定义了元素的背景颜色
background-color: 颜色值;
般情况下元素背景颜色默认值是transparent
(透明),我们也可以手动指定背景颜色为透明色。
background-image: none|url(url);
参数值 | 作用 |
---|---|
none | 无背景图(默认的) |
url | 使用绝对或相对地址指定背景图像 |
如果需要在HTML页面上对背景图像进行平铺,可以使用background-repeat
属性。
background-repeat: repeat|no-repeat|repeat-x|repeat-y;
参数值 | 作用 |
---|---|
repeat | 背景图像在纵向和横向上平铺(默认的) |
no-repeat | 背景图像不平铺 |
repeat-x | 背景图像在横向平铺 |
repeat-y | 背景图像在纵向平铺 |
利用background-position
属性可以改变图片在背景中的位置。
background-position : x y;
参数代表的意思是
坐标和y坐标。可以使用方位名词或者精确单位参数值 | 说明 |
---|---|
length | 百分数│由浮点数字和单位标识符组成的长度值 |
position | top | center | bottom || left | center | right方位名词 |
left top和top left
效果一致background-attachment
属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment : scroll | fixed;
参数 | 作用 |
---|---|
scroll | 背景图像是随对象内容滚动 |
fixed | 背景图像固定 |
为了简化背景属性的代码,我们可以将这些属性合并简写在同一个属性background
中。从而节约代码量
当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为:
background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;
background: rgba(0,0,0,0.3);
background:rgba(0,0,0,.3);
background-size
属性规定背景图像的尺寸
cssbackground-size: 背景图片宽度 背景图片高度;
cover
|contain
;cover
把背景图像扩展至足够大,以使背景图像完全覆盖背景区域contain
把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域linear-gradient
语法:
cssdiv{
background: linear-gradient(to right,
rgb(255, 255, 255) 0%,
rgb(255, 255, 255) 50%,
rgb(31, 176, 169) 50%,
rgb(31, 176, 169) 100%);
}
object-fit
属性指定可替换元素(例如<img>或<video>
的内容应该如何适应到其使用高度和宽度确定的框)
cssobject-fit: contain;
object-fit: cover;
object-fit: fill;
object-fit: none;
object-fit: scale-down;
object-position
规定了可替换元素的内容,在其内容框中的位置。
cssobject-position: center top;
object-position: 100px 50px;
CSS有三个非常重要的三个特性∶层叠性、继承性、优先级。
相同选择器给设置相同的样式,此时一个样式就会**覆盖(层叠)**另一个冲突的样式。层叠性主要解决样式冲突的问题
层叠性原则:
CSS中的继承:子标签会继承父标签的某些样式,如文本颜色和字号。
text-,font-,line-
这些元素开头的可以继承,以及color属性)cssbody{
color: red;
font: 12px/1.5 'Microsoft YaHei';
/*子元素继承了父元素行高的1.5*/
/*这个1.5是当前元素文字大小font-size的1.5倍*/
}
选择器 | 选择器权重 |
---|---|
继承或者* | 0,0,0,0 |
元素选择器 | 0,0,0,1 |
类选择器,伪类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式 style="" | 1,0,0,0 |
!important重要的 | 无穷大 |
权重叠加∶如果是复合选择器,则会有权重叠加,需要计算权重。
CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框(border)、外边距(margin)、内边距(padding)、和实际内容(content)
border
)border可以设置元素的边框。边框有三部分组成:边框宽度(粗细)边框样式边框颜色
cssborder: border-width || border-style || border-color;
属性 | 作用 |
---|---|
border-width | 定义边框粗细,单位是px |
border-style | 边框的样式 |
border-color | 边框颜色 |
边框样式:
属性值 | 描述 |
---|---|
dotted | 定义点线边框 |
dashed | 定义虚线边框 |
solid | 定义实线边框 |
double | 定义双边框 |
groove | 定义 3D 坡口边框。效果取决于 border-color 值 |
ridge | 定义 3D 脊线边框。效果取决于 border-color 值 |
inset | 定义 3D inset 边框。效果取决于 border-color 值 |
outset | 定义 3D outset 边框。效果取决于 border-color 值 |
none | 定义无边框 |
hidden | hidden |
简写:
cssborer: 1px solid red; 没有顺序
边框分开写:
border-top: 1px solid red; 上边框
表格的细线边框:
border-collapse
属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。
cssborder-collapse: collapse;
注意:边框会额外增加盒子的实际大小
padding
)padding
属性用于设置内边距,即边框与内容之间的距离。
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-right | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
简写:
值的个数 | 表达意思 |
---|---|
padding: 5px; | 1个值,代表上下左右都有5像素内边距; |
padding: 5px 10px; | 2个值,代表上下内边距是5像素左右内边距是10像素; |
padding: 5px 10px 20px; | 3个值,代表上内边距5像素左右内边距10像素下内边距20像素; |
padding: 5px 10px 20px 30px; | 4个值,上是5像素右10像素下20像素左是30像素,顺时针 |
注意:内边距也会影响盒子大小,当未指定盒子宽度时,内边距不会影响盒子大小
margin
)margin
属性用于设置外边距,即控制盒子和盒子之间的距离。
设置方式与padding 相同
外边距可以让块级盒子水平居中,但是必须满足两个条件:
css.header{ width: 960px; margin: 0 auto; }
注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-align:cente
r即可。
使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。
解决方案:
尽量只给一个盒子添加margin值
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
解决方案:
overflow: hidden
(推荐)css*{
margin: 0;
padding: 0;
}
注意∶行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
border-radius
属性用于设置元素的外边框圆角(CSS3新特性)
cssborder-radius: length;
radius
半径(圆的半径)原理:(椭)圆与边框的交集形成圆角效果
box-shadow
属性为盒子添加阴影(CSS3新特性)
cssbox-shadow: h-shadow v-shadow blur spread color inset;
值 | 描述 |
---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊距离。 |
spread | 可选。阴影的尺寸。 |
color | 可选。阴影的颜色。请参阅CSS颜色值。 |
inset | 可选。将外部阴影(outset)改为内部阴影。 |
注意:
text-shadow
属性将阴影应用于文本(CSS3新特性)
csstext-shadow : h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊的距离。 |
color | 可选。阴影的颜色。 |
CSS提供了三种传统布局方式:
float
属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
css选择器{ float:属性值;}
属性值 | 描述 |
---|---|
none | 元素不浮动(默认值) |
left | 元素向左浮动 |
right | 元素向右浮动 |
浮动元素会脱离标准流
浮动的元素会一行内显示并且元素顶部对齐
浮动的元素会具有行内块元素的特性
为了约束浮动元素位置,我们网页布局一般采取的策略是:
css选择器{clear: 属性值;}
属性值 | 描述 |
---|---|
left | 不允许左侧有浮动元素(清除左侧浮动的影响) |
right | 不允许右侧有浮动元素(清除右侧浮动的影响) |
both | 同时清除左右两侧浮动的影响 |
清除浮动的策略是:闭合浮动.
额外标签法也称为隔墙法,是W3C推荐的做法
父级添加overflow属性
父级添加after伪元素
父级添加双伪元素
额外标签法也称为隔墙法,是W3C推荐的做法
额外标签法会在浮动元素末尾添加一个空的标签。例如<div style=" clear:both”></div>
,或者其他标签(如<br />
等)。
**注意:**这个新标签必须是块级元素
overflow
属性可以给父级添加overflow
属性,将其属性值设置为hidden
、auto
或 scroll
:after
方式是额外标签法的升级版。也是给父元素添加
css.clearfix: after {
content : "";
display: block;
height: 0;
clear: both;
visibility: hiddsn;
}
.clearfix {/* IE6、7专有*/
*zoom: 1;
}
css.clearfix:before,.clearfix: after {
content : "";
display:table;
}
.clearfix:after {
clear :both;
}
.clearfix {
*zoom: 1;
}
定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。
定位模式决定元素的定位方式,它通过CSS的position
属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
边偏移就是定位的盒子移动到最终位置。有top
、bottom
、left
和right
4个属性。
边偏移属性 | 示例 | 描述 |
---|---|---|
top | top: 80px | 顶端偏移量,定义元素相对于其父元素上边线的距离。 |
bottom | bottom: 80px | 底部偏移量,定义元素相对于其父元素下边线的距离。 |
left | left: 80px | 左侧偏移量,定义元素相对于其父元素左边线的距离。 |
right | right: 80px | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
static
静态定位是元素的默认定位方式,无定位的意思。
css选择器{position: static;}
relative
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的
css选择器{position: relative;}
特点:
absolute
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的
css选择器{ position: absolute; }
特点:
如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document文档)。
如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
绝对定位不再占有原先的位置。(脱标)
子绝父相是"子级是绝对定位的话,父级要用相对定位"
所以相对定位经常用来作为绝对定位的父级 总结︰因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
fixed
固定定位是元素固定于浏览器可视区的位置。主要使用场景∶可以在浏览器页面滚动时元素的位置不会改变。
css选择器{position: fiexd;}
特点:
固定定位也是脱标的,其实固定定位可以看做是一种特殊的绝对定位
**技巧:**让固定定位跟随内容版面变化
步骤:
left: 50%
.走到浏览器可视区(也可以看做版心)的一半位置。margin-left:版心宽度的一半距离
。多走版心宽度的一半位置stickty
粘性定位可以被认为是相对定位和固定定位的混合
css选择器{ position: sticky; top: 10px; }
特点:
top
,left
、right
、bottom
其中一个才有效z-index
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index
来控制盒子的前后次序(z轴)
css选择器{ z-index: 1; }
0
,默认是auto
,数值越大,盒子越靠上z-index
属性margin:0 auto;
水平居中解决方法:
left: 50%;
让盒子的左侧移动到父级元素的水平中心位置maigin-left: -100px;
让盒子向做移动自身宽度的一半绝对定位和固定定位也和浮动类似
浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
绝对定位(固定定位)会压住下面标准流所有的内容
注意:
display
属性display
属性用于设置一个属性应该如何显示
属性值 | 描述 |
---|---|
none | 隐藏元素 |
block | 转换为块级元素,并显示出来 |
inline | 转换为行级元素,并显示出来 |
inline-block | 转换为行内块元素,并显示出来 |
注意:
display
隐藏后,不再占用原来的位置visibility
可见性visibility
属性用于指定一个元素应可见还是隐藏
属性值 | 描述 |
---|---|
visible | 元素可见 |
hidden | 元素不可见 |
注意:
visibility
隐藏后,继续占有原来的位置overflow
溢出overflow
属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度)时会如何处理
属性值 | 描述 |
---|---|
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超过对象尺寸的内容,超出的部分隐藏掉 |
scroll | 不管超出内容否,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局
但是如果有定位的盒子,请慎用overflow: hidden
因为它会隐藏多余的部分
自定义属性(有时候也被称作CSS 变量或者级联变量)是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用。
声明一个自定义属性,属性名需要以两个减号(--
)开始,属性值则可以是任何有效的 CSS 值。
和其他属性一样,自定义属性也是写在规则集之内的
csselement {
--main-bg-color: brown;
}
注意
:root
下,这样就可以在 HTML 文档的任何地方访问到它了css:root {
--main-bg-color: brown;
}
使用一个局部变量时用 var()
函数包裹以表示一个合法的属性值
csselement {
background-color: var(--main-bg-color);
}
自定义属性会继承。
这意味着如果在一个给定的元素上,没有为这个自定义属性设置值,在其父元素上的值会被使用。
用 var()
函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换。
css.two {
color: var(--my-var, red); /* Red if --my-var is not defined */
}
.three {
background-color: var(--my-var, var(--my-background, pink)); /* pink if --my-var and --my-background are not defined */
}
.three {
background-color: var(--my-var, --my-background, pink); /* Invalid: "--my-background, pink" */
}
html元素使用id属性时,a标签使用href属性可以快速定位到html元素
html<div id="tag">TAG</div>
<a href="#tag">backtoTop</a>
但此时的页面滑动是不平滑的
页面使用scroll-behavior: smooth;
属性可以使定位时的滑动更加平滑
csshtml{
scroll-behavior: smooth;
}
CSS属性的继承就是给父级设定了属性,这个父级和它的子级都具有这个属性
字体系列:
属性 | 描述 |
---|---|
font | 组合字体 |
font-family | 规定元素的字体系列 |
font-weight | 设置字体的粗细 |
font-size | 设置字体的尺寸 |
font-style | 定义字体的风格 |
font-variant | 设置小型大写字母的字体显示文本,这意味着所有的小写字母均会被转换为大写,但是所有使用小型大写字体的字母与其余文本相比,其字体尺寸更小。 |
font-stretch | 对当前的 font-family 进行伸缩变形。所有主流浏览器都不支持。 |
font-size-adjust | 为某个元素规定一个 aspect 值,这样就可以保持首选字体的 x-height。 |
文本系列:
属性 | 描述 |
---|---|
text-indent | 文本缩进 |
text-align | 文本水平对齐 |
line-height | 行高 |
word-spacing | 增加或减少单词间的空白(即字间隔) |
letter-spacing | 增加或减少字符间的空白(字符间距) |
text-transform | 控制文本大小写 |
direction | 规定文本的书写方向 |
color | 文本颜色 |
不常用的:
属性 | 描述 |
---|---|
visibility | 元素可见性 |
caption-side、border-collapse、border-spacing、empty-cells、table-layout | 表格布局属性 |
list-style-type、list-style-image、list-style-position、list-style | 列表布局属性 |
quotes | 生成内容属性 |
cursor | 光标属性 |
page、page-break-inside、windows、orphans | 页面样式属性 |
speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、pitch、pitch-range、stress、richness、、azimuth、elevation | 声音样式属性 |
除了可继承属性外就是不可继承属性
一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度
因此,为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称CSS Sprites、CSS雪碧)
核心原理: 将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了。
使用步骤:
background-position
移动图片,一般移动单位为负值字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体
优点:
lcoMoon成立于2011年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。
阿里巴巴M2UX的一个iconfont字体图标字库,包含了淘宝图标库和阿里巴巴图标库。可以使用AI制作图标上传生成。
在CSS样式中全局声明字体
css@font-face {
font-family : 'icomoon ' ;
src: url ( ' fonts/icomoon.eot?7kkyc2 ' ) ;
src: url ( ' fonts/icomoon.eot?7kkyc2#iefix ') format ( 'embedded-opentype ' ),
url (' fonts/icomoon.ttf? 7kkyc2 ' ) format ( 'truetype ' ) ,
url ( ' fonts/ icomoon.woff?7kkyc2' ) format ( ' woff ' ),
url ( ' fonts/icomoon.svg?7kkyc2#icomoon ' ) format ( 'svg ' ) ;
font-weight : normal;
font-style: normal;
}
css.box{
position: relative;
width: 0;
height: 0;
border: 50px solid transparent;
border-top-color: aqua;
margin-top: 100px;
}
界面样式,就是更改一些用户操作样式,以便提高更好的用户体验
cursor
cssli{cursor: pointer;}
设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状
属性值 | 描述 |
---|---|
default | 默认 |
pointer | 指针 |
move | 十字指针 |
text | 文本 |
not-allowed | 禁止 |
outline
cssinput{outline: none;}
resize
csstextarea{resize: none;}
vertical-align
属性CSS的vertical-align
属性用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效。
cssvertical-align: baseline | top | middle | bottom;
值 | 描述 |
---|---|
baseline | 默认。元素放置在父元素的基线上。 |
top | 把元素的顶端与行中最高元素的顶端对齐 |
middle | 把此元素放置在父元素的中部。 |
bottom | 把元素的顶端与行中最低的元素的顶端对齐。 |
图片、表单都属于行内块元素,默认的vertical-align
是基线对齐
此时可以给图片、表单这些行内块元素的vertical-align
属性设置为middle
就可以让文字和图片垂直居中对齐了
图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。主要解决方法有两种:
vertical-align: middle | top | bottom
等。(提倡使用的)display: block;
css/*1.先强制一行内显示文本*/
white-space: nowrap;(默认normal自动换行)
/*2.超出的部分隐藏*/
overflow: hidden;
/*3.文字用省略号替代超出的部分*/
text-overflow: ellipsis;
多行文本溢出显示省略号,有较大兼容性问题,适合于webKit
浏览器或移动端(移动端大部分是webkit
内核)
cssoverflow : hidden;
text-overflow: ellipsis;
/* 弹性伸缩盒子模型显示*/
display: -webkit-box;
/*限制在一个块元素显示的文本的行数*/
-webkit-line-clamp: 2;
/* 设置或检索伸缩盒对象的子元素的排列方式*/
-webkit-box-orient : vertical;
-1px
正好压住相邻盒子边框z-index
)html<style>
* {
padding: 0;
margin: 0;
}
.box {
width: 230px;
height: 70px;
margin: 50% auto;
border: 1px solid #000;
}
img {
display: block;
float: left;
width: 100px;
height: 70px;
background: aqua;
}
</style>
<body>
<div class="box">
<div class="pic">
<img src="" alt="">
</div>
<p>测试文本测试文本测试文本测试文本测试文本测试文本</p>
</div>
</body>
html<style>
.box{
text-align: center;
}
.box a{
display: inline-block;
width: 30px;
height: 30px;
margin-left: 5px;
background: #f7f7f7;
border: 1px solid #ccc;
text-align: center;
line-height: 30px;
text-decoration: none;
color: #333;
}
.box .prev,
.box .next{
width: 85px;
}
</style>
<body>
<div class="box">
<a href="" class="prev"><<上一页</a>
<a href="">1</a>
<a href="">2</a>
<a href="">3</a>
<a href="">4</a>
<a href="">5</a>
<a href="">6</a>
<a href="">7</a>
<a href="">8</a>
<a href="" class="next">>>下一页</a>
</div>
</body>
csswidth: 0;
height: 0;
border-color: transparent red transparent transparent;
border-style: solid;
border-width: 88px 32px 0 0;
不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化
简单理解: CSS初始化是指重设浏览器的样式。(也称为CSS reset
)
每个网页都必须首先进行CSS初始化
Unicode编码字体:
把中文字体的名称用相应的Unicode
编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。
比如:
打开浏览器检查功能(dev tools)
输入
js[].forEach.call($$("*"),function(a){
a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)
})
将所有元素圈出,可以查看元素溢出情况
属性选择器可以根据元素特定属性的来选择元素。这样就可以不用借助于类或者id选择器。
选择符 | 简介 |
---|---|
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元素 |
结构伪类选择器主要根据文档结构来选择器元素,常用于根据父级选择器里面的子元素
选择符 | 简介 |
---|---|
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(n)
选择某个父元素的一个或多个特定的子元素n可以是数字,关键字和公式
even
偶数,odd
奇数公式 | 取值 |
---|---|
2n | 偶数 |
2n+1 | 奇数 |
5n | 5 10 15... |
n+5 | 从第5个开始(包含第五个)到最后 |
-n+5 | 前5个(包含第5个)... |
nth-of-type(n)
选择父元素指定类型的一个或多个特定的子元素两者的区别:
nth-child
对父元素里面所有子元素排序选择,步骤是先找子元素,再看是否匹配类型nth-of-type
对父元素里面指定类型的子元素排序选择,步骤是先看类型是否匹配,再看子元素伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构
选择符 | 简介 |
---|---|
::first-letter | 表示第一个字母 |
::first-line | 表示第一行 |
::selection | 选中的内容 |
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
::placeholder | 匹配每个表单输入框(例如 <input> )的 placeholder 属性 |
注意:
before
和after
创建一个元素,但是属于行内元素element::before{}
before
和after
必须有content
属性before
在父元素内容的前面创建元素,after
在父元素内容的后面插入元素使用伪元素清除浮动,即添加额外标签法,新标签必须是块级元素
css #box::before{
content: '';
display: block;
height: 0;
clear: both;
visibility: hidden;
}
CSS3中可以通过 box-sizing
来指定盒模型,有2个值:即可指定为content-box、border-box
,这样我们计算盒子大小的方式就发生了改变。
两种情况:
box-sizing:content-box
盒子大小为width
+ padding
+ border
(以前默认的)box-sizing: border-box
盒子大小为width
如果盒子模型我们改为了box-sizing: border-box
,那padding
和border
就不会撑大盒子了(前提padding
和border
不会超过width
宽度)
CSS3滤镜filter:
filter
CSS
属性将模糊或颜色偏移等图形效果应用于元素
cssfilter: 函数(); //filter: blur(5px);blur模糊处理,数值越大越模糊
calc()
此CSS函数让你在声明CSS属性值时执行一些计算
csswidth: calc(100%-80px);
过渡( transition
)是CSS3中具有颠覆性的特征之一,我们可以在不使用Flash 动画或JavaScript
的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。
csstransition: 要过渡的属性 花费时间 运动曲线 何时开始;
all
ease
(可以省略)转换(transform
)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果
translate
rotate
scale
语法
transform: translate(x,y); transform: translateX(n); transform: translateY(n);
注意:
translate
最大的优点∶不会影响到其他元素的位置translate
中的百分比单位是相对于自身元素的translate:(50%,50%);
应用:
translate
让元素居中语法:
transform: rotate;(deg)
注意:
应用:
语法:
transform-origin: x,y;
注意:
top
bottom
left
right
center
)语法:
tranform: scale(x,y);
注意:
transform:scale(1,1)
:宽和高都放大一倍,相对于没有放大transform:scale(2,2
:宽和高都放大了2倍transform:scale(2)
:只写一个参数,第二个参数则和第一个参数一样,相当于scale(2,2)transform:scale(0.5,0.5)
:缩小scale
缩放最大的优势∶可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子语法:
transform: translate(x,y),rotate(a,b),scale(w,s);
动画( animation
)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。
步骤
1.使用keyframes
定义动画
css@keyframes 动画名称{
0%{
}
50%{
}
100%{
}
}
/*或者*/
@keyframs 动画名称{
from{
}
to{
}
}
2.使用动画
cssdiv{
animation-name: 动画名称;
animation-duration: 持续时间;
}
/*或者*/
div{
animation: 动画名称 持续时间;
}
属性 | 描述 |
---|---|
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 ",还有"pause "。 |
animation-fill-mode | 规定动画结束后状态,保持forwards , 回到起始backwards |
animation-timing-function
:规定动画的速度曲线,默认是“ease
"
值 | 描述 |
---|---|
linear | 动画从头到尾的速度是相同的。匀速 |
ease | 默认。动画以低速开始,然后加快,在结束前变慢 |
ease-in | 动画以低速开始 |
ease-out | 动画以低速结束 |
ease-in-out | 动画以低速开始和结束 |
steps() | 指定了时间函数中的间隔数量(步长) |
3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向
translform:translateX(100px)
:仅仅是在x轴上移动translform:translateY(100px)
:仅仅是在Y轴上移动translform:translateZ(100px)
:仅仅是在Z轴上移动(注意:translateZ
一般用px单位)transform:translate3d(y,z)
:其中x、y、z分别指要移动的轴的方向的距离perspective
在2D平面产生近大远小视觉立体,但是只是效果二维的
透视写在被观察元素的父盒子上
d
:就是视距,视距就是一个距离人的眼睛到屏幕的距离。
z
:就是z轴,物体距离屏幕的距离,z轴越大(正值)我们看到的物体就越大。
translateZ
transIform:translateZ(100px)
:仅是在Z轴上移动
父元素有了透视,就能看到translateZ
引起的变化了
rotate3d
3D旋转指可以让元素在三维平面内沿着x轴,y轴,z轴或者自定义轴进行旋转
语法:
transform:rotateX(45deg)
:沿着x轴正方向旋转45度transform:rotateY(45deg)
:沿着y轴正方向旋转45度transform:rotateZ(45deg)
:沿着Z轴正方向旋转45度transform:rotate3d(x,y,z,deg)
:沿着自定义轴旋转deg为角度坐标轴方向:
transform-style
transform-style
控制子元素是否开启三维立体环境
transform-style:flat;
子元素不开启3d立体空间默认的transform-style: preserve-3d;
子元素开启立体空间代码:
html <style>
#box{
position: relative;
width: 50px;
height: 50px;
margin: 50% 0;
left: 20%;
float: left;
/* perspective: 200px; */
transform-style: preserve-3d;
transition: all 0.35s;
cursor: pointer;
}
#box:hover{
transform: rotateX(90deg);
}
.front,
.buttom{
position: absolute;
color: #fff;
width: 100%;
height: 100%;
}
.front{
background: red;
transform: translateZ(25px);
}
.buttom{
background: blue;
transform: translateY(25px) rotateX(-90deg);
}
</style>
<body>
<div id="box">
<div class="front">前方</div>
<div class="buttom">底部</div>
</div>
<div id="box">
<div class="front">前方</div>
<div class="buttom">底部</div>
</div>
<div id="box">
<div class="front">前方</div>
<div class="buttom">底部</div>
</div>
<div id="box">
<div class="front">前方</div>
<div class="buttom">底部</div>
</div>
<div id="box">
<div class="front">前方</div>
<div class="buttom">底部</div>
</div>
</body>
代码:
html<style>
body {
perspective: 1000px;
}
#box {
position: relative;
width: 300px;
height: 200px;
margin: 100px auto;
transform-style: preserve-3d;
animation: animation 10s infinite linear;
}
#box:hover{
animation-play-state: paused;
}
@keyframes animation{
from{
transform: rotateY(0);
}
to{
transform: rotateY(360deg);
}
}
#box .page {
position: absolute;
top: 0;
width: 100%;
height: 100%;
color: #fff;
background: #000;
transition: all .35s;
}
#box .page:hover{
transform: scale(1.1);
}
#box .page:nth-child(1) {
transform: translateZ(400px);
}
#box .page:nth-child(2) {
transform: rotateY(60deg) translateZ(400px);
}
#box .page:nth-child(3) {
transform: rotateY(120deg) translateZ(400px);
}
#box .page:nth-child(4) {
transform: rotateY(180deg) translateZ(400px);
}
#box .page:nth-child(5) {
transform: rotateY(240deg) translateZ(400px);
}
#box .page:nth-child(6) {
transform: rotateY(300deg) translateZ(400px);
}
</style>
<body>
<div id="box">
<div class="page">1</div>
<div class="page">2</div>
<div class="page">3</div>
<div class="page">4</div>
<div class="page">5</div>
<div class="page">6</div>
</div>
</body>
-moz-
∶代表firefox
浏览器私有属性-ms-
:代表ie
浏览器私有属性-webkit-
:代表safari
、chrome
私有属性-o-
︰代表Opera
私有属性视口(viewport
)就是浏览器显示页面内容的屏幕区域。视口可以分为布局视口、视觉视口和理想视口
layout viewport
visual viewport
ideal viewport
meta
视口标签通知浏览器操作meta
视口标签的主要目的:布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们布局的视口就多宽meta
视口标签xml<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
属性 | 解释说明 |
---|---|
width | 宽度设置的是viewport 宽度,可以设置device-width 特殊值 |
initial-scale | 初始缩放比,大于0的数字 |
maximum-scale | 最大缩放比,大于0的数字 |
minimum-scale | 最小缩放比,大于0的数字 |
user-scalable | 用户是否可以缩放,yes或no ( 1或0) |
viewport
设置物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的 一个px的能显示的物理像素点的个数,称为物理像素比或屏幕像素比
viewport
设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题background-size
属性规定背景图像的尺寸
cssbackground-size: 背景图片宽度 背景图片高度;
cover
|contain
;cover
把背景图像扩展至足够大,以使背景图像完全覆盖背景区域contain
把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域1.单独制作移动端页面(主流)
2.响应式页面兼容移动端
通常情况下,网址域名前面加m(mobile)
可以打开移动端。通过判断设备,如果是移动设备打开,则跳到移动端页面
通过判断屏幕宽度来改变样式,以适应不同终端
缺点:
移动端浏览器基本以webkit
内核为主,因此我们就考虑webkit
兼容性问题
同时我们浏览器的私有前缀我们只需要考虑添加webkit
即可
移动端CSS初始化推荐使用 normalize.css
官方网址: [http://necolas.github.io/normalize.css/]:
width + border + padding
width
里面包含了border
和padding
也就是说,我们的CSS3中的盒子模型,padding
和border
不会撑大盒子了css/*css3盒子模型*/
box-sizing : border-box;
/*传统盒子模型*/
box-sizing : content-box;
css/*CSs3盒子模型*/
box-sizing: border-box;
-webkit-box-sizing: border-box;
/*点击高亮我们需要清除清除︰设置为transparent完成透明*/
-webkit-tap-highlight-color: transparent;
/*在移动端浏览器默认的外观在ios上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-appearance: none;
/*禁用长按页面时的弹出菜单*/
img, a { -webkit-touch-callout: none; }
流式布局,就是百分比布局,也称非固定像素布局
固定最大最小宽度:
max-width
最大宽度min-width
最小宽度flex
布局graph TB
t1["传统布局"]
t1-->兼容性好
t1-->布局繁琐
t1-->不能很好在移动端布局
graph TB
t2["flex弹性布局"]
t2-->a1["操作方便、布局简单、移动端应用广"]
t2-->PC端支持差
t2-->IE11以下不支持或部分支持
html<style>
#box {
position: relative;
display: flex;
width: 80%px;
height: 50px;
background: antiquewhite;
justify-content: space-around;
}
.page {
position: relative;
width: 50px;
height: 50px;
background: aqua;
}
</style>
<body>
<div id="box">
<div class="page">1</div>
<div class="page">2</div>
<div class="page">3</div>
<div class="page">4</div>
<div class="page">5</div>
<div class="page">6</div>
</div>
</body>
flex
是flexible Box
的缩写,意为"弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex
布局
flex
布局以后,子元素的float
、clear
和vertical-align
属性将失效采用flex
布局的元素,称为flex
容器( flex container
),简称"容器"。它的所有子元素自动成为容器成员,称为flex
项目( flex item
) ,简称"项目"。
对父元素设置的属性
名称 | 描述 |
---|---|
flex-direction | 设置主轴的方向 |
justify-content | 设置主轴上的子元素排列方式 |
flex-wrap | 设置子元素是否换行 |
align-content | 设置侧轴上的子元素的排列方式(多行) |
align-items | 设置侧轴上的子元素排列方式(单行) |
flex-flow | 复合属性,相当于同时设置了flex-direction 和flex-wrap |
flex-direction
设置主轴方向在flex
布局中,是分为主轴和侧轴两个方向,同样的叫法有∶行和列、x轴和y轴
flex-direction
定义了主轴的方向
属性值:
属性值 | 说明 |
---|---|
row | 默认值从左到右 |
row-reverse | 从右到左 |
column | 从上到下 |
column-reverse | 从下到上 |
justify-content
设置主轴上的子元素排列方式justify-content
属性定义了项目在主轴上的对齐方式
注意:在使用这个属性前要确定好那个是主轴
属性值 | 说明 |
---|---|
flex-start | 默认值从头部开始如果主轴是x轴,则从左到右 |
flex-end | 从尾部开始排列 |
center | 在主轴居中对齐(如果主轴是x轴则水平居中) |
space-around | 平分剩余空间 |
space-between | 先两边贴边再平分剩余空间(重要) |
flex-wrap
设置子元素是否换行flex-wrap
属性定义了子元素是否自动换行
属性值 | 说明 |
---|---|
nowrap | 默认值,不换行 |
wrap | 换行 |
align-items
设置侧轴上的子元素排列方式(单行)align-items
属性定义了子项在侧轴上的排列方式
属性值 | 说明 |
---|---|
flex-start | 从上到下 |
flex-end | 从下到上 |
center | 挤在一起居中(垂直居中) |
stretch | 拉伸((默认值) |
align-content
设置侧轴上的子元素的排列方式(多行)align-content
属性定义了子项在侧轴上的排列方式,并且只能用于子项出现换行的情况,在单行下没有效果
属性值 | 说明 |
---|---|
flex-start | 默认值在侧轴的头部开始排列 |
flex-end | 在侧轴的尾部开始排列 |
center | 在侧轴中间显示 |
space-around | 子项在侧轴平分剩余空间 |
space-between | 子项在侧轴先分布在两头,再平分剩余空间 |
stretch | 设置子项元素高度平分父元素高度 |
flex-flow
复合属性flex-flow
是复合属性,相当于同时设置了flex-direction
和flex-wrap
属性 | 描述 |
---|---|
flex-grow | 子项目相对于其余 flex 项目将增长多少 |
flex-shrink | 子项目相对于其余 flex 项目将收缩多少 |
flex-basis | 子项目的初始长度 |
flex | flex-grow 、flex-shrink 、flex-basis 的复合属性 |
align-self | 控制子项自己在侧轴的排列方式 |
order | 属性定义子项的排列顺序(前后顺序) |
flex-grow
属性flex-grow
属性规定某个 flex 项目相对于其余 flex 项目将增长多少
html<div class="flex-container">
<div style="flex-grow: 1">1</div>
<div style="flex-grow: 1">2</div>
<div style="flex-grow: 8">3</div>
</div>
flex-shrink
属性flex-shrink
属性规定某个 flex 项目相对于其余 flex 项目将收缩多少
html<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-shrink: 0">3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
</div>
flex-basis
属性flex-basis
属性规定 flex 项目的初始长度
html<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-basis: 200px">3</div>
<div>4</div>
</div>
flex
属性flex
属性是 flex-grow
、flex-shrink
和 flex-basis
属性的简写属性
html<!-- 使第三个弹性项目不可增长(0),不可收缩(0),且初始长度为 200 像素 -->
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex: 0 0 200px">3</div>
<div>4</div>
</div>
align-self
控制子项自己在侧轴的排列方式align-self
属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
属性
默认值为auto
,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
order
属性定义子项的排列顺序(前后顺序)数值越小,排列越靠前,默认为0
通过在元素上声明 display:grid
或 display:inline-grid
来创建一个网格容器。一旦我们这样做,这个元素的所有直系子元素将成为网格元素。
html<div class="wrapper">
<div>grid</div>
<div>grid</div>
<div>grid</div>
<div>grid</div>
<div>grid</div>
</div>
css.wrapper{
display:grid;
}
一个网格轨道就是网格中任意两条线之间的空间。
属性 | 描述 |
---|---|
grid-template-columns | 定义网格中的行的分布。 |
grid-template-rows | 定义网格中的列的分布。 |
html<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
</div>
css.wrapper {
display: grid;
grid-template-columns: 200px 200px 200px;
}
注意:
网格还引入了一个另外的长度单位来帮助我们创建灵活的网格轨道。
新的fr
单位代表网格容器中可用空间的一等份。
css.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
repeat()
方法 | 描述 |
---|---|
repeat() | 标记来重复部分或整个轨道列表。 |
css.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
可以替换为
css.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
Repeat 语句还可以这样用
在下面的例子中我创建了一个网格:它起始轨道为 20 像素,接着重复了 6 个1fr
的轨道,最后再添加了一个 20 像素的轨道
css.wrapper {
display: grid;
grid-template-columns: 20px repeat(6, 1fr) 20px;
}
在下一个例子中,网格将有共计 10 个轨道,为 1 个1fr
轨道后面跟着 1 个2fr
轨道,该模式重复 5 次。
css.wrapper {
display: grid;
grid-template-columns: repeat(5, 1fr 2fr);
}
如果你在网格定义之外又放了一些东西,或者因为内容的数量而需要的更多网格轨道的时候,网格将会在隐式网格中创建行和列。
按照默认,这些轨道将自动定义尺寸,所以会根据它里面的内容改变尺寸。
你也可以在隐式网格中用 grid-auto-rows
和 grid-auto-columns
属性来定义一个设置大小尺寸的轨道。
属性 | 描述 |
---|---|
grid-auto-rows | 定义隐式网格列的大小 |
grid-auto-columns | 定义隐式网格行的大小 |
html<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
</div>
css.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 200px; /*此处设置了隐式网格的大小*/
}
minmax()
在设置一个显式的网格或者定义自动创建的行和列的大小的时候,我们也许想给网格一个最小的尺寸,确保他们能扩大到容纳他里面添加的内容。
网格用 minmax()
函数来解决这个问题。
html<div class="wrapper">
<div>One</div>
<div>Two
<p>I have some more content in.</p>
<p>This makes me taller than 100 pixels.</p>
</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
</div>
css.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
}
Grid 会为我们创建编号的网格线来让我们来定位每一个网格元素。
网格线的编号顺序取决于文章的书写模式。在从左至右书写的语言中,编号为 1 的网格线位于最左边。在从右至左书写的语言中,编号为 1 的网格线位于最右边
属性 | 描述 |
---|---|
grid-column-start | 网格元素的横向起始点 |
grid-column-end | 网格元素的横向终止点 |
grid-row-start | 网格元素的竖向起始点 |
grid-row-end | 网格元素的竖向终止点 |
html<div class="wrapper">
<div class="box1">One</div>
<div class="box2">Two</div>
<div class="box3">Three</div>
<div class="box4">Four</div>
<div class="box5">Five</div>
</div>
css.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
}
.box1 {
grid-column-start: 1;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
.box2 {
grid-column-start: 1;
grid-row-start: 3;
grid-row-end: 5;
}
属性 | 描述 |
---|---|
grid-column | grid-column-start 和grid-column-end 和缩写 |
grid-row | grid-row-start 和grid-row-end 的缩写 |
css/*书写格式*/
.box {
grid-column: 1 / 2;
grid-row: 1 / 4;
}
grid-area
属性属性 | 描述 |
---|---|
grid-area | grid-column-start 、grid-column-end 、grid-row-start 和grid-row-end 的缩写 |
值的顺序如下
在两个网格单元之间的 网格横向间距 或 网格纵向间距可使用
属性 | 描述 |
---|---|
grid-column-gap | 网格横向间距 |
grid-row-gap | 网格纵向间距 |
grid-gap | 缩写形式 |
注意:
column-gap
、row-gap
和gap
替代html<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
</div>
css.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-column-gap: 10px;
grid-row-gap: 1em;
}
我们可以先给一个区域命名,然后在 grid-template-areas
属性值中指定这个区域的位置。
你可以随意为区域命名
html<div class="wrapper">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="content">Content</div>
<div class="footer">Footer</div>
</div>
css/*网格元素*/
.header {
grid-area: hd;
}
.footer {
grid-area: ft;
}
.content {
grid-area: main;
}
.sidebar {
grid-area: sd;
}
css/*网格容器*/
.wrapper {
display: grid;
grid-template-columns: repeat(9, 1fr);
grid-auto-rows: minmax(100px, auto);
grid-template-areas:
"hd hd hd hd hd hd hd hd hd"
"sd sd sd main main main main main main"
"ft ft ft ft ft ft ft ft ft";
}
留出空单元的方法是使用句点符,“.
”。
css.wrapper {
display: grid;
grid-template-columns: repeat(9, 1fr);
grid-auto-rows: minmax(100px, auto);
grid-template-areas:
"hd hd hd hd hd hd hd hd hd"
"sd sd sd main main main main main main"
". . . ft ft ft ft ft ft"; /*此处使用三个 . 留出三个空白*/
}
grid-template
grid-template
属性可同时设置以下属性:
grid-template-rows
grid-template-columns
grid-template-areas
此处创建了一个布局,和之前的布局一样
css.wrapper {
display: grid;
grid-template:
"hd hd hd hd hd hd hd hd hd" minmax(100px, auto)
"sd sd sd main main main main main main" minmax(100px, auto)
"ft ft ft ft ft ft ft ft ft" minmax(100px, auto)
/ 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr ;
}
第一个值是 grid-template-areas
的值,并且在每一行的末尾声明了行的大小,也就是 minmax(100px, auto)
的作用。
在 grid-template-areas
之后用一个左斜杠分隔,再之后是一个详细的列轨道清单。
grid
grid
简写方式更进一步,它包含了与隐式网格相关的属性,所以通过它可以同时设置以下属性:
grid-template-rows
grid-template-columns
grid-template-areas
grid-auto-rows
grid-auto-columns
grid-auto-flow
css.wrapper {
display: grid;
grid: "hd hd hd hd hd hd hd hd hd" minmax(100px, auto)
"sd sd sd main main main main main main" minmax(100px, auto)
"ft ft ft ft ft ft ft ft ft" minmax(100px, auto)
/ 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr ;
}
一个网格元素可以也成为一个网格容器。
网格元素设置dispaly:grid
就可以实现网格布局
z-index
控制层级使用z-idnex
可以控制网格元素的重叠层级
rem
(root em
)是一个相对单位,类似于em
,em
是父元素字体大小。不同的是rem
的基准是相对于html
元素的字体大小
比如,根元素(html
)设置font-size=12px;
非根元素设置width:2rem;
则换成px
表示就是24px
媒体查询(Media Query
)是CSS3新语法
@media
查询,可以针对不同的媒体类型定义不同的样式@media
可以针对不同的屏幕尺寸设置不同的样式语法:
css@media mediatype and|not|only(media feature){
CSS-Code;
}
mediatype
媒体类型and
not
only
media feature
媒体特性必须有小括号包含注意:
将不同的终端设备划分成不同的类型,称为媒体类型
值 | 解释说明 |
---|---|
all | 用于所有设备 |
print | 用于打印机和打印预览 |
screen | 用于电脑屏幕,平板电脑,智能手机等 |
关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件
关键字 | 描述 |
---|---|
and | 可以将多个媒体特性连接到一起,相当于“目”的意思 |
not | 排除某个媒体类型,相当于“非”的意思,可以省略 |
only | 指定某个特定的媒体类型,可以省略 |
每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格
值 | 解释说明 |
---|---|
width | 定义输出设备中页面可见区域的宽度 |
min-width | 定义输出设备中页面最小可见区域宽度 |
max-width | 定义输出设备中页面最大可见区域宽度 |
rem
实现元素动态大小变化媒体查询+rem
就可以实现不同设备宽度,实现页面元素大小的动态变化
当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets
原理,就是直接在link
中判断设备的尺寸,引用不同的css文件
语法:
css<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="stylesheet.css">
注意:
CSS
是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念
Less ( Leaner Style Sheets的缩写)是一门CSS扩展语言,也称为CSS预处理器 做为CSS的一种形式的扩展,它并没有减少CSS的功能,而是在现有的CSS语法上,为CSS加入程序式语言的特性 它在CSS的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了CSS的编写,并且降低了CSS的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情 Less中文网址: [http://lesscss.cn/]: 常见的CSS预处理器: Sass、Less、Stylus
新建.less
文件,在此之中编写less
语句
less
包含:
语法:
less@变量名: 值;
规范:
使用VSCode
插件Easy less
编译为CSS
文件
&
符号,则它被解析为父选择器的后代&
符号,它就被解析为父元素自身或父元素的伪类语法:
lessfather{
less-code;
son{
less-code;
:hover{
less-code;
}
}
}
任何数字、颜色或者变量都可以参与运算 Less提供了加(+)、减(-)、乘(*)、除(/)算术运算
注意:
1px + 5
让一些不能等比自适应的元素,达到当设备尺寸发生改变 的时候,等比例适配当前设备
graph TB
a1["技术方案1"]
a1-->less
a1-->媒体查询
a1-->rem
略
html
标签font-size
大小步骤:
graph TB
a1["技术方案2(推荐)"]
a1-->less
a1-->flexible.js
a1-->rem
flexible.js
是手机淘宝团队出的简洁高效移动端适配库
它的原理是把当前设备划分为10等份,但是不同设备下,比例还是一致的
rem
值:页面元素的px值/75flexible.js
来去算使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的
设备划分 | 尺寸区间 |
---|---|
超小屏幕(手机) | <768px |
小屏设备(平板) | >= 768px ~ <992px |
中等屏幕(桌面显示器) | >= 992px ~ <1200px |
宽屏设备(大桌面显示器) | >= 1200px |
html<style>
* {
margin: 0;
padding: 0;
}
.container {
width: 750px;
/* background: #000; */
border: 1px red solid;
margin: 0 auto;
padding: 3px;
overflow: auto;
}
.container ul li {
float: left;
width: 93.75px;
height: 30px;
list-style: none;
background: green;
transition: all 1s;
}
/* 超小屏幕下 小于 768 布局容器宽度设置为100% */
@media screen and (max-width: 768px) {
.container {
width: 100%;
}
.container ul li {
width: 33.33%;
}
}
/* 小屏幕下 大于等于768 布局容器宽度改为750px */
@media screen and (min-width: 768px) {
.container {
width: 750px;
}
}
/* 中等屏幕下 大于等于992 布局容器宽度改为970px */
@media screen and (min-width: 992px) {
.container {
width: 970px;
}
}
/* 大屏幕下 大于等于1200px 布局容器宽度改为1170px */
@media screen and (min-width: 1200px) {
.container {
width: 1170px;
}
}
</style>
<body>
<div class="container">
<ul>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
<li>导航栏</li>
</ul>
</div>
</body>
响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果
原理就是在不同屏幕下,通过媒体查询来改变这个布局容器的大小,再改变里面子元素的排列方式和大小,从而实现不同屏幕下,看到不同的页面布局和样式变化
响应式尺寸划分:
代码:
css.container {
height: 150px;
background: #000;
margin: 0 auto;
}
/* 超小屏幕下 小于 768 布局容器宽度设置为100% */
@media screen and (max-width: 767px) {
.container {
width: 100%;
}
}
/* 小屏幕下 大于等于768 布局容器宽度改为750px */
@media screen and (min-width: 768px) {
.container {
width: 750px;
}
}
/* 中等屏幕下 大于等于992 布局容器宽度改为970px */
@media screen and (min-width: 992px) {
.container {
width: 970px;
}
}
/* 大屏幕下 大于等于1200px 布局容器宽度改为1170px */
@media screen and (min-width: 1200px) {
.container {
width: 1170px;
}
}
Bootstrap
来自Twitter (推特),是目前最受欢迎的前端框架
Bootstrap
是基于HTML
、CSS
和Javascript
的,它简洁灵活,使得Web开发更加快捷
官网:[https://www.bootcss.com/]:
Bootstrap使用四步曲:
html<!―-要求当前网页使用lIE浏览器最高版本的内核来渲染-->
<meta http-equiv="X-UA-compatible" dontent="IE=edge" />
<!--视口的设置︰视口的宽度和设备一致,默认的缩放比例和PC端一致,用户不能自行缩放-->
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"/>
<!-- [if lt IE 9]>
<!--解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题-->
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<!--解决ie9以下浏览器对css3 Media Query的不识别-->
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<! [ endif]-->
html<!-- Bootstrap核心样式-->
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
使用bootstrap内置的类名使用样式
参考文档:[https://www.bootcss.com/]:
Bootstrap
需要为页面内容和栅格系统包裹一个.container
容器
Bootstarp
预先定义好了这个类,叫.container
它提供了两个作此用处的类
container
类
container-fluid
类
viewport
)的容器栅格系统英文为“grid systems
”,也有人翻译为“网格系统”,它是指将页面布局划分为等宽的列,然后通过列数的定义来模块化页面布局。
Bootstrap
提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口( viewport
)尺寸的增加,系统会自动分为最多12列Bootstrap
里面container
宽度是固定的,但是不同屏幕下,container
的宽度不同,我们再把container
划分为12等份栅格系统用于通过一系列的行( row
)与列( column
)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中
超小屏幕(手机)<768px | 小屏设备(平板)>=768px | 中等屏幕(桌面显示器)>=992px | 宽屏设备(大桌面显示器)>=1200px | |
---|---|---|---|---|
.container 最大宽度 | 自动(100%) | 750px | 970px | 1170px |
类前缀 | .col-xs- | .col-sm- | .col-md- | .col-lg- |
列( column )数 | 12 | 12 | 12 | 12 |
row
)必须放到container
布局容器里面xs-extra small
:超小; sm-small
:小; md-medium
: 中等;lg-large
:大;column
)大于12,多余的“列( column
)”所在的元素将被作为一个整体另起一行排列padding
class="col-md-4 col-sm-6"
栅格系统内置的栅格系统将内容再次嵌套
.row
元素和一系列.col-sm-*
元素到已经存在的.col-sm-*
元素内。使用.col-md-offset-*
类可以将列向右侧偏移。这些类实际是通过使用*
选择器为当前元素增加了左侧的边距( margin
)
通过使用.col-md-push-*
和.col-md-pull-*
类就可以很容易的改变列( column
)的顺序
为了加快对移动设备友好的页面开发工作,利用媒体查询功能,并使用这些工具类可以方便的针对不同设备展示或隐藏页面内容
类名 | 超小屏 | 小屏 | 中屏 | 大屏 |
---|---|---|---|---|
.hidden-xs | 隐藏 | 可见 | 可见 | 可见 |
.hidden-sm | 可见 | 隐藏 | 可见 | 可见 |
.hidden-md | 可见 | 可见 | 隐藏 | 可见 |
.hidden-lg | 可见 | 可见 | 可见 | 隐藏 |
与之相反的,是visible-xs
visible-sm
visible-md
visible-lg
是显示某个页面内容
vw/vh
是一个相对单位(类似em和rem相对单位)
vw
是: viewport width
视口宽度单位
vh
是: viewport height
视口高度单位1vw
=1/100视口宽度
1vh
= 1/100视口高度注意:
兼容性检测网站:[https://caniuse.com/]:
本文作者:peepdd864
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!