学习笔记-CSS
移动端开发样式
大小常用单位
—————-
引入方式
内嵌式/内联式
1 | <head> |
链接式
1 | <head> |
行内式
1 | <body> |
导入式
在html中:
1 | <style> |
在css中:
1 | @import url(a.css) |
优先级
理论上
!important > 行内式 > 内嵌式 > 链接式 > 导入式
1 | p{ |
实际上
内嵌、链接、导入在同一个文件头部,谁离相应的代码近,谁的优先级高(页面多种方式使用css样式引入)
心得:如果同一个css定义分布在两个css文件中,那么样式取后引入的css文件。所以最好将第三方组件的css放在html靠前位置,自定义的css放到html后面位置。
选择器
标签选择器
根据指定的标签名称, 在当前界面中找到所有该名称的标签, 然后设置属性
1 | <html> |
id选择器
#id :根据指定的id名称找到对应的标签, 然后设置属性
1 | <html> |
类选择器
.class:根据指定的类名称找到对应的标签, 然后设置属性
类选择器类似于姓名,可以重复;ID选择器类似于身份证号,不能重复,一般留给js适用。
1 | <html> |
后代选择器
用空格隔开
后代选择器找所有的儿子、孙子、重孙子等后代;
1 | <style> |
子元素选择器
用 > 隔开
子元素选择器只找亲儿子
1 | <style> |
交集选择器
没有任何符号,连在一起
同样可以使用标签名称/id名称/class名称,仅仅作为了解, 企业开发中用的并不多
1 | 选择器1选择器2{ |
并集选择器
使用 ,隔开
给所有选择器选中的标签设置属性,同样可以使用标签名称/id名称/class名称
1 | 选择器1,选择器2{ |
兄弟选择器
从上往下逐行寻找
相邻兄弟选择器
用+隔开
css2,给指定标签后面紧跟的那个标签设置属性,关键词:同级紧跟
1 | <style> |
除了都是ID这一种情况,其他情况都可以,因为ID是唯一的。
通用兄弟选择器
用~隔开
css3,给指定选择器后面的所有选择器选中的所有标签设置属性,关键词:同级所有
1 | <style> |

相邻兄弟选择器被割开就不会被作用;通用兄弟选择器被隔开也会作用。
序选择器
选中指定的任意标签然后设置属性
| 同级别的第几个(不区分类型) | 同级别同类型的第几个 |
|---|---|
:first-child 选中同级别中的第一个标签 |
:first-of-type 选中同级别中同类型的第一个标签 |
:last-child 选中同级别中的最后一个标签 |
:last-of-type 选中同级别中同类型的最后一个标签 |
:nth-child(n) 选中同级别中的第n个标签 |
:nth-of-type(n) 选中同级别中同类型的第n个标签 |
:nth-last-child(n) 选中同级别中的倒数第n个标签 |
:nth-last-of-type(n) 选中同级别中同类型的倒数第n个标签 |
:only-child 选中父元素中唯一的标签 |
:only-of-type 选中父元素中唯一类型的某个标签 |
1 | <style> |
属性选择器
- [attribute]
-作用:根据指定的属性名称找到对应的标签, 然后设置属性 - [attribute=value]
-作用: 找到有指定属性, 并且属性的取值等于value的标签, 然后设置属性
-最常见的应用场景, 就是用于区分input属性
1 | <style> |
伪类选择器
伪类用于定义元素的特殊状态。
:link:从未被访问过的状态:visited:被访问过的状态:hover:鼠标悬停时:actiuve:鼠标长按状态- 所有伪类详见:w3school
1 | a:link { |
通配符选择器
*:给当前界面上所有的标签设置属性
1 | *{ |
CSS显示模式
显示模式
在HTML中HTML将所有的标签分为两类, 分别是容器级和文本级
- 容器级的标签独占一行;可以嵌套其它所有的标签
- 文本级的标签不独占一行;只能嵌套文字/图片/超链接
在CSS中CSS也将所有的标签分为两类, 分别是块级元素和行内元素(还有一类, 行内块级元素)
- 块级元素会独占一行,可以设置宽高
- 行内元素不会独占一行,不可以设置宽高
- 行内块级元素不独占一行,可以设置宽高
显示模式转换
设置元素的display属性,可以转换css元素的显示模式
1 | <style> |
网页布局方式
布局方式其实就是指浏览器是如何对网页中的元素进行排版的
标准流
标准流(文档流/普通流)排版方式,浏览器默认的排版方式就是标准流的排版方式
- 垂直排版, 如果元素是块级元素, 那么就会垂直排版
- 水平排版, 如果元素是行内元素/行内块级元素, 那么就会水平排版
浮动流-float
浮动流是一种”半脱离标准流”的排版方式。浮动流只有一种排版方式,,就是水平排版。它只能设置某个元素左对齐或者右对齐
- 在浮动流中是
不区分块级元素/行内元素/行内块级元素的 - 无论是块级元素/行内元素/行内块级元素都可以水平排版
- 在浮动流中无论是块级元素/行内元素/行内块级元素都可以设置宽高
- 综上所述, 浮动流中的元素和标准流中的行内块级元素很像
注意:
浮动流中没有居中对齐, 也就是没有center这个取值
在浮动流中是不可以使用margin: 0 auto;
假设父盒子没有设置高度并且不浮动,那么子元素设置了高度并且浮动,不会撑起父元素的高度

脱标
当某一个元素浮动之后, 那么这个元素看上去就像被从标准流中删除了一样, 这个就是浮动元素的脱标。影响:如果前面一个元素浮动了, 而后面一个元素没有浮动 , 那么这个时候前面一个元就会盖住后面一个元素。

排序规则
相同方向上的浮动元素, 先浮动的元素会显示在前面, 后浮动的元素会显示在后面
不同方向上的浮动元素, 左浮动会找左浮动, 右浮动会找右浮动
浮动元素浮动之后的位置, 由浮动元素浮动之前在标准流中的位置来确定
1 | <style> |

贴靠现象
如果父元素的宽度能够显示所有浮动元素, 那么浮动的元素会并排显示
如果父元素的宽度不能显示所有浮动元素, 那么会从最后一个元开始往前贴靠
如果贴靠了前面所有浮动元素之后都不能显示, 最终会贴靠到父元素的左边或者右边

字围现象
浮动元素不会挡住没有浮动元素中的文字, 没有浮动的文字会自动给浮动的元素让位置,这个就是浮动元素字围现象
1 | div{ |

清除浮动
因为浮动流子元素不会撑起父元素的高度,并且浮动元素浮动之后的位置, 由浮动元素浮动之前在标准流中的位置来确定,往往会出现不是我们想要的效果。示例如下:
1 | <style> |
显示效果:

方法一:添加height
给前面的父盒子(box1)添加高度height
- 在企业开发中能不写高度就不写高度, 所以这种方式不常用
方法二:添加clear:both
后面的盒子(box2)添加clear:both;属性清除前面浮动元素对我的影响
- 使用clear:both之后margin属性会失效, 所以
不常用
方法三:外墙法
在两个有浮动子元素的盒子之间添加一个额外的块级元素,并设置高度
- 但是需要添加大量无意义的标签, ,不符合结构、样式分离的思想,后期维护不方便,所以
不常用
方法四:内墙法
在前面一个盒子(box1)的子元素最后添加一个额外的块级元素
- 内墙法会自动撑起盒子的高度, 所以可以直接设置margin属性
- 同外墙法缺点一样,不符合结构、样式分离的思想,所以
不常用
方法五:添加overflow:hidden
给前面一个盒子(box1)添加overflow:hidden;属性
由于overflow:hidden可以撑起盒子的高度, 所以可以直接设置margin属性
IE8以前不支持利用overflow:hidden来清除浮动, 所以需要加上一个
*zoom:1;来兼容优点:可以不用添加额外的标签又可以撑起父元素的高度,
缺点:和定位结合在一起使用时会有冲突
方法六:添加伪元素
给前面一个盒子添加伪元素
1 | <style> |
- 本质上和内墙法一样, 都是在前面一个盒子的最后添加一个额外的块级元素
- 添加伪元素后可以撑起盒子的高度, 所以可以直接设置margin属性
方法七:添加双伪元素
定位流
| 标准流 | 区分 行/块/行内块 | 即静态定位 |
|---|---|---|
| 浮动流 | 不区分 行/块/行内块 | 脱离标准流 |
| 相对定位 | 区分 行/块/行内块 | 不脱离标准流 |
| 绝对定位 | 不区分 行/块/行内块 | 脱离标准流 |
| 固定定位 | 不区分 行/块/行内块 | 脱离标准流 |
相对定位 - relative
position: relative;
相对定位:就是相对于自己以前在标准流中的位置来移动
- 在相对定位中,同一个方向上的定位属性只能使用一个
- top/bottom 只能用一个
- left/right 只能用一个
- 相对定位是
不脱离标准流的, 会继续在标准流中占用一份空间 - 由于相对定位是不脱离标准流的, 所以在相对定位中
区分块级元素/行内元素/行内块级元素 - 由于相对定位是不脱离标准流的, 并且相对定位的元素会占用标准流中的位置, 所以给相对定位的元素设置margin/padding等属性时,是
基于原先的位置

绝对定位 -absolute
position: absolute;
绝对定位:就是相对于body或者某个定位流中的祖先元素来定位
- 绝对定位的元素是
脱离标准流的, 不会占用标准流中的位置 - 由于绝对定位的元素是脱离标准流的, 所以绝对定位的元素
不区分块级元素/行内元素/行内块级元素 - 如果一个绝对定位的元素是以body作 为参考点, 那么其实是以网页首屏的宽度和高度作为参考点, 而不是以整个网页的宽度和高度作为参考点
- 相对于body定位会随着页面的滚动而滚动
- 一个绝对定位的元素会忽略祖先元素的padding
绝对定位参考点:依据祖先有没有定位流(相对定位relative/绝对定位absolute/固定定位fixed)
- 祖先元素没有定位流,默认以 body作为参考点
- 祖先元素有一个是定位流,就以那个祖先元素为参考点
- 祖先元素有多个定位流,谁离得最近就以谁为参考点
绝对定位水平居中
- 注意:当一个盒子绝对定位之后不能使用margin: 0 auto;让盒子自身居中
- 如果想让一个绝对定位的盒子自身居中, 可以使用:
- position:absolute;
- left:50%;
- margin-left:-元素宽度一半px;
子绝父相
子元素绝对定位父元素相对定位;企业开发中一般相对定位和绝对定位都是一起出现, 很少单独使用。

相对定位和绝对定位一般都是用来做覆盖效果的, 当看到某个元素覆盖在另外一个元素上时, 第一时间就要想到定位流


固定定位 - fixed
position: fixed;
固定定位和前面学习的背景关联方式很像, 背景关联方式可以让某个图片不随着滚动条的滚动而滚动, 而固定定位可以让某个盒子不随着滚动条的滚动而滚动
- 固定定位的元素是
脱离标准流的, 不会占用标准流中的位置 - 由于固定定位的元素是脱离标准流的, 所以绝对定位的元素
不区分块级元素/行内元素/行内块级元素 - IE6不支持固定定位

静态定位 - static
position: static;
默认情况下标准流中的元素position属性就等于static, 所以静态定位其实就是默认的标准流
- 应用场景:一般用于配合JS清除定位属性
z-index属性
z-index:8; 用于指定定位的元素的覆盖关系,默认值为0
- 默认情况下定位的元素一定会盖住没有定位的元素
- 默认情况下写在后面的定位元素会盖住前面的定位元素
- 默认情况下所有元素的z-index值都是0, 如果设置了元素的z-index值, 那么谁比较大谁就显示在前面
- 定位元素的从父现象
- 父元素没有z-index值, 那么子元素谁的z-index大谁盖住谁
- 父元素z-index值不一样, 那么父元素谁的z-index大谁盖住谁,子元素的z-index值将会失效

过度模块
过度属性
transition-property:哪些属性要过度transition-duration:过度时间多少秒- 更多见 w3school
1 | div { |
过度连写
transition: property过度属性 duration过度时长 运动速度 延迟时间
后两个可以省略,采用默认的
1 | div { |
如果变化的属性很多可以简写,缺点是无法设置各属性的过度时间,只能通一一样
1 | div { |
2D转换
使用 transform 属性,利用以下值实现2D转换
translate()- 平移,正为右/下,负为左/上rotate()- 旋转,正为顺,负为逆scaleX()- 缩放
1 | transform: translate(50px, 100px); |
连写:用空格隔开
1 | transform:translate(50px, 100px) rotate(20deg) scale(0.5, 3); |
—————-

文字属性
font-style
规定文字样式
1 | font-style:normal; //正常的,默认 |
font-weight
规定文字粗细
1 | font-weight: normal/lighter/bold/bolder; // 正常的/更细/粗/更粗 |
font-size
规定文字大小
1 | font-size:16px; |
font-family
规定文字字体
1 | font-family:"微软雅黑","宋体","黑体",opposans,SimHei |
文字属性缩写
1 | font:style weight size family; |
文本属性
text-decoration
给文本添加装饰
1 | text-decoration:none; |
text-align
设置文本水平对齐方式
1 | text-align: center; |
text-indent
设置文本缩进
1 | text-indent: 2em; |
颜色属性
1 | color:rgb(0,0,0); //RGB(红,绿,蓝) |
1 | color:#000000; //十六进制 |
背景属性
background-color
1 | background-color: rgb(0.0.0); |
background-image
1 | background-image:url(images/girl.jpg); |
background-repeat
控制背景平铺
1 | background-repeat: repeat; //默认值,平铺 |
background-position
控制背景定位
1 | background-position: 水平方向 垂直方向; |
方位名词取值:
- 水平方向: left center right
- 垂直方向: top center bottom
具体的像素取值:
- 正负数值,必须带单位
background-attachment
控制背景关联方式
1 | background-attachment:scroll; |
背景属性连写
1 | background: 背景颜色 背景图片 平铺方式 关联方式 定位方式; |
CSS精灵图
CSS精灵图是一种图像合成技术, 全称CSS Sprite;可以减少请求的次数, 以及降低服务器处理压力。CSS的精灵图需要配合背景图片和背景定位来使用。
1 | <style> |
完整图片:

显示效果:

盒模型
border
1 | 【1】连写 |
padding - 内边距
边框和内容之间的距离就是内边距
1 | 【1】连写 |
- 给标签设置内边距之后, 标签占有的
宽度和高度会发生变化 - 给标签设置内边距之后,
内边距也会有背景颜色

margin - 外边距
标签和标签之间的距离就是外边距
1 | 【1】连写 |
- 外边距的那一部分是
没有背景颜色的 - 默认, 水平方向上的外边距会叠加;但是垂直方向上
外边距是不会叠加的, 会出现合并现象, 谁的外边距比较大就听谁的

margin-top问题
- 如果两个盒子是父子嵌套关系, 设置了子盒子顶部的外边距, 父盒子也会被顶下来
- 如果父盒子不想被一起顶下来,可以给父盒子添加一个边框
border属性 - 或者给父盒子添加一个
overflow:hidden;属性 - 推荐 - 在企业开发中, 一般情况下如果需要控制嵌套关系盒子之间的距离, 应该首先考虑padding, 其次再考虑margin,margin本质上是用于控制兄弟关系之间的间隙的

margin:0 auto;问题
在父子盒元素关系中,子元素设置
margin:0 auto;可以让子元素盒水平居中。auto可以理解为水平方向上平分剩余空间注意想要垂直居中,只能通过像素来设置,不能用
auto。
text-align:center;和margin:0 auto;区别
text-align: center;是设置盒子中存储的文字/图片水平居中margin:0 auto;是让盒子自己水平居中

盒模型宽度和高度
1.内容的宽度和高度
就是通过width/height属性设置的宽度和高度
2.元素的宽度和高度
就是 边框+内边距+内容
1 | 元素的宽度 = 左边框 + 左内边距 + width + 右内边距 + 右边框 |
3.元素空间的宽度和高度
就是 外边距+边框+内边距+内容
1 | 宽度 = 左外边距 + 左边框 + 左内边距 + width + 右内边距 + 右边框 + 右外边距 |
box-sizing属性
CSS3中新增了一个box-sizing属性, 这个属性取值为border-box可以保证我们给盒子新增内边距padding和边框border之后, 盒子元素的宽度和高度不变,系统会自动减去一部分内容的宽度和高度。
1 | box-sizing:content-box; |
清除默认边距
为了更好的控制合资的高度、计算盒子的宽高等等,编写代码之前第一件事就是清空浏览器默认的边距。
https://clarle.github.io/yui3/yui/docs/cssreset/
1 | body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} |
line-heitht
1 | ling-height:10px; |
文字在行高中默认是垂直居中的
单行文字,设置行高等于盒子高度,即可垂直居中
多行文字,只能通过
pandding-toppadding-bottom来让文字居中



