WEB前端面试题汇总(CSS)

position的值, relative和absolute分别是相对于谁进行定位的?

<1>、relative:相对定位,相对于自己本身在正常文档流中的位置进行定位。
<2>、absolute:生成绝对定位,相对于最近一级定位不为static的父元素进行定位。
<3>、fixed: 生成绝对定位,相对于浏览器窗口或者frame进行定位。
<4>、static:默认值,没有定位,元素出现在正常的文档流中。
<5>、sticky:生成粘性定位的元素,容器的位置根据正常文档流计算得出。


position:absolute和float属性的异同?

共同点:对内联元素设置float和absolute属性,可以让元素脱离文档流,并且可以设置其宽高。
不同点:float仍可占据位置,不会覆盖在另一个BFC区域上,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。absolute会覆盖文档流中的其他元素。


box-sizing属性有哪些?

box-sizing属性主要用来控制元素的盒模型的解析模式。默认值是content-box;
<1>、content-box:让元素维持W3C的标准盒模型。元素的宽度/高度由border+padding+content的宽度/高度决定,设置width/height属性指的是content部分的宽/高。
<2>、border-box:让元素维持IE传统盒模型(IE6以下版本和IE6~7的怪异模式)。设置width/height属性指的是border+padding+content的宽度/高度。
<3>、padding-box:设置width/height属性指的是padding+content的宽度/高度。

标准浏览器下,按照W3C规范对盒模型解析,一旦修改了元素的边框或边距,就会影响元素的盒子尺寸,就不得不重新计算元素的盒子尺寸,从而影响整个页面的布局。


CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?

选择符
<1>、id选择器(#myId);
<2>、类选择器(.myClassName);
<3>、标签选择器(div,p,h1);
<4>、相邻选择器(h1 + p);
<5>、子选择器(ul > li);
<6>、后代选择器(li a);
<7>、通配符选择器(*);
<8>、属性选择器(button[disabled="true"]);
<9>、伪类选择器(a:hover,li:nth-child);表示一种状态
<10>、伪元素选择器(li:before、:after,:first-letter,:first-line,:selecton);表示文档某个部分的表现

优先级
!important > 行内样式(比重1000) > id(比重100) > class/属性(比重10) > tag / 伪类(比重1);

伪类和伪元素区别
1>、伪类:a:hover,li:nth-child;
2>、伪元素:li:before、:after,:first-letter,:first-line,:selecton;

伪元素和伪类都是选择器的补充,伪类表示的是一种状态,伪元素表示文档的某个确定部分的表现。
伪元素选择器选择出来的部分不再dom里,也不能对其绑定事件,但是如果对伪元素前面的选择器定义的元素绑定了事件,伪元素同样会生效。

新增伪类
1>、li:first-of-type:选择属于其父元素的首个

  • 元素;
    2>、li:last-of-type:选择属于其父元素的最后一个
  • 元素;
    3>、li:only-of-type:选择属于其父元素的唯一一个
  • 元素;
    4>、li:only-child:选择属于其父元素的唯一子元素;
    6>、li:nth-child(2):选择属于其父元素的第二个
  • 元素;
    7>、:enabled :disabled:选择表单控件的禁用状态;
    8>、:checked:单选或复选框被选中状态;


    对BFC规范的理解?

    BFC定义:块级格式化上下文,一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个BFC中的两个相邻的块级盒在垂直方向的margin会发生折叠。

    BFC布局规则
    1>、内部的box会在垂直方向,一个接一个的放置。
    2>、box的垂直方向的距离有margin决定。属于同一个BFC的两个相邻box的margin会发生重叠。
    3>、每个元素的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反),即使存在浮动也是如此,除非这个盒子创建一个新的块级格式化上下文。
    4>、BFC的区域不会与float box重叠。
    5>、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也是如此。
    6>、计算BFC的高度时,浮动元素也参与计算。

    哪些元素会产生BFC
    1>、根元素;
    2>、float属性不为none;
    3>、position为absolute或fixed;
    4>、display为inline-block,table-cell,table-caption,flex,inline-flex;
    5>、overflow除了visible以外的值(hidden、auto、scroll);
    6>、fieldset元素

    运用BFC:
    1>、解决margin重叠问题:根据BFC布局原则2,在元素外侧包裹一层容器,并触发该容器生成一个BFC,那么两个元素就不在同一个BFC,就不会发生margin重叠。

    
    
        

    Haha

    Hehe

    WEB前端面试题汇总(CSS)_第1张图片

    2>、自适应两栏布局

    
    
        

    WEB前端面试题汇总(CSS)_第2张图片

    根据BFC布局规则第3条:即使存在浮动的元素aslide,但main的左边依然会与包含块的左边相接触。
    解决:根据BFC布局规则第4条,我们可以通过通过触发main生成BFC, 来实现自适应两栏布局。

    .main {
        overflow: hidden;
    }

    当触发main生成BFC后,这个新的BFC不会与浮动的aside重叠。因此会根据包含块的宽度,和aside的宽度,自动变窄。效果如下:
    WEB前端面试题汇总(CSS)_第3张图片

    3>、清除内部浮动

    
    
        

    WEB前端面试题汇总(CSS)_第4张图片

    根据BFC布局规则第6条:计算BFC的高度时,浮动元素也参与计算,为达到清除内部浮动,我们可以触发par生成BFC,那么par在计算高度时,par内部的浮动元素child也会参与计算。

    .par {
        overflow: hidden;
    }

    WEB前端面试题汇总(CSS)_第5张图片


    解释下浮动和它的工作原理?清除浮动的技巧:

    原理:任何元素都可以被浮动,浮动元素脱离文档流,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
    浮动引起的问题
    1>、父元素的高度无法被撑开,影响与父元素同级的元素;
    2>、与浮动元素同级的非浮动元素(内联元素)会跟随其后;
    3>、若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构;

    清除浮动
    1>、使用空标签清除浮动
    这种方法是在所有浮动标签后面添加一个空标签

    . 弊端就是增加了无意义标签。
    2>、使用after伪类

    #parent:after{
        content:".";
        height:0;
        visibility:hidden;
        display:block;
        clear:both;
    }

    3>、浮动外部元素;
    4>、设置父元素overflow为hidden或者auto,触发父元素BFC;


    常见兼容性问题

    1>、png24位的图片在ie6浏览器上出现背景,解决方案是做成png8,也可以引用一段脚本处理。
    2>、浏览器默认的margin和padding不同。解决方案:加一个全局的*{margin:0;padding:0}。
    3>、ie6双边距bug(20px距离):块属性标签float后,又有横行的margin情况下,在ie6显示margin值比设置的大。解决方案:在float标签样式控制中加入_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)。
    4>、渐进识别方式,从总体中逐步排除局部:
    首先,巧妙的使用“9”这一标记,将IE浏览器从所有情况中分离出来。
    接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

      .bb{
           background-color:#f1ee18;/*所有识别*/
          .background-color:#00deff\9; /*IE6、7、8识别*/
          +background-color:#a200ff;/*IE6、7识别*/
          _background-color:#1e0bd1;/*IE6识别*/
      }

    待续....2015.5.29

  • 你可能感兴趣的:(WEB前端面试题汇总(CSS))