美文网首页
cookies,sessionStorage 和 localSt

cookies,sessionStorage 和 localSt

作者: 钢蹦儿_bf62 | 来源:发表于2018-12-07 13:29 被阅读0次

    1.cookies,sessionStorage 和 localStorage 的区别

    - cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会

    - sessionStorage和localStorage的存储空间更大;

    - sessionStorage和localStorage有更多丰富易用的接口;

    - sessionStorage和localStorage各自独立的存储空间;

    - 关闭窗口后,sessionStorage即被销毁

    2.实现浏览器内多个标签页之间的通信

    - 调用localstorge、cookies等本地存储方式

    3.CSS隐藏元素的几种方法

    - Opacity:元素本身依然占据它自己的位置并对网页的布局起作用。它也将响应用户交互;

    - Visibility:与 opacity 唯一不同的是它不会响应任何用户交互。此外,元素在读屏软件中也会被隐藏;

    - Display:display 设为 none 任何对该元素直接打用户交互操作都不可能生效。此外,读屏软件也不会读到元素的内容。这种方式产生的效果就像元素完全不存在;

    - Position:不会影响布局,能让元素保持可以操作;

    - Clip-path:clip-path 属性还没有在 IE 或者 Edge 下被完全支持。如果要在你的 clip-path 中使用外部的 SVG 文件,浏览器支持度还要低;

    CSS清除浮动的几种方法

    - 使用带clear属性的空元素

    - 使用CSS的overflow属性;

    - 使用CSS的:after伪元素;

    - 使用邻接元素处理;

    页面导入样式时,使用link和@import有什么区别?

    - link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;

    - 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

    - import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;

    介绍一下CSS的盒子模型

    -  IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

    - 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

    - IE对盒模型的解析出现一些问题,跟其它浏览器不同,将border与padding都包含在width之内。而另外一些浏览器则与它相反,是不包括border和padding的。

    - box-sizing:content-box 浏览器对盒模型的解释遵从我们之前认识到的W3C标准,当它定义width和height时,它的宽度不包括border和padding。

    - box-sizing:border-box 浏览器对盒模型的解释与IE6之前的版本相同,当它定义width和height时,border和padding则是被包含在宽高之内的。内容的宽和高可以通过定义的“width”和“height”减去相应方向的“padding”和“border”的宽度得到。内容的宽和高必须保证不能为负,必要时将自动增大该元素border box的尺寸以使其内容的宽或高最小为0。

    .javascript的typeof返回哪些数据类型

    - Object number function boolean underfind;

    数组方法pop() push() unshift() shift()

    - Push()尾部添加 pop()尾部删除

    - Unshift()头部添加 shift()头部删除

    ajax请求的时候get 和post方式的区别?

    - 一个在url后面 一个放在虚拟载体里面

    有大小限制

    - 安全问题

    应用不同 一个是论坛等只需要请求的,一个是类似修改密码的;

    ajax请求时,如何解释json数据

    事件委托是什么

    - 让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

    添加 删除 替换 插入到某个接点的方法

    obj.appendChidl()

    obj.innersetBefore

    obj.replaceChild

    obj.removeChild

    如何阻止事件冒泡和默认事件

    性能优化的方法

    (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

    (2)前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

    (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

    (4) 当需要设置的样式很多时设置className而不是直接操作style。

    (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

    (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

    (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

    (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示div+css布局慢。对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

    3.http状态码有那些?分别代表是什么意思?

    100-199 用于指定客户端应相应的某些动作。

    200-299 用于表示请求成功。

    300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

    400-499 用于指出客户端的错误。400 1、语义有误,当前请求无法被服务器理解。401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它。

    500-599 用于支持服务器错误。 503 – 服务不可用

    4.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

    - 查找浏览器缓存

    - DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求

    - 进行HTTP协议会话

    - 客户端发送报头(请求报头)

    - 文档开始下载

    - 文档树建立,根据标记请求所需指定MIME类型的文件

    - 文件显示

    - 浏览器这边做的工作大致分为以下几步:

    - 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。

    - 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)

    使用XHTML的局限有哪些?

    XHTML 与HTML的区别为:

    - XHTML 元素必须被正确地嵌套。

    - XHTML 元素必须被关闭。

    - 标签名必须用小写字母。

    - XHTML 文档必须拥有根元素。

    CSS sprites

    CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background-repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。

    HTTP请求方法

    【GET:获取资源】

        GET方法用来请求已被URI识别的资源

    【POST:传输实体文本】

        POST方法用来传输实体的主体。

    GET方法和POST方法本质上的区别:

    1. get提交,数据放在url里面,所以数据是在浏览器可见的,不安全,而post提交是放在请求头中,用户不可见,所以比较安全;

    2. 请求数据的大小,get有一定限制,而post可发送的数据没有限制

    3. get一般用来请求数据,不会对数据进行更改,而post用于发送数据,会对数据进行修改

      1、GET方法用于信息获取,它是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求;

      2、GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里,所以POST方法的安全性比GET方法要高;

      3、GET方法传输的数据量一般限制在2KB,其原因在于:GET是通过URL提交数据,而URL本身对于数据没有限制,但是不同的浏览器对于URL是有限制的,比如IE浏览器对于URL的限制为2KB,而Chrome,FireFox浏览器理论上对于URL是没有限制的,它真正的限制取决于操作系统本身;POST方法对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力。

    HEAD:获得报文首部】

        HEAD方法和GET方法一样,知识不返回豹纹的主体部分,用于确认URI的有效性及资源更新的日期时间等。

        具体来说:1、判断类型; 2、查看响应中的状态码,看对象是否存在(响应:请求执行成功了,但无数据返回); 3、测试资源是否被修改过

        HEAD方法和GET方法的区别: GET方法有实体,HEAD方法无实体。

    【PUT:传输文件】

        PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置。但是HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,故一般不用。

    【DELETE:删除文件】

        指明客户端想让服务器删除某个资源,与PUT方法相反,按URI删除指定资源

    【OPTIONS:询问支持的方法】

        OPTIONS方法用来查询针对请求URI指定资源支持的方法(客户端询问服务器可以提交哪些请求方法)

    【TRACE:追踪路径】

        客户端可以对请求消息的传输路径进行追踪,TRACE方法是让Web服务器端将之前的请求通信还给客户端的方法

    【CONNECT:要求用隧道协议连接代理】

        CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

    JSON.stringify(obj)      将JSON对象转为字符串。

    JSON.parse(string)      将字符串转为JSON对象格式。

    eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号

    如何获取浏览器URL中查询字符串中的参数

    split() 方法用于把一个字符串分割成字符串数组。

    function showWindowHref(){

    var sHref = window.location.href;

    var args = sHref.split('?');

    if(args[0] == sHref){

    return "";

    }

    var arr = args[1].split('&');

    var obj = {};

    for(var i = 0;i< arr.length;i++){

    var arg = arr[i].split('=');

    obj[arg[0]] = arg[1];

    }

    return obj;

    }

    var href = showWindowHref(); // obj

    console.log(href['name']); // xiaoming

    js 字符串操作函数

    concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串。

    indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。

    charAt() – 返回指定位置的字符。

    lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。

    match() – 检查一个字符串是否匹配一个正则表达式。

    substr() 函数 -- 返回从string的startPos位置,长度为length的字符串

    substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。

    slice() – 提取字符串的一部分,并返回一个新字符串。

    replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。

    search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。

    split() – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。

    length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。

    toLowerCase() – 将整个字符串转成小写字母。

    toUpperCase() – 将整个字符串转成大写字母。

    添加、移除、移动、复制、创建和查找节点

    1)创建新节点

      createDocumentFragment() //创建一个DOM片段

      createElement() //创建一个具体的元素

      createTextNode() //创建一个文本节点

    2)添加、移除、替换、插入

      appendChild() //添加

      removeChild() //移除

      replaceChild() //替换

      insertBefore() //插入

    3)查找

      getElementsByTagName() //通过标签名称

      getElementsByName() //通过元素的Name属性的值

      getElementById() //通过元素Id,唯一性

    比较typeof与instanceof?

    相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。

    typeof的定义和用法:返回值是一个字符串,用来说明变量的数据类型。

    细节:

    (1)、typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。

    (2)、typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错。

    (3)、对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

    Instanceof定义和用法:instanceof 用于判断一个变量是否属于某个对象的实例。

    判断一个字符串中出现次数最多的字符,统计这个次数

    var str = 'asdfssaaasasasasaa';

    var json = {};

    for (var i = 0; i < str.length; i++) {

    if(!json[str.charAt(i)]){

    json[str.charAt(i)] = 1;

    }else{

    json[str.charAt(i)]++;

    }

    };

    var iMax = 0;

    var iIndex = '';

    for(var i in json){

    if(json[i]>iMax){

    iMax = json[i];

    iIndex = i;

    }

    }

    console.log('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

    JavaScript 数组(Array)对象

    1、Array相关的属性和方法

    这里只是做了相关的列举,具体的使用方法,请参考网址。

    Array 对象属性

    constructor 返回对创建此对象的数组函数的引用。

    length 设置或返回数组中元素的数目。

    prototype 使您有能力向对象添加属性和方法。

    Array 对象方法

    concat() 连接两个或更多的数组,并返回结果。

    join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

    pop() 删除并返回数组的最后一个元素。

    shift() 删除并返回数组的第一个元素

    push() 向数组的末尾添加一个或更多元素,并返回新的长度。

    unshift() 向数组的开头添加一个或更多元素,并返回新的长度。

    reverse() 颠倒数组中元素的顺序。

    slice() 从某个已有的数组返回选定的元素

    sort() 对数组的元素进行排序

    splice() 删除元素,并向数组添加新元素。

    toSource() 返回该对象的源代码。

    toString() 把数组转换为字符串,并返回结果。

    toLocaleString() 把数组转换为本地数组,并返回结果。

    valueOf() 返回数组对象的原始值

    2、编写一个方法 去掉一个数组的重复元素

    方法一:

    var arr = [0,2,3,4,4,0,2];

    var obj = {};

    var tmp = [];

    for(var i = 0 ;i< arr.length;i++){

    if( !obj[arr[i]] ){

    obj[arr[i]] = 1;

    tmp.push(arr[i]);

    }

    }

    console.log(tmp);

    结果如下: [0, 2, 3, 4]

    方法二:

    var arr = [2,3,4,4,5,2,3,6],

    arr2 = [];

    for(var i = 0;i< arr.length;i++){

    if(arr2.indexOf(arr[i]) < 0){

    arr2.push(arr[i]);

    }

    }

    console.log(arr2);

    结果为:[2, 3, 4, 5, 6]

    方法三:

    var arr = [2,3,4,4,5,2,3,6];

    var arr2 = arr.filter(function(element,index,self){

    return self.indexOf(element) === index;

    });

    console.log(arr2);

    结果为:[2, 3, 4, 5, 6]

    回到顶部

    jquery相关

    1、 jQuery 库中的 $() 是什么?

      $() 函数是 jQuery() 函数的别称。$() 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。你可以将一个选择器字符串传入 $() 函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。

    2、如何找到所有 HTML select 标签的选中项?

    $('[name=selectname] :selected')

    3、$(this) 和 this 关键字在 jQuery 中有何不同?

    $(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用val() 获取值等等。

    而 this 代表当前元素,它是 JavaScript 关键词中的一个,表示上下文中的当前 DOM 元素。你不能对它调用 jQuery 方法,直到它被 $() 函数包裹,例如 $(this)。

    4、jquery怎么移除标签onclick属性?

    获得a标签的onclick属性: $("a").attr("onclick")

    删除onclick属性:$("a").removeAttr("onclick");

    设置onclick属性:$("a").attr("onclick","test();");

    5、jquery中addClass,removeClass,toggleClass的使用。

    $(selector).addClass(class):为每个匹配的元素添加指定的类名

    $(selector).removeClass(class):从所有匹配的元素中删除全部或者指定的类,删除class中某个值;

    $(selector).toggleClass(class):如果存在(不存在)就删除(添加)一个类

    $(selector).removeAttr(class);删除class这个属性;

    6、JQuery有几种选择器?

    (1)、基本选择器:#id,class,element,*;

    (2)、层次选择器:parent > child,prev + next ,prev ~ siblings

    (3)、基本过滤器选择器::first,:last ,:not ,:even ,:odd ,:eq ,:gt ,:lt

    (4)、内容过滤器选择器: :contains ,:empty ,:has ,:parent

    (5)、可见性过滤器选择器::hidden ,:visible

    (6)、属性过滤器选择器:[attribute] ,[attribute=value] ,[attribute!=value] ,[attribute^=value] ,[attribute$=value] ,[attribute*=value]

    (7)、子元素过滤器选择器::nth-child ,:first-child ,:last-child ,:only-child

    (8)、表单选择器: :input ,:text ,:password ,:radio ,:checkbox ,:submit 等;

    (9)、表单过滤器选择器::enabled ,:disabled ,:checked ,:selected

    7、jQuery中的Delegate()函数有什么作用?

      delegate()会在以下两个情况下使用到:

    1、如果你有一个父元素,需要给其下的子元素添加事件,这时你可以使用delegate()了,代码如下:

    $("ul").delegate("li", "click", function(){ $(this).hide(); });

    2、当元素在当前页面中不可用时,可以使用delegate()

    8、$(document).ready()方法和window.onload有什么区别?

    (1)、window.onload方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行的。

    (2)、$(document).ready() 方法可以在DOM载入就绪时就对其进行操纵,并调用执行绑定的函数。

    9、如何用jQuery禁用浏览器的前进后退按钮?

    实现代码如下:

    <script type="text/javascript" language="javascript">

      $(document).ready(function() {

        window.history.forward(1);

        //OR window.history.forward(-1);  });

    </script>

    10、 jquery中$.get()提交和$.post()提交有区别吗?

    相同点:都是异步请求的方式来获取服务端的数据;

    异同点:

    1、请求方式不同:$.get() 方法使用GET方法来进行异步请求的。$.post() 方法使用POST方法来进行异步请求的。

    2、参数传递方式不同:get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器的,这种传递是对用户不可见的。

    3、数据传输大小不同:get方式传输的数据大小不能超过2KB 而POST要大的多

    4、安全问题: GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。

    11、写出一个简单的$.ajax()的请求方式?

    $.ajax({

    url:'http://www.baidu.com',

    type:'POST',

    data:data,

    cache:true,

    headers:{},

    beforeSend:function(){},

    success:function(){},

    error:function(){},

    complete:function(){}

    });

    12、jQuery的事件委托方法bind 、live、delegate、on之间有什么区别?

    (1)、bind 【jQuery 1.3之前】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:bind(type,[data],function(eventObject));

    特点:

      (1)、适用于页面元素静态绑定。只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件。

      (2)、当页面加载完的时候,你才可以进行bind(),所以可能产生效率问题。

    实例如下:$( "#members li a" ).bind( "click", function( e ) {} );

    (2)、live 【jQuery 1.3之后】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:live(type, [data], fn);

    特点:

      (1)、live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。

      (2)、live正是利用了事件委托机制来完成事件的监听处理,把节点的处理委托给了document,新添加的元素不必再绑定一次监听器。

      (3)、使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即$(“ul”").live...可以,但$("body").find("ul").live...不行;

    实例如下:$( document ).on( "click", "#members li a", function( e ) {} );

    简述一下src与href的区别

    href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

    src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。

    当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

    5、简述同步和异步的区别

    同步是阻塞模式,异步是非阻塞模式。

    同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

    异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

    6、px和em的区别

    相同点:px和em都是长度单位;

    异同点:px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。

    浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

    7、浏览器的内核分别是什么?

    IE: trident内核

    Firefox:gecko内核

    Safari:webkit内核

    Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

    Chrome:Blink(基于webkit,Google与Opera Software共同开发)

    8、什么叫优雅降级和渐进增强?

    渐进增强 progressive enhancement:

    针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

    优雅降级 graceful degradation:

    一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

    区别:

    a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

    b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

    c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

    web前端开发,如何提高页面性能优化?

    内容方面:

    1.减少 HTTP 请求 (Make Fewer HTTP Requests)

    2.减少 DOM 元素数量 (Reduce the Number of DOM Elements)

    3.使得 Ajax 可缓存 (Make Ajax Cacheable)

    针对CSS:

    1.把 CSS 放到代码页上端 (Put Stylesheets at the Top)

    2.从页面中剥离 JavaScript 与 CSS (Make JavaScript and CSS External)

    3.精简 JavaScript 与 CSS (Minify JavaScript and CSS)

    4.避免 CSS 表达式 (Avoid CSS Expressions)

    针对JavaScript :

    1. 脚本放到 HTML 代码页底部 (Put Scripts at the Bottom)

    2. 从页面中剥离 JavaScript 与 CSS (Make JavaScript and CSS External)

    3. 精简 JavaScript 与 CSS (Minify JavaScript and CSS)

    4. 移除重复脚本 (Remove Duplicate Scripts)

    面向图片(Image):

    1.优化图片

    2 不要在 HTML 中使用缩放图片

    3 使用恰当的图片格式

    4 使用 CSS Sprites 技巧对图片优化

    6、浏览器是如何渲染页面的?

    渲染的流程如下:

    1.解析HTML文件,创建DOM树。

      自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。

    2.解析CSS。优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;

    3.将CSS与DOM合并,构建渲染树(Render Tree)

    4.布局和绘制,重绘(repaint)和重排(reflow)

    相关文章

      网友评论

          本文标题:cookies,sessionStorage 和 localSt

          本文链接:https://www.haomeiwen.com/subject/iqdthqtx.html