html篇的重新学习领悟

230 阅读5分钟

应届生找工作这么难的么?投简历三四天了,就接到过一份面试,现在还沉浸在那次难忘的经历中,无奈继续完善知识体系(为面试作准备,下家就是我的了!)

面试中难免会手写代码么,就在上次也就是那个唯一面试,我成功的写差了大多数单词,反思下来就是平时智能提醒的错,实在是太方便了(我用的vscode),从html标签开撸,收获不小。之前根本没有思考过各个标签的意义,只写页面要有的就好了,今天自己写了才会问为什么


一、<!DOCTYPE html>是啥?为啥要写?我不写也可以啊?

DOCTYPE是document type (文档类型) 的缩写。它交代的是我这个html是采用的什么规范,任何浏览器都要使用这个规范,不得自己瞎改(早期各个浏览器的实现标准不同,这是w3c出得标准),不写就把如何渲染html页面的权利交给了浏览器,这不是自讨苦吃么。

二、meta标签

meta标签的作用:meta里的数据是供机器解读的,告诉机器该如何解析这个页面,还有一个用途是可以添加服务器发送到浏览器的http头部内容。

  • charset="utf-8"

<meta charset="UTF-8"> <!--告诉机器我用的是utf-8编码(一般都是utf-8)避免HTML中文乱码的,确保HTML文件实际编码方式和charset设定的编码方式一致。-->

  • name="viewport"

<meta name="viewport" content="width=device-width, initial-scale=1.0"><!--这是移动端自适应的写法,content是必须属性,其中width设置为device-width一般也是必须的;initial-scale=1.0代表原始缩放比例是1,这是因为设计稿有时是2x的有时是1x的视情况而定-->

(下图是美团的移动端设置,可以看出设计稿是2x的,就是设计师根据实际的二倍标记的尺寸,做的时候不能一个个除啊,设置缩放0.5就是正常尺寸了);maximum-scale和minimum-scale代表最大最小缩放比例;最后的user-scalable=no代表用户不能进行缩放

  • name="keywords"||name="description"

<meta name="keywords" content="网站的关键字">,<meta name="description" content="网站的描述">这两个主要是针对seo优化的,有关seo也是门学问我不太懂,就知道他可以帮助建站者省推广费广告费

  • http-equiv="X-UA-Compatible"

<mate http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">http-equiv顾名思义是有关于http的,它的作用就是设置http相关头部,属性有好多,但看了各大网站几乎都有这一句,这一句就是在告诉浏览器渲染解析使用的内核,默认使用chrome的

做东西时,经常会有input type="hidden"的,meta可以不用这么做,name指定键名,content指定要提交的值就可实现一样的功能


三、link标签
css样式表使用有三种么,一种是行内html标签的style属性,一种是head标签内的style标签,还有一种就是link标签外部引用了,使用link可以使html是html,css是css,对于后期维护等等都是很好的选择 <link rel="stylesheet" type="text/css" href="theme.css">

  • 一道经典的面试题 link和@import有何区别?上次我是遇到了,今天做个总结
  1. 祖宗不同,link祖先是html,@import祖先是css
  2. 加载页面时,link标签引入的 CSS 被同时加载@import引入的 CSS 将在页面加载完毕后被加载。
  3. 兼容性方面,link不存在兼容问题,@import存在兼容问题(因为它是后提出来的,只可在 IE5+ 才能识别)
  4. link可以通过js控制,而@import就不能了

综上所诉还是使用link吧


四、script标签

  • 在我初学时还没有接触到框架时,一直将script放在</body>前面,因为那时候不懂得原理,这么做不会有任何毛病,但随着学习的深度,慢慢理解了为什么放在了后面,因为html解析是从上而下执行的,众所周知js可以操作文档dom,如果放在前面,页面dom树还没有构建完成,这时操作dom是不是有些心急啊,为避免不必要的麻烦,所以所有人在新学习js时都会告诉你放在body结束的前面,因为这个时候所有的dom已经构建完毕
  • 但是嘞,打开各大站点会发现那些在头部的js还是不老少,js是会阻塞dom树的建立,为什么还要放在前面呢?而且他们不怕操作未完成dom构建的文档出错么?是因为head 部分中的脚本:是需调用才执行的脚本或事件触发执行的脚本放在HTML的head部分中。当你把脚本放在head部分中时,可以保证脚本在任何调用之前被加载,例如各种库,jq什么的,本来放body结束前也可以,可是想想,如果加载jq时间太长,那不是页面加载好了半天不动,还不如先加载阻塞就阻塞吧,这样页面dom完事直接就动了还是不错的
  • 有关于script标签还有两个属性需要说一说,defer和async

这两个属性使得script都不会阻塞DOM的渲染。(不加是会阻塞dom渲染的),它俩很类似但还是有区别的,区别是在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行(脚本会被延迟到整个页面都解析完毕后再运行);async 的脚本并不保证按照指定它们的先后顺序执行,谁先加载完谁先执行(详见下图),要是闲的慌两个一起用是async效果

总结

  1. <!DOCTYPE>标签啥用处?
  2. <meta>标签的重新认知
  3. <link>标签和@import的区别?
  4. <script>标签的位置原因,以及两个属性(async和defer)区别