前端面试题总结整理,css第二篇

1. 标准的盒子模型(W3C)?与低版本IE盒子模型有什么差异?

  • 区别是标准盒子的宽高就是纯粹的content内容的宽高,而在IE5,IE6(怪异的模式)的盒子宽高是content+padding值+border值
  • 之后W3C在CSS3中新增了个box-sizing的样式属性,其有两个值:
  1. 值一为border-box,元素设置的width就等于整个盒子的width(不会因为元素中了再设置了padding和border改变了)。
  2. 为content-box,元素设置的width+padding+border就等于盒子的width

2. style标签写在body后与body前有什么区别?

  • 要解决这个问题,在这里我们首先要了解下浏览器的渲染过程是怎样的?
  1. creat/update DOM and request css/image/js: 将HTML解析成树状结构DOM(创建/更新),同时对css/image/js发起请求。
  2. creat/update render CSSOM: CSS文件加载完成,开始构建CSSOM树状结构
  3. creat/update reder tree: 所有CSS文件下载完成,CSSOM和DOM一起渲染成render tree
  4. layout: 这棵大树所有结构渲染完后,要做什么呢,就是layout(布局),就是根据代码来布局每个节点在屏幕所处的位置!!
  5. painting: 顾名思义,painting画,就是通过显卡把内容画到屏幕上了。

总结:DOM渲染,同时发出JS/image/css请求→CSSOM渲染→DOM和CSSOM结合成整棵render tree→layout布局→painting画

  • 上面说了这么多,可以得出原因:当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。
  • 解决方法:使用LINK标签将样式表放在文档HEAD中。
加载顺序.jpg

3. 有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。

  • 子绝父相法,代码如下
<style>
        body { height: 100%; padding: 0; margin: 0; }
        .box { height: 400px; position: relative; }
        .div1 { height: 100px; background: #ff0000; }
        .div2 { background: #00ff00; width: 100%; position: absolute; top: 100px ; left: 0 ; bottom: 0;}//让top值等于第一个子div的height,而left,bottom,right为0,这样就可以自动填满剩下的空间了,达到高度自适应的目的
    </style>
</head>
<body>
     <div class="box">
         <div class="div1"></div>
         <div class="div2"></div>
     </div>
</body>
  • 弹性盒子解法,代码如下
<style>
        .box {
            width:200px;
            height:300px;
            background:red;
            display:flex;
            display: -webkit-flex;
            flex-direction:column;
            -webkit-flex-directioncolumn;
       }
         .a {height:100px;background:green;}
         .b {background:blue;flex:1}
    </style>
</head>
<body>
     <div class="box">
         <div class="a">

         </div>
         <div class="b">

         </div>
     </div>
</body>
  • box-sizing方法
<div class="wrap">
    <div class="div1"></div>
    <div class="div2"></div>
</div>
<style>
  .wrap{
        height: 400px; padding: 200px 0 0; box-sizing: border-box;
 }
.div1{
        height: 200px; margin: -200px 0 0; background-color: red;
}
.div2{
        height: 100%; background-color: blue;
}
</style>

4. 为什么li元素在设置display: inline-block后 相邻的li之间会出现空隙,怎么解决?

  • 原因:

百度的题目,经过实验,所有的block元素设置为dispaly: inline-block后都会出现这种情况的。造成这种现象的原因是 因为代码中这些元素之间的空白字符(即换行)被浏览器渲染成了一个空格,所以出现了空隙了。

  • 解决方法:
  1. 元素写在一行,不换行,缺点是这样不美观
  1. 为元素设置浮动,因为浮动的特性是让元素紧贴。缺点:有些容器是不能设置浮动,如左右切换的焦点图等
  2. 包裹这些元素的父元素,比如ul>li,ul设置font-size:0 .缺点:由于继承,导致ul其他字符尺寸也被设为0,需要额外重新设定其他字符尺寸,且在Safari浏览器依然会出现空白间隔。
  3. 包裹元素,如ul的字符间隔设置letter-spacing: -999px(这里试验了下,发现网上设置的-8px,-4px,最后还会存在一点空隙,所以直接设置-999了,请自己再做实验)。然后也是因为继承性,li要设置letter-spacing: normal
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,696评论 1 92
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    前端进阶之旅阅读 16,744评论 32 459
  • 常见试题 行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-h...
    他大舅啊阅读 7,272评论 1 5
  • 是谁驻足了繁花,却未等归期? 是谁迷惘了青春,却遗失了梦想? 是谁描绘了未来,却未曾风雨兼程? 有人贩卖别人的故事...
    击木长歌君阅读 2,720评论 0 0
  • 大二寒假曾去浙江打工(流水线),体验生活顺便赚点外快。 同宿舍的是分别做了一年和半年的老员工,自然要比我们这群菜鸟...
    东倾电影评论阅读 2,435评论 0 0

友情链接更多精彩内容