CSS知识点合集

1,491 阅读17分钟

目录

  1. HTML5
  2. CSS盒模型
  3. CSS选择器
  4. CSS新属性
  5. CSS预处理器
  6. 清除浮动
  7. 隐藏页面元素
  8. em /px /rem /vh /vw 的区别
  9. 层叠上下文
  10. BFC
  11. 实现元素的垂直水平居中
  12. 两栏布局,右侧自适应,三栏布局,中间自适应
  13. 实现透明
  14. 颜色的写法
  15. 画一条0.5px的线
  16. 画一个三角形
  17. 画一个正方体
  18. 渐进增强、优雅降级
  19. 图片的格式

CSS

1.HTML5

   1.语义化标签:
       head、footernavasidesectionarticle、dialog、mainfigure
   2.表单:
      类型:input增加了type = color、email、range、number、date、datetime、month、search、url、tel。由于浏览器兼容问题,很多都不适用,一般用ElementUI封装好的
      属性:placeholder、maxlength、minlength、require、autofocus、autocomplete
   3.多媒体标签:audio、vedio  通过src
   4.canvas
   5.SVG绘图:xml的2D图形语言,矢量图标 <svg>标签 ,和canvas有点像
   6.地理定位:Geolocation
   7.拖放API:drag、drop
   8.webWorker
   9.webStorage:sessionStorage/localStorage:getItem/setItem/removeItem/clear/
   10.webSocket
   

2.CSS盒模型

   1.一般说IE8及其以上为W3C盒模型,IE8以下是IE怪异盒模型,不是所有的IE都是IE盒模型
   2.页面渲染时,DOM元素所采用的布局模型,可通过box-sizing进行设置,根据width的区别可分为
       (1)标准盒模型box-sizingcontent-box。widthcontent部分的宽度
       (2)IE盒模型 box-sizingborder-box。width = content + padding + border
    
   3.css盒子包含四部分:内容content、内边距padding、边框border、外边距margin
   4.在w3c标准盒模型里,一个块block的总宽度= width + padding + border + margin
   5.在IE盒模型里,一个块block的总宽度 = width + margin

3.CSS选择器

 1.css选择器常用的有:
   1、id选择器
   2、类选择器
   3、标签选择器
   4、后代选择器(#id div)、
   5、子选择器(.class>.childClass)、
   6、相邻同胞选择器(.class+.brotherClass)、
   7、群组选择器(div,p)
   8、伪类选择器(:hover/:focus/:link/:active/:visited/:first-child)  CSS3
   9、伪元素选择器(:before/:after/:first-letter/:first-line)
   10、属性选择器(attribute) CSS3
   11、层次选择器(p~ul) CSS3
   
 2.选择器的优先级:
   
   !important > 内联 > ID选择器 > 类选择器 > 标签选择器 > * > 继承 > 默认
 
 3.选择器具有继承属性
 4.CSS选择器**解析顺序是从右往左**解析
 
   

4.CSS新属性

   1、布局:新增flexgrid
   2、选择器:新增first-of-type、nth-child
   3、盒模型:新增box-sizing,以选择IE的border-box和W3c的content-box
   4、动画:新增animation2d变换,3d变换
   5、颜色:新增opacity、rbga
   6、字体:嵌入字体、字体阴影
   7、媒体查询@media

5.CSS预处理器(SASS/LESS/POSTCSS)

   常用功能:嵌套、变量、循环语句、条件语句、自动前缀、单位转换、mixin复用
   

6.清除浮动

   (1)clear:both
   (2)创建父级BFC,父级添加display:auto/hidden 属性
   (3)父级设置高度 
   (4)伪元素和IEhack
   

7.隐藏页面元素的方式

   1.displaynone
       元素在页面彻底消失,元素本身占有的空间会被其他元素占有,导致浏览器的重排和重绘,自身绑定的事件不会触发,也不会有过渡效果。
       特点:元素不可见,不占据空间,无法响应点击事件
   2.visibility:hidden
       DOM结构存在,不会触发重排,但会触发重绘,绑定事件不触发
       特点:元素不可见,占据页面空间,无法响应点击事件
   3.opacity:0
       设置元素透明度为0后是不可见的,DOM结构存在,不引发重绘、重排
       特点:改变元素透明度,元素不可见,占据页面空间,可响应点击事件
   4.设置height和width模型属性为0
       将元素的margin、padding、border、width、height等属性设置为0,若元素内有子元素,则设置overflow:hidden。
       特点:元素不可见,不占据空间,无法响应点击事件,DOM不存在
   5.position:absolute
       将元素移出可视区域
       `.hide{position:absolute;top:-9999px;left:-9999px}           `
       特点:元素不可见,不影响页面布局
   6.clip-path
       通过裁剪的形式
       ` .hide{clip-path:polygon(0px 0px 0px 0px 0px 0px 0px 0px)}          `
       特点:元素不可见,占据页面空间,无法响应点击事件

8.em /px /rem /vh /vw 的区别

  1.px 绝对长度单位,页面按精确像素展示
  2.em 相对长度单位,继承父级元素的字体大小font-size,若父级元素未设置,则用浏览器默认的字体尺寸16px,即1em=16px,整个页面的1em值不是一个固定的值
  3.rem 相对长度单位,相对的只是HTML根元素font-size的值,一般在根元素html上加上html{font-size:62.5%},之后1rem = 10px。rem集相对大小和绝地大小的优点于一身,故常用。
  4.vw 根据窗口的宽度分成100等份,100vw就标识满宽,始终针对窗口的宽,vh针对窗口的高。窗口在PC端指浏览器的可视区域,在移动端指布局视口。%相对于的是父元素,不是窗口。
 

9.层叠上下文(stacking context)

  1.盒模型是三维的,平面画布的x轴、y轴,以及表示层叠的z轴,
  2.触发条件:
      (1)根元素 <html>本身即根层叠上下文
      (2)position属性,非static值,并设置z-index
      (3)CSS属性:flex(子元素z-index不为auto)、opacity(不为1)、transform(值不为none)、filter(值不为none)、will-change
  3.层叠顺序规则:
      (1)在同一层叠上下文中层叠等级才有意义
      (2)z-index的优先级最高
      (3)具体规则:background < (z-index<0)  <  block块级元素 < float浮动元素 < inline行内元素 < z-index=0/auto < (z-index>0)
   

10.BFC

   1.BFC(Block Formatting Context),即块级格式化上下文,是页面中的一块渲染区域。
   2.BFC的目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素。
   3.BFC有一套属于自己的渲染规则:
       1、内部的盒子会在垂直方向上一个接一个的放置
       2、对于同一个BFC的两个相邻的盒子的margin会发生重叠,与方向无关
       3、每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此,但是BFC的区域不会与float的元素区域重叠
       4、计算BFC的高度时,浮动子元素也参与计算
       5、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
   4.BFC的触发条件,包含不限于:
       1、根元素,即html元素
       2、浮动元素:float值为leftright
       3overflow值不为visible,为auto、hidden、scroll
       4display值为表格布局或弹性布局,如inline-block、table-cell、table-captiontable、inline-tableflex、inline-flexgrid、inline-grid
       5、绝对定位,position值为absolute、flxed
   
    (1)解决元素间距问题:防止margin重叠(塌陷),同一个BFC会引发margin重叠
    <style>
        p{background:#fcc;width:200px;line-heigth:100px;margin:100px;text-algin:center}
        .wrap{overflow:hidden}  //根据触发规则3,形成新的BFC
    </style>
    <body>
        <p>haha</p>
        <p>hehe</p>
    </body>
    根据触发规则1,根元素触发BFC,两个p元素的margin重叠,以最大的margin为准,根据渲染规则12,由于同一个BFC两个相邻的盒子的margin会发生重叠,所以解决方案是将p再裹一层容器,形成两个独立的BFC即可。
    <div class="wrap">
       <p>hehe</p>
    </div>
    
    
    (2)解决元素高度没了的问题:父级形成BFC可清除内部浮动,BFC内部有浮动元素时,可让它参与高度计算
    <style>
        .par{border:5px solid #fcc;width:300px}
        .child{border:5px;width:100px;height:100px;float:left}
    </style>
    <body>
        <div class="par">
          <div class=child"></div>
          <div class=child"></div>
        </div>
    </body>
    计算par高度时,高度为0,没了,是因为子元素没有参与计算。
    解决:让par形成BFC,根据BFC渲染规则5,浮动元素也会参与计算。
    解决方案:.par{overflow:hidden}  //根据触发规则3,形成BFC
    
    
    
    (3)解决多栏布局不能自适应问题:自适应多栏布局
    <style>
        body{width:300px;position:relative}
        .aside{width:100px;height:100px;float:left;background:#f66;}
        .main{height:200px;background:#fcc;}
    </style>
    <body>
      <div class=aside"></div>
      <div class=main"></div>
    </body>
    由于每个元素的左边距与包含块的左边界相接触,所以即使aside为浮动元素,main的左边依然会与包含块的左边相接触
    解决:根据BFC的渲染规则3BFC不会与浮动盒子重叠
    解决方案:.main{overflow: hidden} //根据BFC触发规则3,形成BFC
    
扩展:
IFC、GFC、FFC
IFC、GFC、FFC实际上都是BFC的细化。
1.IFC(Inline formatting contexts):内联格式上下文
    内联盒子的高度由其包含行内元素中最高的实际高度计算而来。
    触发:display:inline-block,根据BFC触发规则4
    作用:水平居中、垂直居中
2.GFC(GrideLayout formatting contexts):网格布局格式化上下文
    形成一个二维表格,拥有丰富的属性,控制行列、对齐
    触发:display:grid
    作用:二维表格渲染
3.FFC(Flex formatting contexts):自适应格式上下文
    形成一个伸缩容器
    触发:display:flex/inline-flex
    只有谷歌、火狐支持
    
    

11.实现元素的垂直水平居中

   1、利用定位 + margin:auto(脱离文档流)
       (1)父级设置为相对定位position:relative,子级绝对定位posittion:absolute
       (2)子级四个定位属性leftrighttopbottom都设置为0
       (3)子级设置margin:auto
     <style>
        .father{width:500px;height:300px;position:relative}
        .son{width:100px;height:40px;left:0;top:0;right:0;bottom:0;margin:auto;background:#f66;}
    </style>
    <body>
      <div class="father">
          <div class="son"></div>
      </div>
    </body>
   2、利用定位 + margin:负值(父元素高度变化仍然可实现,但是子元素宽高必须已知)
       (1)父级设置为相对定位position:relative,子级绝对定位posittion:absolute
       (2)子级四个定位属性lefttop都设置为50%
       (3)子级设置margin-left:-(子级宽度的50%),margin-top:-(子级高度的50%)
       
   3、利用定位 + transform (优点:父元素高度和子元素的宽高都不需要知道)transform:translate(x,y),x和y表示的是x轴和y轴的值,起点是左上角,scale(n) 放大缩小比例,比如2.0和负值
       (1)父级设置为相对定位position:relative,子级绝对定位posittion:absolute
       (2)子级四个定位属性left、top都设置为50%
       (3)子级设置transform:translate(-50%,-50%) 
       
   4、table布局(未脱离文档流) table-cell
       其实是BFC/IFC内联格式化上下文的原理
       (1)父级设置display:table-cell,子级设置display:inline-block
       (2)父级设置vertical-align:middle,text-align:center
   5、flex布局(不定高,不定宽,常用)
       CSS3中的flex布局
       (1)父级设置display:flex
       (2)父级设置align-items:center,水平居中
       (1)父级设置justify-content: center,垂直居中
   6、grid布局(不定高、不定宽,兼容性相对较差)
       CSS3中的grid布局
       (1)父级设置display:grid
       (2)父级设置align-items:center,水平居中
       (1)父级设置justify-content: center,垂直居中
   
       

12.两栏布局,右侧自适应,三栏布局,中间自适应

   1.两栏布局,有边自适应
     (1)BFC里floatmargin-left
     父级添加BFC,即overflow:hidden
     左边float,定宽:float:left;width:200px
     右边margin-left:210px
     (2)flex弹性布局
     父级设置display:flex
     左边定宽:width:200px
     右边:flex:1
   2.三栏布局,中间自适应
     (1)两边float,中间margin:
         父级BFC,设置overflow:hidden,解决高度没有的问题。
         左边左浮动,定宽:float:left,width:200px
         右边右浮动,定宽:float:right,width:100px
         中间margin:margin-left:210px;margin-right:110px
        `  <div class="container">
            <div class="left"></div>
            <div class="right"></div>
            <div class="middle"></div>
           </div>           `
     (2)两边absolute,中间margin(脱离文档流:根据最近已经定位的祖先元素定位,不考虑html)
         .left{
             position:absolute;
             left:0;
             top:0;
             width:200px
         }
         .right:{
             position:absolute;
             right:0;
             top:0
             width:100
         }
         .middle{
             margin:0 110px 0 210px;
         }
     (3)displaytabletable-layout:flexd
        `  <div class="container">
            <div class="left"></div>
            <div class="middle"></div>
            <div class="right"></div>
           </div>      `
         父级.container{
                 displaytabletable-layout:flexd;
                 width:100%;
                 text-align:center
             }
             .left .right{
                 display:table-cell;
                 width:100px
             }
             .middle{
                 width:100%;  //填充剩下的宽度
                 display:teble-cell
             }
     (4)flex实现
         .container{
             displayflexjustify-content: space-between  //项目平均分布
         }
         .left .right{
             width:100px
         }
         .middle{
             flex:1;  //填充剩下的宽度,或者用width:100%
         }
     (5)grid实现
         .container{
             displaygridgrid-template-columns: 300px auto 300px;
         }
        
        

13.透明的实现

14.颜色的写法

   1.color Name: 颜色关键字,如red
   2.HEX#RRGGBB,十六进制记法,三个参数的取值范围是00-FF,如:#FF8800可简写为#F80
   3.RGB:rgb(R,G,B) 取值范围是正整数或百分数,如rgb(255,255,255)=rgb(100%,100%,100%)
   4.RGBA:在RGB的记法上增加了Alpha,透明度,取值0-1;IE6-IE8不支持RGBA颜色记法。
   5.HSL:(色调Hue,饱和度Saturation,亮度Lightness),H范围0-360,S和L范围0.0%-100.0%,如(360,10%10%)
   6.HSLA:在HSL的基础上增加了Alpha透明度
   7.transparent:全透明,适用于background-color和border-color

15.svg

  矩形 rect标签 <svg><rect width="50" height="100"></rect></svg>
  圆形 circle标签 <svg><circle cx="10" cy="10" r="40"></circle></svg>
  椭圆形 ellipse标签 <svg><circle rx="80" ry="40" x="10" y="10"></circle></svg>
  线 line标签 <svg><line x1 y1 x2 y2></line></svg>
  折线 polyline标签
  多边形 polygon标签

16.border-sizing

  三个值,border-box/content-box/inhert;
  border-box是指包含width = content + padding + border
  

17. CSS单位

  em:相对长度单位,相对当前对象内文本的字体尺寸。当前对象未设置,则继承父级元素的字体尺寸,直到最外层浏览器默认的字体尺寸。浏览器默认字体高都是16px,设置font-size:62.5%,即1em=10px
  rem:相对长度单位,相对的是HTML根(root)元素。兼容IE8以上浏览器,为兼容可以设置font-size:14px;font-size:0.875rem
  px:像素,1in=96px,绝对长度单位。
  
  vm:视口单位,viewPort,1vm = 视口宽度的1%。
  vh:视口单位,viewPort,1vh = 视口高度的1%。
  vmin:选取视口单位中vm和vh中最小的那个。实际应用:元素总是接触屏幕的两条边,width:100vmin
  vmax:选取视口单位中vm和vh中最大的那个。实际应用:总是覆盖可是窗口。width:100vmax
  
  ex:相对长度单位,相对字体“x”的高度,通常为字体高度的一半。实际应用:bottom:1ex下标推高
  ch:相对长度单位,相对数字“0”的宽度。CSS3新增。
  
  cm:厘米,绝对长度单位
  mm:毫米,绝对长度单位
  q:1/4毫米,绝对长度单位
  in: 英寸,1in=2.54cm,绝对长度单位
  pt:点,1in=72pt,绝对长度单位
  pc:派克,1in=6pc,我国新四号铅笔,绝对长度单位
  

18. Flex布局(Flexible Box)

  一、Flex容器的6个属性:flex-direction、flex-warp、flex-flow、justify-content、align-items、align-content
  
  1.flex-direction:row | row-reverse | column | column-reverse 决定主轴的方向。
    row主轴为水平方向,起点在左端,默认值;column主轴为垂直方向,起点在上沿。
  
  2.flex-warp:nowarp | warp | warp-reverse 定义换行。
    nowarp是不换行,默认值。warp换行,第一行在上方。warp-reverse换行,第一行在下方。
  
  3.flex-flow:<flex-direction> <flex-warp> 默认值 row nowarp 简写形式
  
  4.justify-content:flex-start | flex-end | center | space-between | space-around 定义项目在主轴的对齐方式。
  flex-start,左对齐,默认值。center居中。space-between两端对齐。space-around每个项目两侧间隔相等。

  5.align-items:flex-start | flex-end | center | baseline | stretch 定义项目在交叉轴上如何对齐。
  flex-start:上对齐,即交叉轴起点对齐。baseline:第一行文字的基线对齐。stretch:如果项目未设置高度或设为auto,将占满整个容器的高度,默认值。
  
  6.align-content: flex-start | flex-end | center | space-between | space-around | stretch。 定义多根轴线的对齐方式。只有一根轴线,该属性无效。stretch默认值。
  
  二、项目的6个属性:order、flex-grow、flex-shrink、flex-basis、flex、align-self
  
  1.order<integer> 默认值0。定义项目的排列顺序,数值越小,排列越靠前。
  2.flex-grow:<number> 默认值0。定义项目的放大比例,值为0时,如果存在剩余空间,也不放大。
  3.flex-shrink:<number> 默认值1。定义项目的缩小比例,如果空间不足,项目将缩小
  4.flex-basis:<length> | auto。 默认值auto。定义在分配多余空间之前,项目占据的主轴空间。
  5.flex:<flex-gorw> <flex-shrink> <flex-basis> | none。三个值简写,推荐使用。三个属性默认值分别为0,1,auto。两个快捷值:auto(1,1,auto)、none(0,0,auto)。实际应用:flex:1==>flex:1 1 0%;
  6.align-self:auto | flex-start | flex-end | center | baseline | stretch。 允许单个项目与其他项目有不一样的对齐方式。可覆盖align-items。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
  

19.多列等高布局:

 1.flex布局:利用flex属性的flex-direction的默认值row和align-items的默认值stretch占满整个容器高度。
 2.display属性的table-cell布局。table布局天然具有等高布局。
 3.overflow:hidden.生成BFC容器,父容器设置内外边距底部正负值。
 <div class="box" style="overflow:hidden"> //生成BFC容器
     <div></div>
     <div></div>
     <div></div>
 </div>
 <style>
     .box{overflow:hidden}
     .box > div{
         padding-bottom10000pxmargin-bottom:-10000pxfloatleft;
         width:30%
     }
 </style>
 

20. CSS选择符:

1.元素选择符:*(通配选择符:选定所有对象)、类型选择符(即标签如P/div/h1)、ID选择符、类选择符
2.关系选择符:包含选择符(ul li{color:red})、子选择符(ul>li{color:red})、相邻选择符(p+p)、兄弟选择符(p~p)
3.属性选择符:input[type="text"]{}
4.伪类选择符:a:link未访问、a:visited已访问、a:hover悬浮、a:active点击链接时,顺序是love/hate
input:focus输入焦点时、not(s)匹配不含s选择符的元素E如p:not(.ab)、
first-child匹配父元素的第一个子元素、last-child、only-child、nth-child、nth-last-child
first-of-type匹配同类型中的第一个同级兄弟元素,如:p:first-of-type、last-of-type、only-of-type、nth-of-type、nth-last-of-type
empty匹配没有任何子元素的如:<p></p> p:empty{color:red}
checked:匹配用户界面选中状态的元素
enabled:处于可选状态的元素
disenabled:处于不可选状态的元素
target:匹配相关URL指向的E元素,URl后面跟锚点#,指向文档内某个具体的元素,这个被链接的元素就是目标元素,:target选择器用于选取当前活动的目标元素。
5.伪对象选择符:
:first-letter设置对象内的第一个字符的样式,配合float和font-size制作首字下沉的效果,用于块对象
:first-line设置对象内的第一行样式,用于块对象
:before设置对象前的内容,配合content使用
:after设置对象后的内容,配合content使用
:selection设置对象被选择时的样式。

21.HMTl的块级元素、内联元素、空元素

1.块级元素:divpulollih1h6dldtdd。两个特点:(1)独占一行.(2)宽、高、边距可设置。
2.内联元素:spanlabelinputaem(斜体强调的作用)、strong(强调黑色加粗),块级元素通过设置display:inline也可以变成内联元素。两个特点:(1)和其他元素都在一行上(2)元素的宽度就是它包含的文字、图片的宽度。
3.内联块级元素:img 。块级元素通过设置display:inline-block
4.空元素:<img />、<input/>、<br/>、<hr/>(水平线)、<link/>、<meta />没有子级节点,没有闭合标签

  
  

22. 画一条0.5px的线

三种实现方式:
1、meta的viewport
<meta
2、采用border-image
3、采用transformscale(0.5)
4、采用渐变方式
    

23. 渐进增强、优雅降级

出现的这两个概念的背景是因为CSS3的兴起,低版本浏览器不支持CSS3,高版本浏览器需要CSS的效果。主要以hack的方式即加浏览器前缀实现兼容,如-webkit-border-radius和-moz-border-radius
渐进增强:针对低版本浏览器构建布局页面,实现页面的基本功能和效果。然后再对高版本浏览器加上CSS3的交互效果,比如border-radius。
优雅降级:针对一个高版本浏览器构建页面,实现各种动态效果和CSS3的布局,然后再保证低版本浏览器有基本的功能。
  

24. 图片的格式

5种格式:png、jpg、gif、webp、base64

png格式:分为png8和png24。
png8:是指8位索引色位图,只有透明和不透明两种,适合小体积的图片,如图标,能显示2的8次方即256种。
png24: 是指24位索引色位图,适合摄影作品。
png34:类似png24,多了一个alpha通道。

jpg格式:有.jpg和.jpeg两种格式,jpeg是苹果,window用jpg,习惯用法,现在都可以

gif格式:支持动画,类似于png8布尔透明类型。

webp格式:谷歌推出加快图片加载速度的图片格式,体积只有jpg的2/3,有损压缩。

base64:网络上传输8bit字节码的编码方式,用于http传递长信息。
       优点:1. 减少http请求 2. 避免跨域
       缺点:1. 浏览器版本支持的兼容性问题 2. 增加css尺寸 3. 增加编码成本