前端常见面试题(十二)@郝晨光


link和@import的区别

始终建议使用link,慎用@import

从属关系

  1. linklink是HTML提供的标签,不仅可以加载CSS,还可以定义rel等属性
  2. @import@import是css提供的语法,只有导入样式表的作用

加载顺序

  1. linklink在页面加载时CSS同时被加载
  2. @import:引入的CSS要等页面加载完毕后再加载

兼容性问题

  1. link是HTML提供的语法,不存在兼容性问题
  2. @import是css2.1提供的语法,ie5以上才兼容

DOM可控性

  1. js控制DOM时,可以通过插入link标签来改变样式,不能通过@import改变

权重问题

  1. link标签引入的样式权重大于@import标签



HTML5为什么只需要写<!DOCTYPE HTML>?

  1. DTD的是W3C所发布的一个文档类型定义,简单的说,就是告诉浏览器你的这个HTML,是根据那个标准写的,解析的时候用哪个标准解析。

  2. HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);

  3. 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

拓展:

SGML是标准通用标记语言

HTML是超文本标记语言,主要是用于规定怎么显示网页

XML是可扩展标记语言是未来网页语言的发展方向,可能会替代HTML,他和HTML都是由SGML延伸转变而来的,你可以理解SGML是最早的版本,但现在已经淘汰不用了

XML和HTML的最大区别就在于 XML的标签是可以自己创建的,数量无限多,而HTML的标签都是固定的而且数量有限。

还有一个是XHTML也是现在基本上所有网页都在用的标记语言,他其实和HTML没什么本质的区别标签都一样,用法也都一样,就是比HTML更严格,比如标签必须都用小写,标签都必须有闭合标签等。



Doctype作用,标准模式和兼容模式有什么区别

<!DOCTYPE html>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。<!DOCTYPE html>不存在或格式不正确会导致文档以兼容模式呈现。

标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。
在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

具体区别

  1. 盒模型
    在严格模式中 :width 是内容宽度 ,元素真正的宽度 = width;
    在兼容模式中 :width 则是 = width+padding+border

  2. 兼容模式下可设置百分比的高度和行内元素的高宽
    在标准模式下,给 span 等行内元素设置 wdithheight 都不会生效,而在兼容模式下,则会生效。
    在标准模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置高度,子元素设置一个百分比的高度是无效的。

  3. margin:0 auto设置水平居中在IE下会失效
    使用margin:0 auto在标准模式下可以使元素水平居中,但在兼容模式下却会失效(用text-align属性解决)
    body{text-align:center};#content{text-align:left}

  4. 兼容模式下Table中的字体属性不能继承上层的设置,white-space:pre会失效,设置图片的padding会失效



请写出html5新增的API

  1. document.querySelector()document.querySelectorAll()方法

    • document.querySelector():根据css选择器返回第一个匹配的元素,如果没有匹配返回null;
    • document.querySelectorAll("selector")querySelectorAll返回的是元素数组,querySelector返回的是一个元素。如果querySelectorAll没有匹配的内容返回的是一个空数组。
  2. classList 属性

    • add(value):将给定的字符串值添加到列表中。如果值已经存在,就不添加了。
    • contains(value):表示列表中是否存在给定的值,如果存在则返回true,否则返回false。
    • remove(value):从列表中删除给定的字符串。
    • toggle(value):如果列表中已经存在给定的值,删除它;如果列表中没有给定的值,添加它。
  3. 自定义数据属性(data-属性)

    • HTML5 规定可以为元素添加非标准的属性,但要添加前缀data-,目的是为元素提供与渲染无关的信息,或者提供语义信息。这些属性可以任意添加、随便命名,只要以data-开头即可。
    • 可以通过 元素.dataset.属性来获取。
    •   <div id="myDiv" data-id="12345" data-name="myDiv"></div>
        <script>
          // 本例中使用的方法仅用于演示
          var div = document.getElementById("myDiv");
          // 取得自定义属性的值
          let divId = div.dataset.id; // 12345
          let myName = div.dataset.name; // myDiv
          // 设置值
          div.dataset.id = 23456; // 23456
          div.dataset.name = "hello world!"; // hello world!
        </script>
      
  4. outerHTML属性

    • 在读模式下,outerHTML 返回调用它的元素及所有子节点的HTML 标签。
    • 在写模式下,outerHTML会根据指定的HTML 字符串创建新的DOM 子树,然后用这个DOM子树完全替换调用元素。
    •  <ul id="list">
           <li>Item 1</li>
           <li>Item 2</li>
           <li>Item 3</li>
       </ul>
       <script>
         let list = document.querySelector('#list');
         const oldHTML = list.outerHTML;  // 返回 ul + li *3+内容
         list.outerHTML = '<div><p>替换内容</p></div>'; // 将list整个替换成为当前的内容标签
       </script>
      
  5. insertAdjacentHTML()方法

    • 新增的插入标签元素的方法,它接收两个参数:插入位置和要插入的HTML 文本。
    • let div = document.querySelector('div');
      //作为前一个同辈元素插入
      div.insertAdjacentHTML("beforebegin", "<p>Hello world!</p>");
      //作为第一个子元素插入
      div.insertAdjacentHTML("afterbegin", "<p>Hello world!</p>");
      //作为最后一个子元素插入
      div.insertAdjacentHTML("beforeend", "<p>Hello world!</p>");
      //作为后一个同辈元素插入
      div.insertAdjacentHTML("afterend", "<p>Hello world!</p>");
      
  6. webStorage浏览器存储

  7. canvas 画布

  8. fetch 与后台通信的新API,类似于ajax

  9. history 历史记录API。通过history可以实现前端路由

  10. webscoket 前后端双向通信

  11. geolocation 地理定位API

  12. exitFullscreen 全屏API

  13. video/audio 视频/音频API

  14. draggable 拖拽API

  15. visibilitychange 页面可见性API



CSS优先级算法如何计算?

CSS优先级分为两个部分,一部分是引入优先级,第二部分是声明样式的优先级。

引入样式优先级

引入样式优先级一般是在外部样式、内部样式、内联样式之间应用同一个样式的情况是使用, 优先级如下:

外部样式 | 内部样式 < 内联样式

外部样式和内部样式,最后出现的优先级最高,例如:

<!-- 内联样式 -->
<span style="color:red;">Hello</span>

<style type="text/css">
     /* 内部样式 */
     h3{color:green;}
 </style>

<!-- 外部样式 style.css -->
<link rel="stylesheet" type="text/css" href="style.css"/>

因此,对于一些重置的样式集,比如normalize.css/reset.css必须写在所有样式的前面。

声明样式优先级

  1. 大致优先级
    !important > 内联 > ID选择器 > [class|属性|伪类]选择器 > 元素选择器 > 通配符选择器 > 继承
    :link、:visited、:hover、:active按照LVHA(LoVe HAte)顺序定义
  2. 优先级算法
    • !important 权重值:1,0,0,0;
    • ID选择器 权重值:0,1,0,0;
    • class选择器/属性选择器/伪类选择器 权重值:0,0,1,0;
    • 元素选择器 权重值:0,0,0,1;
    • 通配符选择器 权重值:0,0,0,0;
    • 每个等级的初始值为0,
    • 每个等级的叠加为选择器出现的次数相加
    • 不可进位,比如0,99,99,99
    • 依次表示为:0,0,0,0
    • 每个等级计数之间没关联
    • 等级判断从左向右,如果某一位数值相同,则判断下一位数值
    • 如果两个优先级相同,则最后出现的优先级高,!important也适用
    • 通配符选择器的特殊性值为:0,0,0,0
    • 继承样式优先级最低,通配符样式优先级高于继承样式
  1. 计算示例:
    • a{color: yellow;} /*特殊性值:0,0,0,1*/
    • div a{color: green;} /*特殊性值:0,0,0,2*/
    • .demo a{color: black;} /*特殊性值:0,0,1,1*/
    • .demo input[type="text"]{color: blue;} /*特殊性值:0,0,2,1*/
    • .demo *[type="text"]{color: grey;} /*特殊性值:0,0,2,0*/
    • #demo a{color: orange;} /*特殊性值:0,1,0,1*/
    • div#demo a{color: red;} /*特殊性值:0,1,0,2*/
CSS优先级算法

css优先级算法参考自:CSS优先级计算及应用 - 烈风裘



如果本文对您有帮助,可以看看本人的其他文章:
前端常见面试题(十一)@郝晨光
前端常见面试题(十)@郝晨光
前端常见面试题(九)@郝晨光

结言
感谢您的查阅,本文由郝晨光整理并总结,代码冗余或者有错误的地方望不吝赐教;菜鸟一枚,请多关照
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • •前端面试题汇总 一、HTML和CSS 21 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? ...
    Simon_s阅读 2,219评论 0 8
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,108评论 2 19
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,570评论 0 7
  • 第一部分HTML&CSS整理答案1.什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HTML5...
    Programmer客栈阅读 1,994评论 0 12