前端CSS面试题个人总结

1、css文件引入的方式有哪些?link和@import的区别?

  • 引入方式3种:行内添加定义style属性值,页面头部内内嵌在style标签中调用和外链调用css文件

  • 区别:

    1.link是xhtml标签,除了加载css外,还可以定义RSS等其他事务,@import只能加载CSS

    2.link引用CSS时候,页面载入的时候同时加载,@import需要页面网页完全载入后加载

    3.link是XHTML标签,没有兼容问题,@import是在CSS2.1提出的,低版本的浏览器不支持。

    4.link支持使用javascript控制DOM去改变样式,但是@import不支持。

2、介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

  • 盒子模型有两种,IE盒子模型、W3C盒子模型;
  • 盒子模型:内容(content),内边距(padding),边框(border),外边距(margin)
  • 区别:IE的content部分把border和padding计算进去了

3、CSS选择器有哪些?权重值?优先级?

  • id选择器(#id); 0 1 0 0
  • 类选择器(.class); 0 0 1 0
  • 标签选择器(div); 0 0 0 1
  • 通配符(*);
  • 属性选择器(a[rel = 'xyz'];
  • 伪类选择器(a:hover,li:nth-child); 0 0 1 0
  • 相邻选择器(h1+p);根据基础选择器权重叠加
  • 子选择器(ul>li);根据基础选择器权重叠加
  • 后代选择器(li a);根据基础选择器权重叠加
  • 优先级就近原则,同权重样式定义最近者为准,载入样式以最后载入的定位为准;优先级:!important >行内样式(1 0 0 0)> id > class > tag > *(通配符)

4、display有哪些值?说明他们的作用

  • block:设定元素变为块级元素,占据一整行,可设置宽高;
  • inline-block:设定元素为行内块元素,可设置宽高,一行能显示多个;
  • inline:行内元素,不可设置宽高,一行可显示多个;
  • none:设置元素不可见;
  • flex:开启弹性布局;
  • table:作为块级表格显示;
  • list-item:像块级元素一样显示,并添加样式列表标记;
  • inherit:继承父元素的display属性;

5、position有哪些值?说明他们的作用和区别?

  • relative:相对定位,相对于正常位置进行定位,不脱离标准流,占有位置
  • absolute:绝对定位,相对于父元素中最近一个position不为 static(静态,无定位)定位;脱离标准流,不占有位置
  • fixed:相对于浏览器窗口定位;脱离标准流,不占有位置
  • static:默认,无定位;
  • inherit:继承父元素的定位;

6、为什么要清除浮动?清除浮动的方式?

  • 清除浮动主是要为了解决父级元素因为子级浮动引起内部高度为0的问题(父级没有高度的情况);很多情况下不方面给父亲高度,比如新闻,不知道新闻里面多少字,不方面给高度,一般是让里面的内容自动撑开高度。这个时候就需要清除浮动,用clear 属性:清除浮动

  • 清除方式:
    1、父级盒子定义一个height
    2、父级盒子定义overflow:hidden/auto;
    3、额外标签法:在浮动盒子的后面加一个空标签,例如

    .clear{
        clear:both;
    }
    

    4、使用after伪元素清除浮动

    .clearfix:after{
        display:block; /*  转换为块级元素*/
        content:".";  /*  内容为小点,尽量加不要空,防止旧版本有空隙*/  
        height:0; /*  高度为0*/  
        visibility:hidden;/* 隐藏小点*/
        clear:both;
    }
    .clearfix{
        *zoom:1; /*  *代表IE6和IE7能识别的特殊符号,带有这个*的属性,只有IE6和IE7才执行,zoom就是IE6和IE7清除浮动的方法,IE6和IE7浏览器的处理方式,所以必须加上*/
    }
    

    5、使用before和after双伪元素清除法

    .clearfix:before,.clearfix:after{
        display:table; /*  转换为块级元素*/
        content:"";  /*  为空*/  
    }
    .clearfix:after{
       clear:both;
    }
    .clearfix{
        *zoom:1;
    }
    

7、CSS3有哪些新特性

  • 实现圆角border-radius,阴影box-shadow,边框图片border-image
  • 对文字加特效text-shadow,强制文本换行word-wrap,线性渐变linear-gradient
  • 实现旋转transform:rotate(90deg),缩放scale(0.85,0.90),translate(0px,-30px)定位,倾斜skew(-9deg,0deg);
  • 增加了更多的CSS选择器、多背景、rgba()
  • 唯一引入的伪元素是::selection;
  • 实现媒体查询@media,多栏布局flex
  • 过渡transition,动画animation

8、CSS优化、提高性能的方法有哪些

  • 移除空的css规则(Remove empty rules)
  • 正确使用display的属性
  • 不滥用浮动、web字体
  • 不声明过多的font-size
  • 不在选择符中使用ID标识符
  • 遵守盒模型规则
  • 尽量减少页面重排、重绘
  • 抽象提取公共样式,减少代码量

9、盒子水平居中方式

  • 将margin-left和margin-right设置为auto,或者margin:0,auto;(父盒子必须有高度)

  • 先让盒子向左移动父盒子宽度的一半,再往回移动自身宽度的一半

  • 先把盒子转换成inline-block +,然后text-align:center,使盒子水平居中

  • 使用绝对定位

    div{
        position:absolute;
        width:100px;
        height:100px;
        left:50%;
        margin-left:-50px;
    }
    

10、盒子垂直居中方式

  • 使用margin计算盒子的上下边距,使其垂直居中
  • 将盒子转换成display:table-cell,再vertical-align:middle;使盒子垂直居中
  • 先让盒子向下移动父盒子高度的一半,再往回移动自身高度的一半

11、盒子垂直水平居中方式

  • 使用绝对定位 + left:50%,top: 50% + margin-left:(自身宽度的一半),margin-top:(自身高度的一半)
  • 使用绝对定位 + left:50% ,top: 50%+ translate(-50%,-50%)
  • 使用绝对定位 + left: 0,right: 0, top: 0, bottom: 0 + margin:auto
  • 使用弹性盒子布局,给父标签设置属性,display: flex; justify-content: center; (水平居中)align-items: center;(垂直居中)

12、opacity和rgba的区别

  • opacity

    • opacity是一个属性,有opacity属性的所有后代元素都会继承 opacity 属性
    .box{
         opacity:0.4; //取值从 0.0 (完全透明)到 1.0(完全不透明)
    }
    
  • rgba

    • rgba是一个属性值,语法为rgba(r,g,b,a);rgba只会作用于它本身,不会作用于子元素上
    .box{
         background: rgba(0,0,255,0.4); // 不限于背景颜色,可以是文字颜色,阴影等
    }
    
posted @ 2019-07-24 22:43  sweetLily819  阅读(453)  评论(0编辑  收藏  举报