CSS 知识

4 阅读17分钟

CSS导入方式

导入式

 <style>
@import url(css/css.css);
     <style>

内嵌式

<style>
 h1 {
    color:red;
    }
</style>

外联式

<link rel="stylesheet" href="css/css.css">

行内式

 <h1 style="color: red;">我是一个主标题</h1>

选择器

标签选择器

id选择器

类选择器

复合选择器

后代选择器

CSS 选择器中,使用空格表示后代选择器

.box p {
    color:red;
}
选择类名为box的标签的后代的p标签
后代不仅仅是儿子 还可以孙子更深层次的


复杂后代选择器
.box ul li .spec em {
    color:red;
}

交集选择器

h3.box h3标签并且类名是box

并集选择器

ul,ol 同时选择

伪类

伪类是添加到选择器的描述词语,指定要选择元素的特殊状态。超级链接拥有4个特殊状态

a:link
a:visited
a:hover
a:active

元素关系选择器

子选择器 div>p div的子标签p

相邻兄弟选择器 img+p 图片后面紧跟着的段落

通用兄弟选择 p~span p元素后面的所有同层级的span

序号选择器

:first-child 第一个子元素

:last-child 最后一个子元素

:nth-child(3) 第三个子元素

:nth-of-type(3) 第3个某类型子元素

:nth-last-child(3) 倒数第3个子元素

nth-last-of-type(3) 倒数第3个某类型子元素

属性选择器

img[alt] 选择有alt属性的img标签

img[alt="故宫"] 选择alt属性是故宫的img标签

img[alt^="北京"] 选择alt属性以北京开头的img标签

img[alt$="夜景"] 选择alt属性以夜间结尾的img标签

img[alt*="美"] 选择有alt属性中含有美字的img标签

img[alt~="手机拍摄"] 选择有alt属性中有空格隔开的手机拍摄字样的img标签

img[alt|="参赛作品"] 选择有ait属性以“参赛作品-”开头的img标签

CSS3 新增伪类

:empty 选择空标签

:focus 选择当前获得焦点的表单元素

:enabled 选择当前有效的表单元素

:disabled 选择当前无效的表单元素

:checked 选择当前已经勾选的单选按钮或者复选框

:root 选择根元素,即<html>标签

伪元素

css3 新增了 伪元素 特性,顾名思义 表示虚拟动态创建的元素。伪元素用双冒号表示,IE8可以兼容单冒号

::before 和 ::after

::before 创建一个伪元素,其将成为匹配选中的元素的第一个子元素,必须设置content属性表示其中的内容

a::before{
    content: "A";
   }

这样在a标签的文字的前面会增加一个 A

::after 创建一个伪元素,其将成为匹配选中元素的最后一个子元素,必须设置content属性表示其中的内容

::selection CSS伪元素应用于文档中被用户高亮的部分(使用鼠标圈选的部分)

::first-letter会选中某元素(必须是块级元素) 第一行的第一个字母 ::first-line会选中某元素中(必须是块级元素)第一行全部文字

层叠性

多个选择器可以同时作用于同一个标签,效果是叠加的

层叠选择器冲突处理

id选择器权重 > 类选择器权重 > 标签选择器

复杂选择器权重计算

复杂选择可以通过(id的个数,class的个数,标签的个数)的形式,计算权重

!import提升权重

如果我们需要在某个选择器的某条属性提升权重,可以在属性后面写 !important

    .spec {
        color: blue !important;
    }

文本属性

color属性
十六进制表示法
color:#ff0000
#aabbcc 可以简写为abc

rgb表示法
color:rgb(255,0,0)

rgba表示法
color:rgba(255,0,0,.65)

font-size 属性  设置字号
单位一般是px,也会有em和rem单位

font-weight属性 粗细

normal 正常粗细 
bold:加粗 于700等值
lighter 更细  大多数中文字体不支持
bolder 更粗 大多数中文字体不支持

font-style属性设置字体的倾斜
normal:取消倾斜
italic:设置为倾斜
oblique 设置为倾斜字体(用常规字体模拟,不常用)

text-decoration属性
设置文本的修饰线外观的(下划线,删除线)
none没有修饰线
underline下划线
line-through删除线

font-family属性
font-family:"微软雅黑"
字体可以是列表形式,一般英语字体放到前面,后面的字体是前面的字体的“后备”字体
font-family: serif,"Times New Roman","微软雅黑"
字体名称中有空格,必须用引号包裹

定义字体

阿里巴巴普惠字体

text-indent属性 首行文本内容之前的缩进量。

text-indent:2em;


line-height 行高
line-height:30px
line-height:1.5;字号的倍数,推荐的写法。
line-height:150% 字号的倍数,同1.5

单行文本垂直居中
设置 行高=盒子高度  div 100px  line-height:100px
text-align:center 文本水平居中

font合写属性
font属性可以用来作为 font-style,font-weight,font-size,line-height和font-family属性的合写。

font:20px/1.5  Arial, "微软雅黑"
font:italic bold 20px/1.5 Arial,"微软雅黑"

继承性
文本相关的属性普遍具有继承性,只要给祖先标签设置,即可在后代所有标签中生效

color
font-开头的
list-开头的
text-开头的
line-开头的
因为文字相关的属性有继承性,所以会设置body标签的字号,颜色,行高等,这样就能当做整个网页的默认样式了
就近原则

盒模型

所有html标签都可以看做成矩形盒子,由width,height,padding,border构成,称为“盒模型”

盒子的总宽度 =width+左右padding+左右border

width属性
width属性表示盒子内容的宽度,width属性的单位通常是px,移动端开放通常也会涉及到百分数,rem等单位
当块级元素(div,h系列,li等)没有设置width属性时,它将自动撑满,单这并不意味着width可以继承

height属性默认是0,但是会被子元素撑开

padding属性

padding:10px,20px,30px,40px 上右下左
padding:10px,20px,30px,上 左右 下
padding:10px,20px, 上下  左右


margin的塌陷
竖直方向的margin有塌陷现象:小的margin会塌陷到大的margin中,从而margin不叠加,只以大值为准。

一些元素有默认的margin
一些元素(比如body,ul,p等)都有默认的margin,在开始制作网页的时候,要将他们清除。

* {
    margin:0;
    padding:0;
}

* 是通配符选择器,表示选择所有的元素

通配符有效率问题,应该使用并集选择器
body,ul,p{
    margin:0;
    padding:0;
}

盒子水平居中
将盒子左右两边的margin都设置为auto,盒子将水平居中
margin:0 auto;
盒子的垂直居中,需要使用绝对定位技术实现



盒子水平居中 使用 margin:0,auto;
文字的水平居中使用text-align:center
文字上下居中使用行高等于盒子高,让文字垂直居中line-height:100px;

box-sizing 属性
将盒子添加了box-sizing:border-box;之后,盒子的width,height数字就表示盒子实际占有的宽高(不含margin)了,即padding,border变为“内缩的”,不再“外扩"了


# display属性

行内元素和块级元素

块级元素: 不能并排排列,可以设置宽高,当不设置width属性时,width自动撑满,例如 div section header h系列 li ul等
行内元素 可以并排排列,不可以设置宽高,当不设置width属性时自动收缩,例如  a span  em,b u i等


行内块
img和表单元素是特殊的行内快,他们技能设置宽度高度,也能够并排显示

行内元素和块级元素的相互转换
使用display:block,可以将元素转为块级元素
使用display:inline 将元素转为行内元素,将元素转为行内元素的应用不多见
使用display:inline-block 即可将元素转为行内块

span设置padding后会侵入上面组件 使用display:inline-block可以解决这个问题。


元素的隐藏
display:none
将元素隐藏,元素将彻底放弃位置,如同没有写它的标签一样

使用visibility:hidden可以将元素隐藏,但是元素不放弃自己的位置

CSS浮动定位与背景样式

浮动的基本概念

浮动的最本质功能:用来实现并排 float:left;float:left;float:left;

浮动使用要点:要浮动,并排的盒子都要设置浮动 父盒子要有足够的宽度,否则子盒子会掉下去

浮动的顺序贴靠特性 子盒子会按照顺序进行贴靠,如果没有足够的空间,则会寻找前一个兄弟元素

浮动的元素一定能设置宽高 浮动的元素不再区分块级元素,行内元素,已经脱离了标准的文档流,一律能够设置宽度和高度,即使它是span或者a标签。

使用浮动实现网页布局

垂直显示的盒子,不要设置浮动,只有并排显示的盒子才要设置浮动。

大盒子带着小盒子跑,一个大盒子中,又是一个小天地,内部可以继续使用浮动。 超市售卖的塑料袋0.3元一个,div是免费的,不要节约盒子。

清除浮动

BFC规范和浏览器差异

BFC(Box Formatting Context,块级格式化上下文)是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。

如何创建 BFC

方法1 float的值不是none

方法2 position的值不是static或者relative

方法3 display的值不是inline-block,flex或者inline-flex

方法4 overflow:hidden

什么是 overflow:hidden;

overflow:hidden 表示溢出隐藏,溢出盒子边框的内容将会被隐藏。 overflow:hidden是非常好用的让盒子形成后BFC的方法

BFC的其他作用

BFC可以取消盒子margin塌陷 BFC可以阻止元素被浮动元素覆盖

相对定位

盒子可以相对自己原来的位置进行位置调整,称为相对定位。

position:relative
top:100px;
left:100px;

相对定位的性质

相对定位的元素,会在 ”老家留坑“,本质上仍然是在原来的位置,只不过渲染在新的地方而已,渲染的图形可以比喻成”影子“,不会对页面其他元素产生影响。

相对定位用来微调元素位置 相当定位的元素,可以当做绝对定位的参考盒子

绝对定位

盒子可以在浏览器中以坐标进行位置精准描述,拥有自己的绝对位置。

position:absolute;
top:100px;
left:100px;

绝对定位的元素脱离标准文档流,将释放自己的位置,对其它元素不会产生任何干扰。而是对他们进行压盖。

脱离标准文档流的方法:浮动,绝对定位,固定定位

绝对定位的参考盒子

绝对定位的盒子并不是永远以浏览器作为基准点的

绝对定位的盒子会以自己祖先元素中,离自己最近的拥有定位属性的盒子,当做基准点。这个盒子通常是相对定位的,所以这个性质也叫做”子绝父相“

绝对定位的盒子垂直居中

绝对定位的盒子垂直居中是一个非常实用的技术

position:absolute;
top:50%;
margin-top:-自己的高度的一半

堆叠顺序z-index属性

z-index属性时一个没有单位的正整数,数值大的能压制住数值小的。

绝对定位的用处

绝对定位用来制作 ”压盖“,”遮罩“效果

决定定位用来聚合css精灵使用

绝对定位可以结合js实现动画

实际开发中不建议去掉href属性,而是建议设置href="#"或者设置href=”javascript:;“ 禁止链接刷新或跳转

固定定位

不管页面如何卷动,它永远固定在那里

固定定位只能以页面为参考点,没有子固父相这个性质

固定定位脱离标准文档流

固定定位的用途 返回顶部楼层导航等

position:fixed;
top:100px;
left:100px 

浮动 子元素要浮动就都要浮动

如何清除浮动

课程难点

什么是BFC,如何创建BFC,BFC有哪些作用

绝对定位如何实现垂直居中

边框与圆角

border:1px solid red;
       
       线宽度   线型  线颜色
       
 
 值: solid 实线  
 
 dashed 虚线  
 
 dotted  点状线
 
 ## 小属性
 border-width 线宽
 border-style 线型
 border-color 线颜色
 
 ## 四个方向边框
 
 border-top  border-right
 
 ### 小属性
 border-top-width
 border-top-style
 border-top-color
 
 border-left:none 去掉边框
 

box-shadow属性

box-shadow:10px  20px  30px rgba(0,0,0,.5)

x偏移量 y偏移量 模糊量 颜色

阴影延展 
box-shadow:10px  20px  30px 40px rgba(0,0,0,.5)

向4个方向扩展

## 内阴影
box-shadow:inset 10px  20px  30px rgba(0,0,0,.5)

## 多阴影  用逗号分隔开
box-shadow:inset 10px  20px  30px rgba(0,0,0,.5),inset 10px  20px  30px rgba(0,0,0,.5)

圆角

border-radius

课程重点:

边框有哪三个要素,如何分别设置三个要素,常用线性有哪些

圆角如何设置,正圆形如何设置

阴影如何设置

课程难点

如何用盒子制作三角形

背景

## background-repeat属性用来设置背景的重复模式
repeat: xy均平铺(默认) repeat-x 平铺
repeat-y y平铺  no-repeat 不平铺

background:white url(images/archer.png)


## 径向渐变
盒子的background-image属性可以用 radius-gradient() 形式创建径向渐变背景

background-image:radial-gradient(50%,50%,red,blue)


## 背景颜色基础知识
background-color属性表示背景颜色

背景颜色可以用十六进制 rgb()  rgba() 表示法表示

padding区域是有背景颜色的

## 背景图片  background-image

background-image:url(images/bg1.jpg)

如果样式表是外联的,那么要书写从css出发到图片的路径,而不是从html出发

## 背景图片的尺寸 background-size

background-size:100px 200px;


值也可以用百分数来设置,表示为盒子宽高的百分之多少

需要等比例设置的值,写auto

background-size:300px auto 宽度300 高度按照比例

##contain 和cover 特殊的background-size的值

contain表示将背景图片智能改变尺寸以容纳到盒子里

cover表示将背景图片智能改变尺寸以撑满盒子

##  background-clip属性 设置元素背景裁剪到哪个盒子,兼容到IE9

border-box  背景延伸至边框(默认值)
padding-box 背景衍生至内边(padding),不会绘制到边框处(仅在dotted,dashed边框可察觉)
content-box: 背景被裁剪至内容区


## 背景固定  background-attachment属性

background-attachment属性决定背景图像的位置是在视口内固定,或者随着包含他的区块滚动

fixed:自己滚动条不动,外部滚动条不动
local:自己滚动条动,外部滚动条动
scroll:自己滚动条不动,外部滚动条动(默认)

## background-position属性
background-position属性可以设置背景图片出现在盒子的什么位置

background-position:100px 200px;

可以用top,bottom,center,left,right描述图片出现的位置

## CSS 精灵

将多个小图标合并到一张图片,使用background-position属性单独显示其中一个,这样的技术叫做CSS精灵技术,也叫做CSS雪碧图。

CSS精灵可以减少HTTP请求数,加快网页显示速度。缺点也很明显,不方便测试,后期改动麻烦。

## background综合属性
一些常用的背景相关小属性,可以合写到一个background属性中

background:white url(images/archer.png) no-repeat center center;

## 线性渐变
盒子的background-image属性可以用linear-gradient()形式创建线性渐变背景

background-image:linear-gradient(to right,blue,red)

渐变方向也可以写成度数

background-image:linear-gradient(45deg,blue,red)

可以有多个颜色值,并可以用百分数定义他们出现的位置
linear-gradient(to bottom blue,yellow 20% red)


## 浏览器私有前缀,用来对实验性质的CSS属性加以标识。

crome  -webkit-
firefox -moz-
IEEdge -ms-
欧朋  -o-

## 课程总结
透彻理解每一个background属性,你能不重不漏的说出它们吗
如何实现渐变背景
使用background-position属性实现css精灵

变形

斜切变形

将transform属性的值设置为skew()即可实现斜切变形

transform:skew(10deg,20deg) x斜切角度 y斜切角度

旋转变形

将transform属性的值设置为rotate()即可实现旋转变形

transform:rotate(45deg)

.pic6{ /* 以左上角为中心进行旋转*/ transform-origin:0 0; transform: rotate(30deg) }

缩放变形

transform:scale(3); 缩放倍数

数值小于1时,表示缩小元素;大于1表示放大元素

位移变形

transform:translate(100px,200px) 和相对定位非常像,位移变形也会 "老家留坑",”形影分离“

3D 旋转

将 transform属性的值设置为 rotateX() 或者rotateY() 即可实现绕横轴,纵轴旋转

transform:rotateX(30deg) transform:rotateY(30deg)

perspective属性 perspective属性用来定义透视强度,可以理解为人眼到舞台的距离,单位是px

<div>  //舞台,必须设置perspective属性
    <p></p> //演员,设置transform属性
</div>

空间移动

当元素进行3D旋转后,即可继续添加translatex() translateY() translateZ() 属性让元素在空间进行移动

transform:rotateX(30deg) translateX(30deg),translateZ(100px);

制作一个正方体

正方体的每个面都是舞台经过不同的3D旋转,空间移动自己的位置的

课程总结

2D变形有哪些 3D变形有哪些 每种变形的参数意义是什么,正方向是什么 必须准确理解空间移动的意义 必须掌握perspective属性

CSS 动效

transition过渡

transition过渡属性时CSS3 浓墨重彩的特性,过渡可以为一个元素在不同样式之间变化自动添加”补间动画“

transition属性基本使用

transition:width 1s linear 0s; width:什么属性要过渡 1s 动画时长 linear 变化速度曲线 0s:延迟时间

哪些属性可以参与过渡

所有数值类型的属性,都可以参与过渡,比如width,height,left,top,border-radius等

背景颜色颜色和文字颜色都可以被过渡

所有变形(包括2D和3D)都能被过渡

all 如果所有属性都要参与过渡,可以写all

transition:all 1s linear 0s;

过渡的四个小属性

transition-property 哪些属性要过渡 transition-duration 动画时间 transition-timing-function 动画变化曲线(缓动效果) transition-delay 延迟时间

缓动参数

linear 匀速 ease easeIn easeout easeinout

贝塞尔曲线

网站 https://cubic-bezier.com 可以生成贝塞尔曲线,可以自定义动画缓慢的参数

正方体旋转

如果盒子又是舞台又是演员,这个box整体带着里面的p旋转
需要设置

transform-style:preserve-3d;

动画的定义

可以使用@keyframes来定义动画,keyframe表示”关键帧“,在项目上线前,要补上@-webkit-这样的私有前缀


@keyframes r{
    from {
        transform:rotate(0);
    }
    to{
        transform:rotate(360deg);
    }
   
}
 定义动画之后,就可以使用animation属性调用动画
 
 animation:r 1s linear 0s 3;
   r:动画的名字
   1s:总时长
   linear:动销
   0s:延时
   3:执行次数
   
   
   如果想让动画的第2,4,6(偶数次数)自动你想执行,那么要加上alternate参数即可
   animation:movelr 2s linear 0s infinite alternate;
   
   
   如果想让动画停止在最后结束状态,那么要加上forwards
   
   animation:changeToCircle 1s linear 0s forwards;
   
   多关键帧动画
   
   @keyframes changeColor{
       0%{
       background-color:red;
       }
       
       20%{
          background-color:yellow;
       }
       ...
       
      
   }

课程重点

过渡的四个参数是什么意思 什么是过渡的缓慢动作

什么属性能够过渡

如何定义和调用动画?如果想要无线调用动画,应该怎么做