目录

html相关

1)说一下对cookie和Storage(localStorage和sessionStorage) 的认识和区别?

2)link和@import的区别

3)浏览器如何实现不同标签页的通信?

4)iframe的优缺点

5)canvas

6)做项目用到哪些h5新特性和css3新特性?

7)用localstorage和sessionStorage写过什么?

8)如何解决页面内容加载缓慢的问题?

9)cookie的特点*

10)页面渲染过程

11)网页上哪里可以看到请求的所有信息

12)HTML5的新特性

13)localstore和sessionstore的区别

14)页面之间是怎么传参数的?

15)如何在浏览器查看和清除localstrorage保存的数据?

16)对H5新增的语义化标签的理解?

css相关

17)CSS选择器的优先级排序,怎么计算权值?

18)display:none和visibility:hidden的区别

19)CSS的继承选择器,.one. two和.one > .two的区别?两个同级类选择器连着一起写有什么作用?(权值相加)

20)CSS的引用方式有哪些?它们的区别?

21)css有哪些选择符?可继承的属性有哪些?css3新增的伪元素有哪些?css优先级的计算

22)fixed和absolute的区别?

23)如何实现水平、垂直居中?

24)实现左侧边栏固定,其他内容自适应?

25)css3的新特性

26)了解过哪些页面布局?

27 用animation做过什么?做过哪些动画?

28 Sass写一个数组?

29)rem出现很小的小数手机上会发生什么,

30 什么时候用less

31 animation和transition

32 移入图片让那个图片慢慢放大

33 盒子模型概念

34 引用样式的方式有哪几种?他们的优先级排序怎么样?

35 px,em,rem,%,vm,vh

36 display的值和作用

37列举两种清除浮动的方法(代码实现或者描述思路)

38 盒子模型(怪异模型)

39 谈谈fixed ,relative, absolute

40 float和absolute有什么区别?

41 代码实现3栏效果,左右两栏固定宽度,中间栏随着浏览器宽度自适应变化

42 css选择器的权重

43 transition transform translate 之间的区别 transform的属性有哪些?

44 css3中的选择器

46 用CSS实现一个背景色为红色,半径为200px的圆,并设置不停的上下移动动画

javascript以及es6相关

null和undefined的区别?

js的数据类型

js 的继承实现方式有哪些,列举两个例子

eval是什么?

用什么会导致内存泄漏?

js深度克隆的代码实现?

同源策略,跨域,后台如何解决跨域,html有哪些标签可以跨域

es6

js自己封装一个方法

jq用过哪些方法?

promise?

触摸有几个事件?

什么时候会发生跨域问题

匿名函数

This指向问题

JQ,JS,vue 三者的区别

用jq实现双向绑定!

ajax的实现

ajax的实现

在数组上新增一个方法,实现复制。

期望:[1,2,3].copy() //输出 [1,2,3,1,2,3]

.使用闭包实现一个方法,第一次调用返回1,第二次返回2,第三次3,以此类推。

.封装一个函数,参数是定时器的时间,.then执行回调函数。

说一说前端性能优化有哪些方法?

一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。

.export和export default?

怎么去判断出来数组里面值为1的元素

有一个数组,怎么去修改每一个值?

数组去重

统计字符串中出现最多的字符

js垃圾回收机制

原型、原型链

作用域链

闭包

继承方法

辗转相除法

数组转字符串

二级下拉菜单

图片预加载和懒加载?

bind() apply()

const用法

Utf-8编码汉字占多少个字节

ajax

js对数组的操作,包括向数组中插入删除数据

两种定时器,setinterval和settimeout。因为settimeout是只执行一次的,如果要执行多次怎么做。(答案:设置一个回调函数,多次调用,大概是这样,你可以去查查)

JS内存回收机制

promise是什么?能解决什么问题?

编程:连接两个数组并返回?

冒泡排序?

创建新数组,向数组插入数据

es6新特性

js对数组有哪些操作方法

什么是ajax,可以用来做什么

讲下你做轮播图的思路,无缝轮播

js的选择器

js数据类型

减少页面加载时间的方法

怎么理解模块化开发

什么是闭包,有什么作用?

定时器 settimeout和setinterval的区别,如果用settimeout实现每隔一定的时间就执行一次,怎么实现

手机号的正则表达式(以1开头的11位数字)

结构的html代码,写原生js实现点击某个li就弹出对应的索引值

对数组进行随机排序, 要求数组中的每个元素不能停留在原来的位置

代码实现parse方法,将有效的JSON字符串转换成JavaScript对象

原生js的变量类型有哪些?ES6新增哪几个变量类型?

js的数组方法有哪些?

es6的有哪些扩展?新增的数组方法有哪些?用什么方法连接两个数组?函数扩展中的箭头函数中的this所指向的是什么?一般函数的this指向的又是什么?

用什么方法判断是否是数组?又用什么方法判断是否是对象?

http相关

浏览器

bootstrap

vue相关

node相关

4 module.export和export?

微信小程序

react

数据库相关

其他


html相关

  1. 1)说一下对cookie和Storage(localStorage和sessionStorage) 的认识和区别?

    1. session 是一个后端存储空间
      2. cookie / localStorage / sessionStorage 的区别
      存储大小

      cookie 4kb
      localStorage 5M
      通讯相关

      cookie 随请求携带
      storage 不会自动携带
      操作相关

      cookie 操作复杂,没有 api,前后端都可以操作
      storage 操作简单,有 api,只能前端操作
      存储格式

      cookie:字符串格式
      storageL: 键值对
      时效相关

      cookie:默认会话级别,可以手动设置
      storage:localStorage的存储是永久性的,只有在手动删除或者浏览器被卸载后才会被清除,sessionStorage 是会话,当窗口或者页面关闭后会被清除
      3.loaclStorage 和 sessionStorage 的区别
      跨页面通讯能力
      localStorage 随便跨页面
      sessionStorage 只是在本页面跳转可以通讯
      时效性
      localStorage 是永久
      sessionStorage 是会话
      共同点
      不能存储其他数据类型,只能存储字符串数据类型
      如果一定要存储其他数据类型,转成 json 格式存储

  2. 2)link和@import的区别

    1. 都知道 ,外部引入 CSS 有2种方式,link标签和@import。
      但是它们有何本质区别?
      本人项目中多数情况都使用link方式,但见过某些项目人,自以为@import高大上类似es6,极力吹捧使用@import,就此找了一些资料对此进行比较说明:
      先上结论
      慎用@import方式。可以避免考虑@import的语法规则和注意事项,以及不合理的引入顺序导致的资源文件下载顺序混乱和http请求过多。

      区别1:
      link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事物如引入网站标题图标;@import属于CSS范畴,只能加载CSS。

      .ico“>

    2. 区别2:
      link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。所以会出现一开始没有css样式,闪烁一下出现样式后的页面。

      区别3:
      link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

      区别4:
      link支持使用Javascript控制DOM去改变样式;而@import不支持。

      顺便总结下在html中css有四种引入方式:

      内联样式
      内联CSS也可称为行内CSS或者行级CSS,它直接在标签内部引入,显著的优点是十分的便捷、高效
      示例:
      这通常是个很糟糕的书写方式,它只能改变当前标签的样式,如果想要多个

      拥有相同的样式,你不得不重复地为每个
      添加相同的样式,如果想要修改一种样式,又不得不修改所有的 style 中的代码。很显然,内联方式引入 CSS 代码会导致 HTML 代码变得冗长,且使得网页难以维护。
      嵌入样式
      嵌入方式也称页级CSS或内部CSS,整体是放在head标签里边的,在style标签里边定义样式,作用范围和字面意思相同,仅限于本页面的元素;如果你写的代码超过了几百行,想想每次把代码页拉到最上边都很烦,所以它在可维护性方面较差。
      示例:

      嵌入方式的 CSS 只对当前的网页有效。因为 CSS 代码是在 HTML 文件中,所以会使得代码比较集中,当我们写模板网页时这通常比较有利。因为查看模板代码的人可以一目了然地查看 HTML 结构和 CSS 样式。因为嵌入的 CSS 只对当前页面有效,所以当多个页面需要引入相同的 CSS 代码时,这样写会导致代码冗余,也不利于维护。
      外部样式
      链接方式指的是使用 HTML 头部的 标签引入外部的 CSS 文件。
      示例:

      这是最常见的也是最推荐的引入 CSS 的方式。使用这种方式,所有的 CSS 代码只存在于单独的 CSS 文件中,所以具有良好的可维护性。并且所有的 CSS 代码只存在于 CSS 文件中,CSS 文件会在第一次加载时引入,以后切换页面时只需加载 HTML 文件即可。
      导入样式
      导入方式指的是使用 CSS 规则引入外部 CSS 文件。
      示例:

      或者写在css样式中

      @charset “utf-8”;
      @import url(style.css);
      *{ margin:0; padding:0;}
      .notice-link a{ color:#999;}

      HTML加载过程:
          1) 加载HTML-DOM结构

      2)CSS和JS

      3)图片和多媒体

      4)加载事件触发

      总结: link和@import都没有放置顺序的要求,但是不同的放置位置可能会造成效果显示的差异。对于link,无论放到哪个位置,都是一边加载数据,一边进行优化,视觉感受很好;而对于@import,放置到哪里,才从哪里开始加载CSS样式,即先加载数据,然后加载样式,如果网速不佳,可能会造成只有数据出来,而样式一点点加载的效果。并且在同一个页面中,调用两种方式,link永远比@import优先级高。

      在项目中使用的时候,一般在页面中调用方式为link,并且放在head标签中;使用@import除了在CSS文件中,在页面调用时,一般加载第三方的样式会使用到,并且需要放置在页面的底部,不会影响自己的网站。

  3. 3)浏览器如何实现不同标签页的通信?

    1. 浏览器内多个标签页之间通信,通俗的讲就是浏览器中开了多个窗口,在其中一个窗口做了一些行为等其他窗口不用刷新也能有相关表现。

      一、cookie+setInterval方式
      要想在多个窗口中通信,通信的内容一定不能放在window对象中,因为window是当前窗口的作用域,里面的内容只属于当前窗口。而cookie是浏览器的本地存储机制,和窗口无关。

      将要发送的信息写入cookie:

       var msg = documet.querySelector('#msg'); if(msg.value.trim() != ""){ docment.cookie = "msg=" + msg.value.trim(); }

      在另一个页面读取cookie:

      var recMsg = document.querySelector(‘#recMsg’);
      function getValue(key){
      var cookies = ‘{“‘+document.cookie.replace(/=/g,'”:”‘).replace(/;\s+/g,'”, “‘)+'”}’;
      cookies = JSON.parse(cookies);
      return cookies[key];
      }
      setInterval(function(){
      recMsg.innerHTML = getValue(“msg1”);
      },500);

      但是由于仅仅从cookie读取信息不能实时更新,需要手动刷新,因此采用setInterval定时器解决,将读取信息的代码封装成一个函数,在定时器内调用即可

      缺点:

      1)cookie空间有限,容量4k
      2)每次http请求都会把当前域的cookie发送到服务器上,浪费带宽
      3)setInterval评率设置过大会影响浏览器性能,过小会影响时效性

      优点:每个浏览器都兼容

      二、websocket协议
      websocket是一种网络通信协议,因为http有缺陷,通信只可以由客户端发起,服务器无法主动向客户端发送消息,但如果这时服务器有连续变化的状态,那么就只能使用轮询(每个一段时间,就发出一个询问)的方式来询问。因为websocket拥有全双工(full-duplex)通信自然可以实现多个标签页之间的通信。
      发送方先发送消息到WebSocketServer,然后服务端再实时把消息发给接收方

      用法:新建webSocket文件夹,在该目录下打开终端,运行npm init (npm安装及配置步骤)初始化一个简单的node项目(因为需要引入ws包),一直按回车到结束就初始了一个简单的node项目。再安装ws包,依旧在当前目录下的终端运行npm i -save ws,在webSocket目录下新建sever.js、send.html、reveive.html文件

      三、localstorage

      四、html5浏览器新特性——SharedWorker
      WebWorker的升级版,webworker只能在一个窗口内使用,而SharedWorker可以在多个窗口之间通信
      SharedWorker也是纯客户端的,没有服务端参与
      SharedWorker在客户端有一个自己维护的对象worker.js,消息存储在worker.js的data中
      SharedWorker不如localStorage的是接收消息不是自动的,也要用定时器实时从worker.js中获取消息

      原文链接:https://blog.csdn.net/jewfer/article/details/122614963

  4. 4)iframe的优缺点

    1. 一、iframe的优点:
      1、 iframe能够原封不动地把嵌入的网页展现出来。

      2、 如果有多个网页调用iframe,只需要修改iframe的内容,就可以实现对调用iframe的每一个页面内容的更改,方便快捷。

      3、 网页如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用iframe来嵌套,可以增加代码的可重用性。

      4、 如果遇到加载缓慢的第三方内容如图标和广告等,可以用iframe来解决。

      二、iframe的缺点:
      1、 会产生很多页面,不容易管理。

      2、 在几个框架中都出现上下、左右滚动条时,这些滚动条除了会挤占已经非常有限的页面空间外,还会分散访问者的注意力。

      3、 使用框架结构时,必须保证正确设置所有的导航链接,否则会给访问者带来很大的麻烦。比如被链接的页面出现在导航框架内,这种情况下会导致链接死循环。

      4、 很多的移动设备(PDA手机)无法完全显示框架,设备兼容性差。

      5、 iframe框架页面会增加服务器的http请求,对于大型网站是不可取的。

      现在基本上都是用Ajax来代替iframe,iframe已渐渐退出了前端开发。

  5. 5)canvas

    1. Canvas介绍
      1.canvas是html5的一个新标签,属于h5的新特性
      2.canvas标签是一个图形的容器,简单点说就是一块画布,你可以在上画矩形,圆形,三角形,折线等等,也可以用来画logo
      3.它是通过javascript来画的,即脚本绘制图形

      canvas可以用来干啥呢?
      1.制作web网页游戏(但是如果代码写的不咋的游戏可能会非常卡)
      2.数据可视化(这么说你可能不明白,但我告诉你echarts就是基于canvas)
      3.广告banner的动态效果非常适合用canvas制作
      4.canvas还可以用来内嵌一些网页

      原文链接
      1
      属性
      autoplay autoplay 视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题);
      controls controls 向用户显示播放器控件;
      loop loop 播放完是否继续循环播放
      src url
      Chrome 把音频和视频自动播放禁止了;
      2 视频:video;
      尽量使用 MP4;
      另外还有 Ogg 格式;
      语法:

      1
      属性
      autoplay autoplay 视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题);
      controls controls 向用户显示播放器控件;
      width px
      height px
      loop loop 播放完是否继续循环播放
      preload auto(预先加载视频)| none(不应加载视频)
      src url
      poster Imgurl 加载等待的画面图片
      muted muted 静音播放
      视频静音后可以自动播放;
      从而不再使用flash等插件
      1.3 HTML5 新增的 input 类型
      验证的时候必须添加 form 表单域;
      使用 submit 进行提交;
      type=”email” 限制用户输入必须为 Email 类型
      type=”url” 限制用户输入必须为 URL 类型
      type=”date” 限制用户输入必须为 date 类型
      type=”time” 限制用户输入必须为 time 类型
      type=”month” 限制用户输入必须为 month 类型
      type=”week” 限制用户输入必须为 week 类型
      type=”number” 限制用户输入必须为 number 类型
      type=”tel” 限制用户输入必须为 tel 类型
      type=”search” 限制用户输入必须为 search 类型
      type=”color” 限制用户输入必须为 color 类型
      type=”submit” 提交按钮
      1.4 HTML5 新增的表单属性
      属性 值 说明
      required required 表单拥有该属性表示其内容不能为空,必填
      placeholder 提示文本 表单的提示信息,存在默认值将不显示
      autofocus autofocus 自动聚焦属性,页面加载完成后聚焦到指定表单
      autocomplete off/on 浏览器基于之前输入的值,显示出可能的选项,
      默认已经打开,关闭autocomplete=”off”
      需要放在表单内,加上name属性,同时提交成功
      multiple multiple 可以多选文件提交
      “` /* 设置占位符颜色 */ input::placeholder { color: springgreen; } “`
      2 CSS3
      存在兼容性问题

      2.1 属性选择器
      属性选择器可以根据元素特定属性来选择元素,这样就可以不用借助于类或者 id 选择器;
      权重为 0, 0, 1, 0;
      类选择器、属性选择器、伪类选择器权重相同;
      input[name=”username”] {
      outline: none;
      border: 3px solid skyblue;
      }

      选择符 简介
      E[att] 匹配有 att 属性的 E 元素
      E[att=”val”] 匹配有 att 属性且属性等于 val 的 E 元素
      E[att^=”val”] 匹配有 att 属性且值以 val 开头的 E 元素
      E[att$=”val”] 匹配有 att 属性且值以 val 结尾的 E 元素
      E[att*=”val”] 匹配有 att 属性且值中含有 val 的 E 元素
      2.2 结构伪类选择器
      根据文档结构来选择元素,常用于根据父级选择器里面的子元素;
      /* 选择第一个孩子,且必须是 li */
      ul li:first-child {
      color: red;
      }

      ul li:nth-child(2) {
      color: red;
      }

      // 使用 even 选出奇数行
      ul li:nth-child(even) {
      background-color: red;
      color: white;
      }

      ul li:nth-child(even) // 使用 even 选出奇数行
      ul li:nth-child(odd) // 使用 odd 选出偶数行
      ul li:nth-child(n) // n 是选择所有
      n 可以被公示替代
      2n 取出偶数项
      2n + 1 取出奇数项
      5n 取出 5 的倍数项
      n + 5 从第五项开始
      -n + 5 前五项
      数字可以是任何数字
      div:nth-child(n) 会包含所有标签类型,同时需要满足设置的标签类型,都满足方能选中;
      div:nth-of-type(n) 只包含指定元素,如此处为div;
      选择符 简介
      E:first-child 匹配父元素中的第一个子元素 E
      E:last-child >匹配父元素中的最后一个子元素 E
      E:nth-child(n) >匹配父元素中的第 n 个子元素 E
      E:first-of-type 指定类型 E 的第一个
      E:last-of-type 指定类型 E 的最后一个
      E:nth-of-type(n) 指定类型 E 的第 n 个
      2.3 伪元素选择器
      伪元素选择器可以用于利用 css 创建新标签元素,不需要 HTML 标签,从而简化 HTML 结构;

      after 和 before 创建的元素是行内元素;

      新创建的元素在文档树中是找不到的;

      语法:element::before();

      after 和 before 必须有 content 属性;

      伪元素选择器和标签选择器一样,权重为0, 0, 0, 1;

      选择符 简介
      ::before 在元素内部的前面插入内容
      ::after 在元素内部的后面插入内容
      div {
      width: 200px;
      height: 200px;
      background-color: pink;
      }

      div::before {
      /* content是必须要写的,元素内容 */
      content: ‘before 伪元素选择器’;
      }

      div::after {
      /* content是必须要写的,元素内容 */
      content: ‘after 伪元素选择器’;
      }

      content 必须填写,可以写空字符串;

      在伪元素中使用 iconfont:

      @font-face {
      font-family: “iconfont”;
      src: url(‘iconfont.eot?t=1587189598280’);
      /* IE9 */
      src: url(‘iconfont.eot?t=1587189598280#iefix’) format(’embedded-opentype’),
      /* IE6-IE8 */
      url(‘data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAJwAAsAAAAABiAAAAIjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAooRgE2AiQDCAsGAAQgBYRtBzIbbgXILrBt2JMiJESQDXTjExAAiOD5/b7Nue9+1bRqcaNJFE0LNDyRiFs3oa1TOqFoJv/9X7p0TKPyfLfcQ01/I//fmLm0hedxGiERBoSECkU85Jegb+7hAvs8l9ObQAdyV32gXPegNQYNoF4cUKB7YBRZCWXcMHbBC3xMoG5GQ+7k7HiBqsxeFYj3b7QB1UJAllm6KpQbDmbxWUk1PaVv4FP0/finF1WSUsGuuny5smH6i5NVPE4ePQSEIAEdL6HAFpCJ28bEuYJgXEE9UbQAjlUe/DKZBHZxVItgf51d2gRTMBn84q0UIMFjUYYbkzYR5Rf7pEf216s366Re+xcwRT8rDtKBHILvT23nf7WRwc97HpmzYS5Q3cwZfL5s4EA2FLYtZU3WOJ6UD9tWV8cE9vT9TTWOrpUJVaMJrorpDIWqJTKzWyhp2EZZ1T7qNm2ONwywgsg1bPgACF2fSNp+oND1Q2b2FyVj/yjrRoG6+xhc2LASb+rHH8gQstF8R9eKI+U6pB6Xn0jfA4Pzioi/EWduGLutTjm9oYh4iS3ZQ/dEFCqOQ1yD5ygIYkw49siSliOS9Ntt1fSmlhWHUHeMEYMgNmR6h1yWWEQFk0W98vkTot0FDNzRV5e+ISzjzo66WjoDyI02GtT3KK9kHrQeIRSksFgIrcE8EgjEUNI8z0MsosWZEEv0tZ1Raqi2tb0+/LtTUGebUjg1herHN0akfQsAAAAA’) format(‘woff2’),
      url(‘iconfont.woff?t=1587189598280’) format(‘woff’),
      url(‘iconfont.ttf?t=1587189598280’) format(‘truetype’),
      /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
      url(‘iconfont.svg?t=1587189598280#iconfont’) format(‘svg’);
      /* iOS 4.1- */
      }

      .iconfont {
      font-family: “iconfont” !important;
      font-size: 16px;
      font-style: normal;
      -webkit-font-smoothing: antialiased;
      -webkit-text-stroke-width: 0.2px;
      -moz-osx-font-smoothing: grayscale;
      }

      div::after {
      position: absolute;
      font-family: “iconfont” !important;
      font-size: 16px;
      font-style: normal;
      -webkit-font-smoothing: antialiased;
      -webkit-text-stroke-width: 0.2px;
      -moz-osx-font-smoothing: grayscale;
      /* top: ; */
      content: ‘\e77b’;
      }

      原本直接放在“ iconfont ”类中的样式放在对应伪类中,然后将“
      height: 200px;
      background-color: skyblue;
      border: 5px solid greenyellow;
      padding: 15px;
      box-sizing: border-box;
      }

      使用通配符进行统一默认配置;
      * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
      }

      2.5 CSS3 其他特性(了解)
      1 CSS3 滤镜 filter;

      用于将模糊或颜色偏移等图形效果应用于元素;
      filter: 函数();
      例如:filter: blur(5px); blur模糊处理 数值越大越模糊

      2 CSS3 calc 函数:

      calc() 使声明css属性值时执行一些计算;
      width: calc(100% – 80px);
      1
      上例中使得子元素永远比父元素窄 80px;
      可以使用运算符
      2.6 CSS3 过渡
      在不使用 Flash 动画或 javascript 的情况下,配置元素样式变化过度效果;

      主要是过渡效果;
      与 :hover 搭配使用;
      transition: 要过渡的属性 花费时间 运动曲线 何时开始;
      1
      要过渡的属性:如果是所有属性,可以写 all ;
      花费时间:单位为秒,必须写单位,如 0.5s;
      运动曲线:可以省略;
      linear:匀速;
      ease:缓慢减速;
      ease-in:加速;
      ease-out:减速;
      ease-in-out:先加速后减速;
      何时开始:用于延迟,可以省略;
      div {
      width: 200px;
      height: 100px;
      background: no-repeat;
      background-image: url(../1.jpg);
      background-size: 100% 100%;
      transition: background-image 1s, width 1s;
      }

      div:hover {
      background-image: url(../2.jpg);
      width: 400px;
      }

      改变多个属性则用逗号分开,或用all;
      直接用 all 最常见;

      原文链接:localStorage做过记住用户名和密码的功能,做过小游戏最高分和排行榜

  6. 8)如何解决页面内容加载缓慢的问题?

    1. 一、优化图片

      几乎没有哪个网页上是没有图片的。如果你经历过56K猫的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会花费大量的时间。

      即使在现在,网络带宽有了很多的提高,56K猫逐渐淡出,优化图片以加快网页速度还是很有必要的。

      优化图片包括减少图片数、降低图像质量、使用恰当的格式。

      1、减少图片数:去除不必要的图片。可以将大量的背景图整合成一张雪碧图

      2、降低图像质量:如果不是很必要,尝试降低图像的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文件大小的变化是比较大的。

      3、使用恰当的格式:请参阅下一点。

      因此,在上传图片之前,你需要对图片进行编辑,如果你觉得photoshop太麻烦,可以试试一些在线图片编辑工具。懒得编辑而又想图片有特殊的效果?可以试试用过调用javascript来实现图片特效。

      二、图像格式的选择

      一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只需要知道在什么时候应该使用什么格式,以减少网页的加载时间。

      1、JPG:一般用于展示风景、人物、艺术照的摄影作品。有时也用在电脑截屏上。

      2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动画图片。就像用Lunapic制作的倒映图片。

      3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于需要背景透明显示或对图像质量要求较高的网页上。

      三、优化CSS

      CSS叠层样式表让网页加载起来更高效,浏览体验也得到提高。有了CSS,表格布局的方式可以退休了。

      但有时我们在写CSS的时候会使用了一些比较罗嗦的语句,比如这句:

      以下为引用的内容:
      margin-top: 10px;
      margin-right: 20px;
      margin-bottom: 10px;
      margin-left: 20px;

      你可以将它简化为:

      margin: 10px 20px 10px 20px;

      又或者这句:

      以下为引用的内容:

      A paragraph of decorated text

      Second paragraph

      Third paragraph

      Forth paragraph

      可以用div来包含:

      以下为引用的内容:

      A paragraph of decorated text

      Second paragraph

      Third paragraph

      Forth paragraph

      简化CSS能去除冗余的属性,提高运行效率。如果你写好CSS后懒得去做简化,你可以使用一些在线的简化CSS工具,比如CleanCSS。

      四、网址后加斜杠

      有些网址,比如”www.kenengba.com/220″,当服务器收到这样一个地址请求的时候,它需要花费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其变成www.kenengba.com/220/,这样服务器就能一目了然地知道要访问该目录下的index或default文件,从而节省了加载时间。

      五、标明高度和宽度

      这点很重要,但很多人由于懒惰或其它原因,总是将其忽视。当你在网页上添加图片或表格时,你应该指定它们的高度和宽度,也就是height和width参数。如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。

      下面是一个比较友好的图片代码:

      当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。

      六、减少http请求

      当浏览者打开某个网页,浏览器会发出很多对象请求(图像、脚本等等),视乎网络延时情况,每个对象加载都会有所延迟。如果网页上对象很多,这可以需要花费大量的时间。

      因此,要为http请求减负。如何减负?

      1、去除一些不必要的对象。

      2、将临近的两张图片合成一张。

      3、合并CSS

      看看下面这段代码,需要加载三个CSS:

      以下为引用的内容:

      我们可以将其合成一个:

      从而减少http请求。

      七、其它小技巧(译者添加)

      1、去除不必要加载项。

      2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速度快的。

      3、尽量用图片代替flash,这对SEO也有好处。

      4、有些内容可以静态化就将其静态化,以减少服务器的负担。

      5、统计代码放在页尾。

      6、尽量不要用一个很小的图片当背景,这样做会加大客户端CPU处理时间

      7,静态资源使用cdn 8,增加服务器带宽 9,如果用户多的话,使用高并发

  7. 9)cookie的特点*

    1. 一、cookie的特点:
      1、cookie不可跨域
      2、cookie存储在浏览器里面
      3、cookie有数量与大小的限制
      1)数量在50个左右
      2)大小在4kb左右
      4、cookie的存储时间非常灵活
      5、cookie不光可以服务器设置(用set-cookie),也可以客户端设置。
      document.cookie
      key:value

      二、cookie的属性
      1、name cookie的名字,唯一性
      2、value cookie的值
      3、domain 设置cookie在哪个域名下是有效的
      4、path cookie的路径
      5、expires cookie的过期时间
      6、max-age cookie的有效期,
      值:-1 临时cookie,0有效期够了的 cookie,正数存活周期
      7、HttpOnly 有这个标记的cookie,前端是无法获取的
      8、Secure 设置cookie只能通过https协议传输
      9、SameSite 设置cookie在跨域请求的时候不能被发送。

  8. 10)页面渲染过程

    1. 1、解析HMTML标签,构建DOM树
      HTML 文档中的所有内容皆是节点,各节点之间拥有层级关系,如父子关系、兄弟关系等,彼此相连,构成DOM树。最常见的几种节点有:文档节点、元素节点、文本节点、属性节点、注释节点。

      DOM节点树中节点与HTML文档中内容一一对应,DOM树构建过程:读取html文档,将字节转换成字符,确定tokens(标签),再将tokens转换成节点,以节点构建 DOM 树。

      2、解析CSS,构建CSSOM树
      CSS文档中,所有元素皆是节点,与HTML文件中的标签节点一一对应。CSS中各节点之间同样拥有层级关系,如父子关系、兄弟关系等,彼此相连,构成CSSOM树。

      在构建DOM树的过程中,在 HTML 文档的 head 标签中遇到 link 标签,该标签引用了一个外部CSS样式表。由于预见到需要利用该CSS资源来渲染页面,浏览器会立即发出对该CSS资源的请求,并进行CSSDOM树的构建。

      CSSOM树构建过程与DOM树构建流程一致:读取CSS文档,将字节转换成字符,确定tokens(标签),再将tokens转换成节点,以节点构建 CSSOM 树。

      3、把DOM和CSSOM组合成渲染树(render tree)

      渲染树(Render Tree)由DOM树、CSSOM树合并而成,但并不是必须等DOM树及CSSOM树加载完成后才开始合并构建渲染树。三者的构建并无先后条件,亦非完全独立,而是会有交叉,并行构建。因此会形成一边加载,一边解析,一边渲染的工作现象。

      构建渲染树,根据渲染树计算每个可见元素的布局,并输出到绘制流程,将像素渲染到屏幕上。

      4.在渲染树的基础上进行布局,计算每个节点的几何结构
      4.1重绘(repaint):屏幕的一部分要重绘。渲染树节点发生改变,但不影响该节点在页面当中的空间位置及大小。譬如某个div标签节点的背景颜色、字体颜色等等发生改变,但是该div标签节点的宽、高、内外边距并不发生变化,此时触发浏览器重绘(repaint)。

      4.2重排(reflow):也有称回流当渲染树节点发生改变,影响了节点的几何属性(如宽、高、内边距、外边距、或是float、position、display:none;等等),导致节点位置发生变化,此时触发浏览器重排(reflow),需要重新生成渲染树。譬如JS为某个p标签节点添加新的样式:”display:none;”。导致该p标签被隐藏起来,该p标签之后的所有节点位置都会发生改变。此时浏览器需要重新生成渲染树,重新布局,即重排(reflow)。

      注意:重排必将引起重绘,而重绘不一定会引起重排。

      何时回引起重排?

      当页面布局和几何属性改变时就需要重排。下述情况会发生浏览器重排:

      1、添加或者删除可见的DOM元素;

      2、元素位置改变——display、float、position、overflow等等;

      3、元素尺寸改变——边距、填充、边框、宽度和高度

      4、内容改变——比如文本改变或者图片大小改变而引起的计算值宽度和高度改变;

      5、页面渲染初始化;

      6、浏览器窗口尺寸改变——resize事件发生时;

      4.3如何减少和避免重排

      Reflow 的成本比 Repaint 的成本高得多的多。一个节点的 Reflow 很有可能导致子节点,甚至父节点以及兄弟节点的 Reflow 。在一些高性能的电脑上也许还没什么,但是如果 Reflow 发生在手机上,那么这个过程是延慢加载和耗电的。—-浏览器的渲染原理简介

      1. 直接改变className,如果动态改变样式,则使用cssText(考虑没有优化的浏览器);

      2. 让要操作的元素进行”离线处理”,处理完后一起更新;

      a) 使用DocumentFragment进行缓存操作,引发一次回流和重绘;
      b) 使用display:none技术,只引发两次回流和重绘;
      c) 使用cloneNode(true or false) 和 replaceChild 技术,引发一次回流和重绘;

      3.不要经常访问会引起浏览器flush队列的属性,如果你确实要访问,利用缓存;

      4. 让元素脱离动画流,减少回流的Render Tree的规模;

      5、把每个节点绘制到屏幕上(painting)

      原文链接:https://blog.csdn.net/m0_56551554/article/details/121789562

  9. 12)HTML5的新特性

    HTML新特性
    1:语义化标签
    通过语义化标签,可以让页面有更加完善的结构,让页面的元素有含义,同时利于被搜索引擎解析,有利于SEO,主要标签包括下面的标签:

    标签 描述
    header 表示文档的头部区域
    footer 表示文档的尾部区域
    nav 表示文档导航部分
    section 表示文档的某一节
    article 表示文章
    main 表示文档主要的内容区域
    2:增强型表单
    例如可以通过input的type属性指定类型是number还是date或者url,同时还添加了placeholder和required等表单属性

    3. 媒体元素
    新增了audio和video两个媒体相关的标签,可以让开发人员不必以来任何插件就能在网页中嵌入浏览器的音频和视频内容。

    4. canvas绘图
    canvas绘图指的是在页面中设定一个区域,然后通过JS动态的在这个区域绘制图形。

    5. svg绘图
    这一部分不详细展开,想要了解的小伙伴可以参考其他文章~

    6. 地理定位
    使用getCurrentPosition()方法来获取用户的位置,从而实现队地理位置的定位。

    7. 拖放API
    通过给标签元素设置属性draggable值为true,能够实现对目标元素的拖动。

    8. Web Worker
    Web Worker通过加载一个脚本文件,进而创建一个独立工作的线程,在主线程之外运行,worker线程运行结束之后会把结果返回给主线程,worker线程可以处理一些计算密集型的任务,这样主线程就会变得相对轻松,这并不是说JS具备了多线程的能力,而实浏览器作为宿主环境提供了一个JS多线程运行的环境。

    9. Web Storage
    关于Web Storage部分,大家需要重点掌握的是cookie、Localstorage和SessionStorage三者之间的区别:

    10. Websocket
    关于websocket协议,大家主要需要记住的就是websocket和HTTP的区别。

    相同点
    HTTP和Websocket都是基于TCP的应用层协议。

    不同点
    websocket是双向通信协议,模拟socket协议,可以双向发送和接受消息,HTTP是单向的,意思是说通信只能由客户端发起。
    websocket是需要浏览器和服务器通过握手建立连接,但是HTTP是浏览器向服务器发送连接,服务器预先不知道这个连接。

    联系
    websocket建立握手时需要基于HTTP进行传输,建立连接之后呢便不再需要HTTP协议了。

    原文链接:https://blog.csdn.net/sinat_41696687/article/details/123159705

  10. 13)localstore和sessionstore的区别

LocalStorge和sessionStorage之间的区别
localStorage
localStorage的生命周期是永久性的,也就是说使用localStorage存储数据,数据会被永久保存,数据不会因为窗口或浏览器的关闭而消失,除非主动的去删除数据。

localStorage有length属性,可以通过控制台查看其有多少条记录的数据。

var storage = null;storage.setItem("key","value")  //调用setItem方法存储数据storage.getItem("key")   //调用getItem方法获取key的值stroage.removeItem("key")  //删除key对应的值stroage.clear()      //清空数据

sessionStorage
sessionStorage的生命周期相比localStorage来说很短,其周期在窗口关闭时结束。也就是说,当浏览器窗口关闭,sessionStorage的使命就已经结束,其保留的数据也会被清除。

sessionStorage也拥有length属性,两者的使用方法也是一致的,但和localstorage比较,仍有一些区别。

页面刷新不会消除已获得的数据
这里我写了两个html文件(test1.html / test2.html)来进行说明:

因为篇幅问题,所以只取了部分需要注意的代码段

这是test1.html的部分代码:

    页面的作用:在 sessionStorage 中存数据      var Data = window.sessionStorage;    console.log(Data)    var str = 'sessionData'    // sessionStorage 存储数据    Data.setItem('code',str)    document.getElementsByTagName('button')[0].onclick = function(){      window.location.href = './test2.html'    }  

test2.html的部分代码:

  我是test2页面        var sessionData = sessionStorage.getItem('code')   console.log(sessionData)   console.log(sessionStorage.getItem('code'))  

打开test1页面,可以看见跳转按钮以及一段文字:页面的作用:在 sessionStorage 中存数据;

打开控制器,可以看见已经传入了 code 以及它的值 sessionData;

这时点击跳转按钮,会看见页面刷新,进入test2页面,显示“我是test2页面”

sessionStorage 在test1窗口关闭前;就保存数据了。换一个新的窗口(test2);也不会有数据改变

sessionStorage.getItem(key) 获取sessionStorage的数据中value值

  • 14)页面之间是怎么传参数的?

1.cookie 传值。

缺点: cookie储存是需要服务器支持的,本地直接运行静态文件是实现不了的。cookie能够存储少量数据到客户端的磁盘中,特定的网页之间是可以共享cookie中的数据。

2.LocalStorage和SessionStorage传值。

优点:本地静态文件可支持。在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。此方法类似cookie,将数据存在一个公共的地方,实现页面之间传值。

3.get方式,Url传值.。

优点: 速度快. cookie 和 LocalStorage和SessionStorage 都存在速度慢,反应不过来的问题, 我在a页面写进去,在b页面读出来.有时会读到空值。post提交表单跳转的方式肯定不行了,因服务端并不处理这些请求参数,连到达客户端的机会都没有。

4.window.open和window.opener之间传值

window.open可以打开一个新的页面,在新的页面中可以通过window.opener获取父页面的窗口对象,从而可以获取父窗口中的参数。

如:var content = window.opener.document.getElementById(“open”).innerHTML;

  • 15)如何在浏览器查看和清除localstrorage保存的数据?

1.按下F12打开开发人员工具
2.点击切换到 Application
3.点击LocalStorage即可查看到保存过的数据信息

  • 16)对H5新增的语义化标签的理解?

一、 语义化标签是什么?

常用的语义化标签包括

头部

导航栏

区块(有语义化的div)

主要区域

主要内容

侧边栏

底部

二、 为什么会用语义化标签?

平时,我们都会采用DIV+CSS布局我们的页面。但是这样的布局方式不仅使我们的文档结构不够清晰,而且不利于浏览器对页面的读取。所以HTML5新增了很多新的语义化标签。并且,在我们未给页面添加css样式时,用户体验并不好。语义化标签也能让浏览器更好的读取页面结构。再就是便于团队开发和维护,语义化更具可读性,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

css相关

  • 17)CSS选择器的优先级排序,怎么计算权值?

一、各个类型选择器的权重

* 第零等:!important,大过了其它任何设置。* 第一等:代表内联样式,如:style='',权值为1000。* 第二等:代表ID选择器,如:#content,权值为0100。* 第三等:代表类、伪类和属性选择器,如.content,权值为0010。* 第四等:代表标签选择器和伪元素选择器,如div p,权值为0001。* 第五等:通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。* 第六等:继承的样式没有权值,通配选择器定义的规则优先级高于元素继承过来的规则的优先级。

二、!important
!important的作用是提升优先级,换句话说,加了这句的样式的优先级是最高的(比内联样式的优先级还高)。
1
三、CSS优先级规则

* css选择器的权值不同时,权值高的选择器优先;* css选择器的权值相同时,后定义的选择器优先;* css属性后面加!important时,无条件绝对优先;* 总结:* !important > 行内样式 > id选择器 > 类选择器 || 伪类选择器 || 属性选择器 > 标签选择器 || 伪元素选择器 > 通配符选择器 || 子选择器 || 相邻选择器 > 继承样式

* 注意:
* !important规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其他对该元素的声明,无论它处在声明列表中的哪个位置。
* 但是注意,使用!important样式很难调试,因为它改变了你样式本来的权值规则。

四、权值如何进行比较

* 当两个权值进行比较时,从高位到低位逐位进行比较,从高等级开始比较。* 如果相同等级的权值相同,再继续进行下一个等级的比较。* 如果不相同,直接应用相同等级权值比较大的选择器对应的样式。而不是把四个等级的权值加起来进行比较。* 如果某个样式后面加了!important,则绝对优先,比内联样式更优先。同一个选择器,同一个属性设置了两次或多次样式,则后设置的样式会覆盖之前的样式

原文链接:https://blog.csdn.net/qq_39090575/article/details/110703916

  • 18)display:none和visibility:hidden的区别

很多人认为visibility: hidden和display: none的区别仅仅在于display: none隐藏后的元素不占据任何空间,而visibility: hidden隐藏后的元素空间依旧保留 ,实际上没那么简单,visibility是一个非常有故事性的属性

visibility具有继承性,给父元素设置visibility:hidden;子元素也会继承这个属性。但是如果重新给子元素设置visibility: visible,则子元素又会显示出来。这个和display: none有着质的区别 :父元素设置display:none; 子元素设置display:block;后子元素不会显示

visibility: hidden不会影响计数器的计数,visibility: hidden虽然让一个元素不见了,但是其计数器仍在运行。这和display: none完全不一样

  • 19)CSS的继承选择器,.one. two和.one > .two的区别?两个同级类选择器连着一起写有什么作用?(权值相加)

1、CSS的继承选择器,.one .two和.one>.two的区别?
.one .two,匹配.one下所有包含.two的标签,包含所有后代元素

.one>.two,匹配.one下子元素中包含.two的标签,只包含.one的子级元素

2、两个同级类选择器连着一起写有什么作用?(.one.two)
权值相加,匹配既包含.one又包含.two类名的标签

原文链接:https://blog.csdn.net/qq_39090575/article/details/113074619

  • 20)CSS的引用方式有哪些?它们的区别?

方式一:内联样式

内联样式也叫行内样式,指的是直接在HTML标签中的 style 属性中添加 css。

示例:

这种方式只能改变当前标签的样式,如果想要多个 div 标签拥有相同的样式,就只能重复的为每个 div 添加和修改相同的样式,还会使HTML代码变得冗长,并且难以维护。所以一般不推荐使用内联样式引入CSS样式。

方式二:嵌入样式

嵌入样式指的是在HTML头部中的 style 标签中写入CSS代码。

示例:

    .div {    width: 100px;    height: 100px;  }  

嵌入方式的 CSS 只对当前的网页有效,所以当多个页面需要引入相同的 CSS 样式时,这样写会导致代码冗余,也不利于维护。但是,因为 CSS 代码在HTML文件中,所以会使得代码比较集中,当我们写模板网页时,这样比较写比较好,因为可以让人一目了然地查看 HTML 结构和 CSS 样式。

方式三:链接样式

链接方式指的是使用HTML头部的标签引入外部的 CSS 文件。

示例:

  

链接方式是最常见也是最推荐的引入 CSS 的方式。使用这种方式,所有的 CSS 代码只存在于单独的 CSS 文件中,所以具有良好的可维护性,并且所有的 CSS 代码只存在于 CSS 文件中,CSS文件会在第一次加载时引入,以后切换页面时只需加载 HTML 文件即可,并且其他页面需要相同的 CSS 样式时可以复用。

方式四:导入样式

导入样式指的是使用 CSS 规则引入外部 CSS 文件。

示例;

  @import url(style.css);

或者

  @import url("index.css");

或者

  @import "index.css";

原文链接:https://blog.csdn.net/m0_48298027/article/details/110651878

  • 21)css有哪些选择符?可继承的属性有哪些?css3新增的伪元素有哪些?css优先级的计算

一、CSS 选择符:
1.id选择器(# myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p,span)
4.相邻选择器(h1 + p)
5.子选择器(ul > li,ol>li)
6.后代选择器(li a)
7.通配符选择器,也称全局选择器( * )
8.属性选择器(a[rel = “external”])
9.伪类选择器(a: hover, li:nth-child)

二、可继承的样式:
1.font-size
2.font-family
3.color
4.text-indent

三、不可继承的样式:
1.border
2.padding
3.margin
4.width
5.height

四、优先级算法:
1.优先级就近原则,同权重情况下样式定义最近者为准;
2.载入样式以最后载入的定位为准;
3.!important > 内联样式>id选择器>calss选择器>标签选择器和伪元素选择器>通配符、子选择器、相邻选择器等>继承的样式没有权值
4.important 比 内联优先级高,但内联比 id 要高

五、CSS3新增伪类举例:
p:first-of-type:选择属于其父元素的首个p元素的每个p元素。
p:last-of-type:选择属于其父元素的最后p元素的每个p元素。
p:only-of-type:选择属于其父元素唯一的p元素的每个p元素。
p:only-child:选择属于其父元素的唯一子元素的每个p元素。
p:nth-child(2):选择属于其父元素的第二个子元素的每个p元素。
:enabled: disabled 控制表单控件的禁用状态。
:checked: 单选框或复选框被选中。

  • 22)fixed和absolute的区别?

fixed:固定定位 absolute:绝对定位 两者都会使元素脱离文档流

区别很简单:

1、没有滚动条的情况下没有差异

2、在有滚动条的情况下,fixed定位不会随滚动条移动而移动,而absolute则会随滚动条移动

常用场合:

1.fixed固定定位,只针对浏览器窗口定位,上下左右,不会随着窗口大小改变,固定不变,例如固定位置的小广告,常用于网站边缘的公司联系方式和快速回到顶部

2.absolute绝对定位,脱离文档流,相对于有最近的具有相对定位的上级父元素或者祖宗元素定位,如果依次向上找没找到具有相对定位的上级元素,则相对于浏览器窗口定位

  • 23)如何实现水平、垂直居中?

1、利用定位+margin:auto
父级设置为相对定位,子级绝对定位 ,并且四个定位属性的值都设置了0,那么这时候如果子级没有设置宽高,则会和父元素宽高相同,完全覆盖

这里子元素设置了宽高,所以宽高会按照我们的设置来显示,但是实际上子级的虚拟占位已经撑满了整个父级,这时候再给它一个margin:auto它就可以上下左右都居中了

  .father{    width:500px;    height:300px;    border:1px solid #0a3b98;    position: relative;  }  .son{    width:100px;    height:40px;    background: #f0a238;    position: absolute;    top:0;    left:0;    right:0;    bottom:0;    margin:auto;  }  

2、利用定位+margin:负值

  .father {    position: relative;    width: 200px;    height: 200px;    background: skyblue;  }  .son {    position: absolute;    top: 50%;    left: 50%;    margin-left:-50px;    margin-top:-50px;    width: 100px;    height: 100px;    background: red;  }  

初始位置为方块1的位置
当设置left、top为50%的时候,内部子元素为方块2的位置
设置margin为负数时,使内部子元素到方块3的位置,即中间位置
这种方案不要求父元素的高度,也就是即使父元素的高度变化了,仍然可以保持在父元素的垂直居中位置,水平方向上是一样的操作

但是该方案需要知道子元素自身的宽高,但是我们可以通过下面transform属性进行移动

3、利用定位+transform
translate(-50%, -50%)将会将元素位移自己宽度和高度的-50%

这种方法其实和最上面被否定掉的margin负值用法一样,可以说是margin负值的替代方案,并不需要知道自身元素的宽高

  .father {    position: relative;    width: 200px;    height: 200px;    background: skyblue;  }  .son {    position: absolute;    top: 50%;    left: 50%; transform: translate(-50%,-50%);    width: 100px;    height: 100px;    background: red;  }  

4、table布局

  .father {    display: table-cell;    width: 200px;    height: 200px;    background: skyblue;    vertical-align: middle;    text-align: center;  }  .son {    display: inline-block;    width: 100px;    height: 100px;    background: red;  }  

5、flex布局

  .father {    display: flex;    justify-content: center;    align-items: center;    width: 200px;    height: 200px;    background: skyblue;  }  .son {    width: 100px;    height: 100px;    background: red;  }  

css3中了flex布局,可以非常简单实现垂直水平居中

这里可以简单看看flex布局的关键属性作用:

display: flex时,表示该容器内部的元素将按照flex进行布局

align-items: center表示这些元素将相对于本容器水平居中

justify-content: center也是同样的道理垂直居中

6、gird布局

  .father {      display: grid;      align-items:center;      justify-content: center;      width: 200px;      height: 200px;      background: skyblue;    }    .son {      width: 10px;      height: 10px;      border: 1px solid red    }  

  • 24)实现左侧边栏固定,其他内容自适应?

HTML

         Static Template                 

方案一:左侧固定宽度,右侧flex自适应 flex:1; 占据剩余空间

#box { width: 100%; height: 400px; display: flex;}#left { width: 100px; height: 100%; background-color: lightgreen;}#right { flex: 1; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案二:左侧浮动,右侧设置宽度100%,占据左侧普通流位置

#box { width: 100%; height: 400px; background-color: #aaaaaa;}#left { width: 100px; height: 100%; float: left; background-color: lightgreen;}#right { width: 100%; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案三:左侧固定宽度左浮动,右侧设margin-left等于左侧宽度

#box { width: 100%; height: 400px; background-color: #aaaaaa;}#left { width: 100px; height: 100%; background-color: lightgreen; float: left;}#right { width: calc(100% - 100px); margin-left: 100px; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案四:左侧固定宽度、固定定位,右侧宽度100%

#box { width: 100%; height: 400px; background-color: #aaaaaa; position: relative;}#left { width: 100px; height: 100%; background-color: lightgreen; position: absolute; top: 0; left: 0;}#right { width: 100%; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案五:左侧宽度固定、固定定位,右侧左边距等于左侧宽度:

#box { width: 100%; height: 400px; background-color: #aaaaaa; position: relative;}#left { width: 100px; height: 100%; background-color: lightgreen; position: absolute; top: 0; left: 0;}#right { width: calc(100% - 100px); margin-left: 100px; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案六:双左浮动,右侧计算属性计算宽度

#box { width: 100%; height: 400px; background-color: #aaaaaa;}#left { width: 100px; height: 100%; background-color: lightgreen; float: left;}#right { width: calc(100% - 100px); height: 100%; float: left; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案七:左侧左浮,右侧右浮动,右侧计算宽度:

#box { width: 100%; height: 400px; background-color: #aaaaaa;}/* #box::after { content: " "; display: block; clear: both;} */#left { width: 100px; height: 100%; background-color: lightgreen; float: left;}#right { width: calc(100% - 100px); float: right; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}

方案八:左侧固定宽度,display:inline-block,右侧右浮动,计算宽度

#box { width: 100%; height: 400px; background-color: #aaaaaa;}/* #box::after { content: " "; display: block; clear: both;} */#left { width: 100px; height: 100%; background-color: lightgreen; display: inline-block;}#right { width: calc(100% - 100px); float: right; height: 100%; background-color: lightblue;}#box2 { width: 500px; height: 500px; background-color: plum;}
  • 25)css3的新特性

二、选择器
css3中新增了一些选择器,主要为如下图所示:

三、新样式
边框
css3新增了三个边框属性,分别是:

border-radius:创建圆角边框

box-shadow:为元素添加阴影

border-image:使用图片来绘制边框

box-shadow

设置元素阴影,设置属性如下:

水平阴影

垂直阴影

模糊距离(虚实)

阴影尺寸(影子大小)

阴影颜色

内/外阴影

其中水平阴影和垂直阴影是必须设置的

背景
新增了几个关于背景的属性,分别是background-clip、background-origin、background-size和background-break

background-clip

用于确定背景画区,有以下几种可能的属性:

background-clip: border-box; 背景从border开始显示

background-clip: padding-box; 背景从padding开始显示

background-clip: content-box; 背景显content区域开始显示

background-clip: no-clip; 默认属性,等同于border-box

通常情况,背景都是覆盖整个元素的,利用这个属性可以设定背景颜色或图片的覆盖范围

background-origin

当我们设置背景图片时,图片是会以左上角对齐,但是是以border的左上角对齐还是以padding的左上角或者content的左上角对齐” />Document .box { width: 600px; height: 100px; display: table; } .left, .right { display: table-cell; } .left { background: yellowgreen; } .right { background: skyblue; }

float布局
特点:

元素”浮动”
脱离文档流
但不脱离文本流
对自身的影响: 形成”块”(BFC,具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素)、位置尽量靠上、位置尽量靠左(右),无法满足会靠下
对兄弟的影响: 上面贴非float元素、旁边贴float元素、不影响其它块级元素位置、影响其它块级元素内部文本

flexbox布局
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现;2009年,W3C 提出了一种新的方案—-Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性;任何一个容器都可以指定为Flex布局,行内元素也可以使用Flex布局; webkit内核的浏览器,必须加上-webkit-前缀。

弹性盒子
盒子本来就是并列的
指定宽度即可
水平竖直居中 flex 实现

         水平竖直居中布局解决方案-flex+justify-content     * {    margin: 0;    padding: 0;   }   #parent {    width: 100%;    height: 400px;    background: #ccc;    display: flex;    align-items: center;    justify-content: center;   }   #child {    width: 300px;    height: 200px;    background: #c9394a;   }                 

Grid布局
网格布局(Grid)是最强大的 CSS 布局方案。
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的CSS框架达到的效果,现在浏览器内置了;Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。Flex 布局是轴线布局,只能指定”项目”针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成”行”和”列”,产生单元格,然后指定”项目所在”的单元格,可以看作是二维布局。Grid 布局远比Flex布局强大。

         Document     .wrapper {    display: grid;    grid-template-columns: repeat(3, 1fr);    grid-gap: 10px;   }         One   Two   Three   Four   Five   

columns布局
CSS属性 columns 用来设置元素的列宽和列数。
例子

         Document     .content-box {    columns: 3 auto;   }      

JavaScript 框架 WHY VUE.JS?起步 GITHUB 易用 已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用! 灵活 不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸.JavaScript 框架 WHY VUE.JS?起步 GITHUB 易用 已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用! 灵活 不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸.JavaScript 框架 WHY VUE.JS?起步 GITHUB 易用 已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用! 灵活 不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸.JavaScript 框架 WHY VUE.JS?起步 GITHUB 易用 已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用! 灵活 不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸.JavaScript 框架 WHY VUE.JS?起步 GITHUB 易用 已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用! 灵活 不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸.

  • 27 用animation做过什么?做过哪些动画?

做走马灯原文链接:用animation制作走马灯 – 掘金

做3d魔方 本文链接:使用 C3 Animation 做一个3D魔方_Jaosncode的博客-CSDN博客

用animation做无缝匀速滚动 本文链接:用animation做无缝匀速滚动_是黄小仙呀的博客-CSDN博客_如何设置animation动画为匀速运动

做弹力球 本文链接:用动画(animation)做弹力球_lxhby520的博客-CSDN博客

使用animation制作进度条本文链接:使用animation制作进度条_乐之者java的博客-CSDN博客

  • 28 Sass写一个数组?

// 定义数组,数组元素用逗号隔开$liColor:#f5ad1b,#5f89ce,#94bf45,#da8ec5,#78bfc2,#bec278; // 开始 @each 循环遍历数组// $c 作为循环变量,代表了数组的元素,不是索引~!!!@each $c in $liColor{     $i:index($liColor,$c);        // 获取 $c 在数组中的索引,并赋值给 $i 赋值用冒号,不是等号~!     li:nth-child( #{$i} ){      // 经典的地方来了,SCSS 循环是从 1 开始,不是 0 哦~       background: $c;           // 背景色       &:hover{         background: lighten($c,10%);    // hover 后的颜色       }     }}
  • 29)rem出现很小的小数手机上会发生什么,

为了保证大部分分辨率下计算出的根字体大小都为整数,所以约定根字体大小的计算公式为:
分辨率宽度 / 10;

在iPhone6下,如果一个元素的宽和高都是1.75rem,其在浏览器内的渲染尺寸
应该是1.75 * 37.5 = 65.625px;

但真实渲染尺寸却是另外一种情况:

有的宽度是66px,有的却是65px,而且顺序上毫无规律。

如果浏览器统一做四舍五入处理,那么所有的色块尺寸也应该是一样的,不会出现部分向上取整,
部分向下取整。

设想:

浏览器在渲染时所做的舍入处理只是应用在元素的渲染尺寸上,其真实占据的空间依旧是原始大小。

也就是说如果一个元素尺寸是0.625px,那么其渲染尺寸应该是1px,空出的0.375px空间由
其临近的元素填充;

同样道理,如果一个元素尺寸是0.375px,其渲染尺寸就应该是0,但是其会占据
临近元素0.375px的空间。

  • 30 什么时候用less

  1. 函数式编程css
  2. 自定义变量用于整体主题调整
  3. 嵌套语法简化开发复杂度

页面层级结构多,重复使用的css代码较多时

  • 31 animation和transition

1.animation概念
可以用 name 设置动画的名称,用 duration 设置动画完成的周期,用 timing-function 设置动
画的速度曲线,delay 设置动画什么时候开始,iteration-count 设置动画播放的次数,direction 规定下一
个周期是否逆向的播放,play-state 动画是否正在进行或者暂停,fill-mode 设置动画停了之后位置什么状态

animation 属性是一个简写属性,用于设置六个动画属性:
animation-name 规定需要绑定到选择器的 keyframe 名称。
animation-duration 规定完成动画所花费的时间,以秒或毫秒计。
animation-timing-function 规定动画的速度曲线。
animation-delay 规定在动画开始之前的延迟。
animation-iteration-count 规定动画应该播放的次数。
animation-direction 规定是否应该轮流反向播放动画。

2.transition概念
用 property 去设置过渡效果的属性名称,duration 设置过渡效果的周期,timing-function 规
定速度效果的速度曲线,delay 设定过渡效果什么时候开始;

transition 属性是一个简写属性,用于设置四个过渡属性:
transition-property 规定设置过渡效果的 CSS 属性的名称。
transition-duration 规定完成过渡效果需要多少秒或毫秒。
transition-timing-function 规定速度效果的速度曲线。
transition-delay 定义过渡效果何时开始。

3.区别

1)transition 是过渡,是样式值的变化的过程,只有开始和结束;animation 其实也叫关键帧,通过和 keyframe 结合可以设置中间帧的一个状态;
2)animation 配合 @keyframe 可以不触发时间就触发这个过程,而 transition 需要通过 hover 或者 js 事件来配合触发;
3)animation 可以设置很多的属性,比如循环次数,动画结束的状态等等,transition 只能触发一次;
4)animation 可以结合 keyframe 设置每一帧,但是 transition 只有两帧;

transition可以实现简单的过渡动画效果,而animation可以实现更为复杂的动画效果

  • 32 移入图片让那个图片慢慢放大

DOM

            图片      

CSS

  body {    width: 100vw;    height: 100vh;    display: flex;    justify-content: center;    align-items: center;  }  .box {    width: 300px;    height: 300px;    border: 1px solid black;    position: relative;  }  .img {    width: 300px;    height: 300px;    background-color: red;    font-size: 24px;    line-height: 300px;    text-align: center;    position: absolute;    transform-origin: right center;    animation: animate 3s linear;/*使用动画*/  }  /*图片的运动动画*/  @keyframes animate {    from {      transform: scale(0);      left: -110%;    }    to {      transform: scale(1);      left: 0;    }  }

  • 33 盒子模型概念

盒模型的概念

盒模型是CSS布局的基石,规定了网页元素如何显示以及元素间相互关系。CSS定义所有的元素都可以拥有像盒子一样的外形和平面空间。即都包含内容区、补白(内填充)、边框、边界(外边距)这就是盒模型。

4、导入(导入样式) – 在head标签里,加一个style标签,再写@import url(),跟用link的方式差不多

    document      @import url(css/index.css);  

5、优先级

1、就近原则

2.理论上:内联>内嵌>外联>导入

3.实际上:内嵌、外联、导入在同一个文件头部,在CSS选择器权值相同的情况下,谁离相应的代码近,谁的优先级高

  • 35 px,em,rem,%,vm,vh

1.px

px就是像素,也是我们现在经常使用的基本单位,比如常常听到的电脑像素是1024×768的,表示的是水平方向是1024个像素点,垂直方向是768个像素点。

2.em

em参考物是父元素的font-size,默认字体大小是16px,所以1em不是固定值,因为它会继承父元素的字体大小

3.rem

rem参考物是相对于根元素,我们在使用时可以在根元素设置一个参考值即可,相对于em使用,减少很大运算工作量,例:html大小为10px,12rem就是120px

4.%

% 是相对于父元素的大小设定的比率,position:absolute;的元素是相对于已经定位的父元素,position:fixed;的元素是相对可视窗口

5、vw

css3新单位,viewpoint width的缩写,视窗宽度,1vw等于视窗宽度的1%。

举个例子:浏览器宽度1200px, 1 vw = 1200px/100 = 12 px。

再举个例子:浏览器宽度1200px, 1 vw = 1200px/100 = 12 px

6.vh

vm相对于视口的宽度。视口被均分为100单位

h1 {
font-size: 8vh;
}

再举个例子:浏览器高度900px, 1 vh = 900px/100 = 9 px

总结:

1.vw:1vw等于视口宽度的1%。
2.vh:1vh等于视口高度的1%。

  • 36 display的值和作用

1、display的值有:

none,inline,block,list-item,inline-block,table,inline-table,table-caption,table-cell,table-row,table-row-group,table-column,table-column-group,table-footer-group,table-header-group,run-in,box,inline-box,flexbox,inline-flexbox,flex,inline-flex

2、作用:

none: 表示隐藏对象,与visibility属性的hidden值不同,display:none不为被隐藏的对象保留物理空间 ,然visibility:hidden就保留

inline(默认值):表示指定对象为内联元素

block: 指定对象为块元素。

list-item: 指定对象为列表项目

inline-block: 指定对象为内联块元素。(这是CSS2中的属性)

table: 指定对象作为块元素级的表格。类同于html标签table(CSS2)

inline-table: 指定对象作为内联元素级的表格。类同于html标签table(CSS2)

table-caption: 指定对象作为表格标题。类同于html标签caption(CSS2)

table-cell: 指定对象作为表格单元格。类同于html标签td(CSS2)

table-row: 指定对象作为表格行。类同于html标签tr(CSS2)

table-row-group: 指定对象作为表格行组。类同于html标签tbody(CSS2)

table-column: 指定对象作为表格列。类同于html标签col(CSS2)

table-column-group: 指定对象作为表格列组显示。类同于html标签colgroup(CSS2)

table-header-group: 指定对象作为表格标题组。类同于html标签thead(CSS2)

table-footer-group: 指定对象作为表格脚注组。类同于html标签tfoot(CSS2)

run-in: 根据上下文决定对象是内联对象还是块级对象。(CSS3)

box: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

inline-box: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

flexbox: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

inline-flexbox: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

flex: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

inline-flex: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(CSS3)

  • 37列举两种清除浮动的方法(代码实现或者描述思路)

实例:

  HTML代码代码

    清除浮动      #parent{      border: 1px solid black;    }    #child{      width: 100px;      height: 100px;      background: red;      float: left;    }           

效果图—–未清除浮动

 当为子元素设置了浮动,如果不清除浮动,那么父元素将会出现高度塌陷的现象。所以当我们设置了浮动后,就要解决浮动带来的影响。下面就要我们介绍几种清除浮动的方法!

方法一:额外标签法

  给谁清除浮动,就在其后额外添加一个空白标签 ,给其设置clear:both。

  优点:通俗易懂,书写方便。

  缺点:添加许多无意义的标签,结构化比较差。

  clear:both:本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来 。

  css样式

#clear{  clear: both;}

 html代码

      

方法二:父元素添加overflow:hidden

  通过触发BFC方式,实现清除浮动

  优点:代码简洁

  缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素。

  css样式

#parent{  overflow: hidden;}

方法三:使用after伪元素清除浮动

  优点:符合闭合浮动思想,结构语义化正确。

  缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout。

  css样式

方法四:使用before和after双伪元素清除浮动

  优点:代码更简洁

  缺点:用zoom:1触发hasLayout.

  css样式

#parent:after,#parent:before{content: "";display: table;}#parent:after{  clear: both;}#parent{  *zoom: 1;}

方法五:为父元素设置高度

  缺点: 需要手动添加高度,如何后面的高度发生变化,还要再次修改高度,给后期的维护带来麻烦。

  优点: 简单粗暴直接有效,清除了浮动带来的影响。

  • 38 盒子模型(怪异模型)

标准盒子模型和怪异盒子模型(IE盒子模型)

在标准模式下,一个块的总宽度 = 内容的width + padding(左右) + border(左右) + margin(左右)

设置padding和border会将盒子撑大,在设置的宽高外产生

例如一个div:

div{    width:100px;    height:100px;    padding:20px;    border:2px solid #000;  }

在标准模式下:总宽度为100px;

在怪异模式下:总宽度为144px;

4.两种模式的转换(通过box-sizing)
box-sizing中比较常用的两个属性值为 content-box 和 border-box ,它可以改变盒子模型的解析计算模式,可以参考上面的代码案例。

当设置box-sizing:content-box时,采用标准模式进行计算,默认就是这种模式;
当设置box-sizing:border-box时,采用怪异模式进行计算

  • 39 谈谈fixed ,relative, absolute

.relative相对定位

相对定位:设置相对定位的盒子会相对它原来的位置,通过指定偏移,到达新的位置,但是原来的位置会被保留下来,且仍在标准文档流中,它对父级盒子和相邻的盒子都没有任何影响。

absolute 绝对定位

绝对定位:设置绝对定位的盒子会相对于距离最近的设置了相对定位的祖先元素进行定位,如果一直找不到具有相对定位的祖先元素,就相对于浏览器窗口定位,且会使元素脱离文档流。

fixed 固定定位

固定定位:设置了固定定位的盒子只会相对于浏览器窗口进行定位,也就是窗口中左上角的原点

  • 40 float和absolute有什么区别?

1》文字内容是否会被覆盖

float浮动,当元素通过float来脱离文档流时,虽然其他的元素会当其不存在,但其他元素的内容还是会把这个元素占的位置让出来。也就是该元素浮动在另外一个有文字内容的元素上时,文字内容并不会被浮动的元素覆盖,而是环绕在周围。如:

2》相对何处进行定位

当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。

设置绝对定位的盒子会相对于距离最近的设置了相对定位的祖先元素进行定位,且会使元素脱离文档流,如果一直找不到具有相对定位的祖先元素,就相对于浏览器窗口定位。

  • 41 代码实现3栏效果,左右两栏固定宽度,中间栏随着浏览器宽度自适应变化

1 flex布局

.layout.flexbox{ margin-top: 110px; } .layout.flexbox .left-center-right{ display: flex; } .layout.flexbox .left{ width: 300px; background: red; } .layout.flexbox .center{ flex:1; background: yellow; } .layout.flexbox .right{ width: 300px; background: blue; }

三栏布局

flexbox解决方案

1.这是三栏布局的felx解决方案; 2.这是三栏布局的flex解决方案;