返回顶部
首页 > 资讯 > 精选 >好程序员分享Web前端知识之HTML
  • 114
分享到

好程序员分享Web前端知识之HTML

2023-06-03 11:06:14 114人浏览 安东尼
摘要

  今天好程序员分享web前端知识之html。WEB前端技术由HTML、CSS和javascript三大部分构成,而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。  1

  今天好程序员分享web前端知识之htmlWEB前端技术由HTML、CSSjavascript三大部分构成,而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。

  1、BOM

 

  BOM是BrowserObjectModel

 

  的缩写,即浏览器对象模型,当一个浏览器页面初始化时,会在内存创建一个全局的对象,用以描述当前窗口的属性和状态,这个全局对象被称为浏览器对象模型,即BOM。BOM的核心对象就是window,window

 

  对象也是BOM的顶级对象,其中包含了浏览器的6个核心模块:

 

  document-

 

  即文档对象,渲染引擎在解析HTML代码时,会为每一个元素生成对应的DOM对象,由于元素之间有层级关系,因此整个HTML代码解析完以后,会生成一个由不同节点组成的树形结构,俗称DOM树,document

 

  用于描述DOM树的状态和属性,并提供了很多操作DOM的api

 

  frames-HTML子框架,即在浏览器里嵌入另一个窗口,父框架和子框架拥有独立的作用域和上下文。

 

  history-以栈(FIFO)的形式保存着页面被访问的历史记录,页面前进即入栈,页面返回即出栈。

 

  location-提供了当前窗口中加载的文档相关信息以及一些导航功能。

 

  navigator-用来描述浏览器本身,包括浏览器的名称、版本、语言、系统平台、用户特性字符串等信息。

 

  screen-提供了浏览器显示屏幕的相关属性,比如显示屏幕的宽度和高度,可用宽度和高度。

 

  2、DOM系统

 

  DOM是DocumentObjectModel的缩写,即文档对象模型,是所有浏览器公共遵守的标准,DOM

 

  将HTML和XML文档映射成一个由不同节点组成的树型结构,俗称DOM树。其核心对象是document,用于描述DOM树的状态和属性,并提供对应的DOM操作API。随着历史的发展,DOM

 

  被划分为1级、2级、3级,共3个级别:

 

  1级DOM-在1998年10月份成为W3C的提议,由DOM核心与DOM

 

  HTML两个模块组成。DOM核心能映射以XML为基础的文档结构,允许获取和操作文档的任意部分。DOM

 

  HTML通过添加HTML专用的对象与函数对DOM核心进行了扩展。

 

  2级DOM-鉴于1级DOM仅以映射文档结构为目标,DOM

 

  2级面向更为宽广。通过对原有DOM的扩展,2级DOM通过对象接口增加了对鼠标和用户界面事件(DHTML长期支持鼠标与用户界面事件)、范围、遍历(重复执行DOM文档)和层叠样式表(CSS)的支持。同时也对DOM

 

  1的核心进行了扩展,从而可支持XML命名空间。

 

  3级DOM-

 

  通过引入统一方式载入和保存文档和文档验证方法对DOM进行进一步扩展,DOM3包含一个名为“DOM载入与保存”的新模块,DOM核心扩展后可支持XML1.0的所有内容,包括XML

 

  Infoset、XPath、和XMLBase。

 

  浏览器对不同级别DOM的支持情况如下所示:

 

  从图中可以看出,移动端常用的Webkit内核浏览器目前只支持DOM2,而不支持DOM3。

 

  3、事件系统

 

  事件是用户与页面交互的基础,到目前为止,DOM事件从PC端的鼠标事件(mouse)发展到了移动端的触摸事件(touch)和

 

  手势事件(guesture),touch事件描述了手指在屏幕操作的每一个细节,guesture则是描述多手指操作时更为复杂的情况,总结如下:

 

  第一根手指放下,触发touchstart,除此之外什么都不会发生

 

  手指滑动时,触发touchmove

 

  第二根手指放下,触发gesturestart

 

  触发第二根手指的touchstart

 

  立即触发gesturechange

 

  任意手指移动,持续触发gesturechange

 

  第二根手指弹起时,触发gestureend,以后将不会再触发gesturechange

 

  触发第二根手指的touchend

 

  触发touchstart(多根手指在屏幕上,提起一根,会刷新一次全局touch)____

 

  弹起第一根手指,触发touchend

 

  更多关于手势事件的介绍请参考:

 

  gesture事件处理复杂手势

 

  DOM2.0模型将事件处理流程分为三个阶段,即事件捕获阶段、事件处理阶段、事件冒泡阶段,如图所示:

 

  事件捕获:当用户触发点击事件后,顶层对象document就会发出一个事件流,从最外层的DOM节点向目标元素节点传递,最终到达目标元素。

 

  事件处理:当到达目标元素之后,执行目标元素绑定的处理函数。如果没有绑定监听函数,则不做任何处理。

 

  事件冒泡:事件流从目标元素开始,向最外层DOM节点传递,途中如果有节点绑定了事件处理函数,这些函数就会被执行。

 

  利用事件冒泡原理可以实现事件委托

 

  ,所谓事件委托,就是在父元素上添加事件监听器,用以监听和处理子元素的事件,避免重复为子元素绑定相同的事件。当目标元素的事件被触发以后,这个事件就从目标元素开始,向最外层元素传递,最终冒泡到父元素上,父元素再通过event.target

 

  获取到这个目标元素,这样做的好处是,父元素只需绑定一个事件监听,就可以对所有子元素的事件进行处理了,从而减少了不必要的事件绑定,对页面性能有一定的提升。

 

  4、HTML解析过程

 

  浏览器加载html文件以后,渲染引擎会从上往下,一步步来解析HTML标签,大致过程如下:

 

  用户输入网址,浏览器向服务器发出请求,服务器返回html文件;

 

  渲染引擎开始解析html标签,并将标签转化为DOM节点,生成DOM树;

 

  如果head标签中引用了外部css文件,则发出css文件请求,服务器返回该文件,该过程会阻塞后面的解析;

 

  如果引用了外部js文件,则发出js文件请求,服务器返回后立即执行该脚本,这个过程也会阻塞html的解析;

 

  引擎开始解析body里面的内容,如果标签里引用了css样式,就需要解析刚才下载好的css文件,然后用css来设置标签的样式属性,并生成渲染树;

 

  如果body中的img标签引用了图片资源,则立即向服务器发出请求,此时引擎不会等待图片下载完毕,而是继续解析后面的标签;

 

  服务器返回图片文件,由于图片需要占用一定的空间,会影响到后面元素的排版,因此引擎需要重新渲染这部分内容;

 

  如果此时js脚本中运行了style.display="none",布局被改变,引擎也需要重新渲染这部分代码;

 

  直到html结束标签为止,页面解析完毕。

 

  5、重绘和回流

 

  当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。比如上面的img文件加载完成后就会引起回流,每个页面至少需要一次回流,就是在页面第一次加载的时候。

 

  当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

 

  从上面可以看出,回流必将引起重绘,而重绘不一定会引起回流。会引起重绘和回流的操作如下:

 

  添加、删除元素(回流+重绘)

 

  隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流)

 

  移动元素,比如改变top,left的值,或者移动元素到另外一个父元素中。(重绘+回流)

 

  对style的操作(对不同的属性操作,影响不一样)

 

  还有一种是用户的操作,比如改变浏览器大小,改变浏览器的字体大小等(回流+重绘)

 

  另外,transfORM

 

  操作不会引起重绘和回流,是一种高效率的渲染。这是因为transform属于合成属性,对合成属性进行transition/animation

 

  动画时将会创建一个合成层,这使得动画元素在一个独立的层中进行渲染,当元素的内容没有发生改变,就没必要进行重绘,浏览器会通过重新复合来创建动画帧。

 

  6、本地存储

 

  本地存储最原始的方式就是cookie,cookie是存放在本地浏览器的一段文本,数据以键值对的形式保存,可以设置过期时间。但是cookie

 

  不适合大量数据的存储,因为每请求一次页面,cookie都会发送给服务器,这使得cookie

 

  速度很慢而且效率也不高。因此cookie的大小被限制为4k左右(不同浏览器可能不同,分HOST),如下所示:

 

  Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

 

  Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

 

  InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

 

  在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

 

  HTML5提供了两种在客户端存储数据的新方法:localStorage和sessionStorage,它们都是以key/value

 

  的形式来存储数据,前者是永久存储,后者的存储期限仅限于浏览器会话(session),即当浏览器窗口关闭后,sessionStorage中的数据被清除。

 

  localStorage的存储空间大约5M左右(不同浏览器可能不同,分

 

  HOST),这个相当于一个5M大小的前端数据库,相比于cookie,可以节约带宽,但localStorage在浏览器隐私模式下是不可读取的,当存储数据超过了localStorage

 

  的存储空间后会抛出异常。

 

  此外,H5还提供了逆天的Websql

 

  indexedDB,允许前端以关系型数据库的方式来存储本地数据,相对来说,这个功能目前应用的场景比较少,此处不作介绍。

 

  7、浏览器缓存机制

 

  浏览器缓存机制是指通过Http协议头里的Cache-Control(或Expires)和Last-Modified(或Etag)

 

  等字段来控制文件缓存的机制。

 

  Cache-Control用于控制文件在本地缓存有效时长。最常见的,比如服务器回包:Cache-Control:max-age=600

 

  表示文件在本地应该缓存,且有效时长是600秒(从发出请求算起)。在接下来600秒内,如果有请求这个资源,浏览器不会发出HTTP

 

  请求,而是直接使用本地缓存的文件。

 

  Last-Modified是标识文件在服务器上的最新更新时间。下次请求时,如果文件缓存过期,浏览器通过If-Modified-Since

 

  字段带上这个时间,发送给服务器,由服务器比较时间戳来判断文件是否有修改。如果没有修改,服务器返回304告诉浏览器继续使用缓存;如果有修改,则返回200,同时返回最新的文件。

 

  Cache-Control通常与Last-Modified一起使用。一个用于控制缓存有效时间,一个在缓存失效后,向服务查询是否有更新。

 

  Cache-Control还有一个同功能的字段:Expires。Expires的值一个绝对的时间点,如:Expires:Thu,10Nov

 

  201508:45:11GMT,表示在这个时间点之前,缓存都是有效的。

 

  Expires是HTTP1.0标准中的字段,Cache-Control是HTTP1.1

 

  标准中新加的字段,功能一样,都是控制缓存的有效时间。当这两个字段同时出现时,Cache-Control是高优化级的。

 

  Etag也是和Last-Modified一样,对文件进行标识的字段。不同的是,Etag

 

  的取值是一个对文件进行标识的特征字串。在向服务器查询文件是否有更新时,浏览器通过If-None-Match

 

  字段把特征字串发送给服务器,由服务器和文件最新特征字串进行匹配,来判断文件是否有更新。没有更新回包304,有更新回包200。Etag和

 

  Last-Modified可根据需求使用一个或两个同时使用。两个同时使用时,只要满足基中一个条件,就认为文件没有更新。

 

  另外有两种特殊的情况:

 

  手动刷新页面(F5),浏览器会直接认为缓存已经过期(可能缓存还没有过期),在请求中加上字段:Cache-Control:max-age=0,发包向服务器查询是否有文件是否有更新。

 

  强制刷新页面(Ctrl+F5),浏览器会直接忽略本地的缓存(有缓存也会认为本地没有缓存),在请求中加上字段:Cache-Control:no-cache

 

  (或Pragma:no-cache),发包向服务重新拉取文件。

 

  8、History

 

  用户访问网页的历史记录通常会被保存在一个类似于栈的对象中,即history对象,点击返回就出栈,跳下一页就入栈。它提供了以下方法来操作页面的前进和后退:

 

  window.history.back()返回到上一个页面

 

  window.history.forward()进入到下一个页面

 

  window.history.Go([delta])跳转到指定页面

 

  HTML5对HistoryApi进行了增强,新增了两个Api和一个事件,分别是pushState、replaceState和

 

  onpopstate:

 

  pushState是往history对象里添加一个新的历史记录,即压栈。

 

  replaceState是替换history对象中的当前历史记录。

 

  当点击浏览器后退按钮或js调用history.back都会触发onpopstate事件。

 

  与其类似的还有一个事件:onhashchange,onhashchange是老API,浏览器支持度高,本来是用来监听hash变化的,但可以被利用来做客户端前进和后退事件的监听,而onpopstate是专门用来监听浏览器前进后退的,不仅可以支持hash,非hash的同源

 

  url也支持。

 

  9、HTML5离线缓存

 

  HTML5离线缓存又叫Application

 

  Cache,是从浏览器的缓存中分出来的一块缓存区,如果要在这个缓存中保存数据,可以使用一个描述文件(manifestfile),列出要下载和缓存的资源。

 

  manifest文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。manifest文件可分为三个部分:

 

  -CACHEMANIFEST-在此标题下列出的文件将在首次下载后进行缓存

 

  -NETWORK-在此标题下列出的文件需要与服务器的连接,且不会被缓存

 

  -FALLBACK-在此标题下列出的文件规定当页面无法访问时的回退页面(比如404页面)

 

  离线缓存为应用带来三个优势:

 

  离线浏览-用户可在应用离线时使用它们

 

  速度-已缓存资源加载得更快

 

  减少服务器负载-浏览器将只从服务器下载更新过或更改过的资源。

 

  10、Web语义化和SEO

 

  Web语义化是指使用语义恰当的标签,使页面有良好的结构,页面元素有含义,能够让人和搜索引擎都容易理解。

 

  SEO是指在了解搜索引擎自然排名机制的基础之上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中关键词的自然排名,获得更多的展现量,吸引更多目标客户点击访问网站,从而达到互联网营销及品牌建设的目标。

 

  搜索引擎通过爬虫技术获取的页面就是由一堆html标签组成的代码,人可以通过可视化的方式来判断页面上哪些内容是重点,而机器做不到。

 

  但搜索引擎会根据标签的含义来判断内容的权重,因此,在合适的位置使用恰当的标签,使整个页面的语义明确,结构清晰,搜索引擎才能正确识别页面中的重要内容,并予以较高的权值。比如h2~h7这几个标签在SEO中的权值非常高,用它们作页面的标题就是一个简单的SEO优化。

--结束END--

本文标题: 好程序员分享Web前端知识之HTML

本文链接: https://lsjlt.com/news/234151.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 好程序员分享Web前端知识之HTML
      今天好程序员分享Web前端知识之HTML。Web前端技术由HTML、CSS和Javascript三大部分构成,而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。  1...
    99+
    2023-06-03
  • 好程序员web前端分享CSS基础知识之position
     好程序员web前端分享CSS基础知识之position    CSS定位机制   标准文档流(Normal flow)   浮动定位(Floats)   绝对定位(Absolute position...
    99+
    2023-06-03
  • 好程序员web前端分享HTML表单和输入
     好程序员web前端分享HTML表单用于搜集不同类型的用户输入。   表单   表单是一个包含表单元素的区域。   表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素。&nb...
    99+
    2023-06-03
  • 好程序员web前端分享WebSocket协议
         好程序员web前端分享WebSocket协议,WebSocket协议简介WebSocket协议简介WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebS...
    99+
    2023-06-03
  • 好程序员web前端分享web测试之Js中的变量
      好程序员web前端分享web测试之Js中的变量,JavaScript的变量与其他语言的变量有很大区别。JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要...
    99+
    2023-06-03
  • 好程序员web前端分享HTML元素强制不换行
    好程序员web前端分享HTML元素强制不换行,HTML 中 nowrap是用来强制不换行的   在排版中   对包裹plain text的标签使用nowrap属性即刻实现强制不换行.   如:   强...
    99+
    2023-06-03
  • 好程序员web前端分享高度自适应
    好程序员web前端分享高度自适应一、宽高自适应网页布局中经常要定义元素的宽和高。但很多时候我们希望元素的大小能够根据窗口或子元素自动调整,这就是自适应。它能够使网页显示更灵活,可以适应在不同设备、不同窗口和不同分辨率下显示。(1)宽度自适应...
    99+
    2023-06-03
  • 好程序员web前端培训分享学习JavaScript
    好程序员web前端教程分享学习JavaScript,我试着总结自己学习JavaScript的方法 JavaScript给人那种感觉的原因多半是因为它如下的特点: 本身知识很抽象、晦涩难懂,如:闭包、内置对象、DOM。本身...
    99+
    2023-06-03
  • 好程序员web前端培训分享怎样学好css?
      好程序员web前端培训分享怎样学好css?我推荐题主的学习方法就是:善用调试工具。  使用谷歌浏览器进行调试,在属性不理解时可以直接在浏览器里进行数值调节  css在书写时由于选择器权重问题经常出现样式覆盖的问题  如果你的选择器书写正...
    99+
    2023-06-03
  • 好程序员web前端培训分享HTMLCSS学习之CSS基础
      好程序员web前端培训分享HTMLCSS学习之CSS基础,CSS(cascading style sheet) 汉译为层叠样式表,是用于控制网页样式WEB标准中的表现标准语言,在网页中主要对网页信息的显示进行控制。目前推荐遵循的是W3C...
    99+
    2023-06-03
  • 好程序员web前端培训分享JavaScript学习笔记之ES5
      好程序员web前端培训分享JavaScript学习笔记之ES5,我们所说的 ES5 和 ES6 其实就是在 js 语法的发展过程中的一个版本而已  比如我们使用的微信  最早的版本是没有支付功能的  随着时间的流逝,后来出现了一个版本,...
    99+
    2023-06-03
  • 好程序员web前端分享HTML基本结构和基本语法
    好程序员web前端分享HTML基本结构和基本语法HTML基本结构HTML的基本语法<常规标记><标记 属性=“属性值” 属性=“属性值”></标记>标记也可叫标签或叫元素例如:<head>&l...
    99+
    2023-06-03
  • 好程序员web前端技术分享css盒模型
    web前端技术分享css盒模型学习目标1、认识盒子模型2、盒子模型的组成部分3、学习盒子模型的相关元素 margin padding一、css盒模型的概念及组成概念:盒模型是css布局的基石,它规定了网页元素如何显示以及元素间相互关系。cs...
    99+
    2023-06-03
  • 分享Web前端的相关知识
    这篇文章主要介绍“分享Web前端的相关知识”,在日常操作中,相信很多人在分享Web前端的相关知识问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分享Web前端的相关知识”的疑惑...
    99+
    2024-04-02
  • 好程序员web前端系列之CSS3-3D
    好程序员web前端系列之CSS3-3D,什么是3d的场景呢? 2d场景,在屏幕上水平和垂直的交叉线x轴和y轴3d场景,在垂直于屏幕的方法,相对于3d多出个z轴 Z轴:靠近屏幕的方向是正向,远离屏幕的方向是反向 CSS3中...
    99+
    2023-06-03
  • 好程序员Web前端培训入门之JS基础知识梳理汇总
      好程序员Web前端入门之JS基础知识梳理汇总,Web前端工程师是当前各大企业都比较稀缺的人才,薪资待遇和就业前景都很不错。不论是专业还是非专业,有基础亦或是无基础,都想通过学习Web前端实现高薪就业。不过,学习要一步一个脚印,不能一口吃...
    99+
    2023-06-03
  • 好程序员web前端开发测验之css部分
      好程序员web前端开发测验之css部分Front End Web Development Quiz CSS 部分问题与解答  Q: CSS 属性是否区分大小写 <p><font size="3&qu...
    99+
    2023-06-03
  • 好程序员web前端教程分享JavaScript学习笔记之Event事件二
      好程序员web前端教程分享JavaScript学习笔记之Event事件二,今天来聊一聊事件的执行机制。  什么是事件的执行机制呢?  思考一个问题?  当一个大盒子嵌套一个小盒子的时候,并且两个盒子都有点击事件你点击里面的小盒子,外面的...
    99+
    2023-06-03
  • 好程序员web前端分享CSS学习:HSLA颜色模式
    好程序员web前端分享CSS学习:HSLA颜色模式一、理论:1.HSLA颜色模式a.HSLA在HSL基础上增加了不透明度,值越大透明度越低b.HSLA颜色模式的浏览器兼容性和HSL一样,只有较新版本的主流浏览器才支持2.RGBA和HSLA颜...
    99+
    2023-06-03
  • 好程序员web前端培训分享JavaScript学习笔记SASS
      好程序员web前端培训分享JavaScript学习笔记SASS,世界上最成熟、最稳定、最强大的专业级CSS扩展语言!· sass 是一个 css 的预编译工具· 也就是能够 更优雅 的书...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作