前端基础

HTTP/HTML/浏览器

  1. http 和 https
        https 的 SSL 加密是在传输层实现的。
    (1)http 和 https 的基本概念
    http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传 输协议,它可以使浏览器更加高效,使网络传输减少。
    https: 是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
    https 协议的主要作用是:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。
    https 协议的缺点: https 握手阶段比较费时,会使页面加载时间延长 50%,增加 10%~20%的耗电。 https 缓存不如 http 高效,会增加数据开销。 SSL 证书也需要钱,功能越强大的证书费用越高。 SSL 证书需要绑定 IP,不能再同一个 ip 上绑定多个域名,ipv4 资源支持不了这种消耗。
  2. tcp三次握手
    三次握手图
      从图片可以得到三次握手可以简化为:C 发起请求连接 S 确认,S也发起连接 C 确认我们 再看看每次握手的作用:第一次握手:S 只可以确认 自己可以接受 C 发送的报文段第 二次握手:C 可以确认 S 收到了自己发送的报文段,并且可以确认 自己可以接受 S 发 送的报文段第三次握手:S 可以确认 C 收到了自己发送的报文段
  3. TCP 和 UDP 的区别
    (1)TCP 是面向连接的,udp 是无连接的即发送数据前不需要先建立链接。
    (2)TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失, 不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付。 并且因为 tcp 可靠, 面向连接,不会丢失数据因此适合大数据量的交换。
    (3)TCP 是面向字节流,UDP 面向报文,并且网络出现拥塞不会使得发送速率降低(因 此会出现丢包,对实时的应用比如 IP 电话和视频会议等)。
    (4)TCP 只能是 1 对 1 的,UDP 支持 1 对 1,1 对多。 m
    (5)TCP 的首部较大为 20 字节,而 UDP 只有 8 字节。 (6)TCP 是面向连接的可靠性传输,而 UDP 是不可靠的。
  4. HTTP 请求的方式,HEAD 方式
    head:类似于 get 请求,只不过返回的响应中没有具体的内容,用户获取报头 options:允许客户端查看服务器的性能,比如说服务器支持的请求方式等等。
  5. 一个图片 url 访问后直接下载怎样实现?
    请求的返回头里面,用于浏览器解析的重要参数就是 OSS 的 API 文档里面的返回 http 头,决定用户下载行为的参数。

    下载的情况下:
    1) x-oss-object-type: Normal
    2) x-oss-request-id: 598D5ED34F29D01FE2925F41
    3) x-oss-storage-class: Standard

  6. web Quality(无障碍)
    能够被残障人士使用的网站才能称得上一个易用的(易访问的)网站。 残障人士指的是那些带有残疾或者身体不健康的用户。 使用 alt 属性: < img src=”person.jpg” alt=”this is a person”/ > 有时候浏览器会无法显示图像。具体的原因有: 用户关闭了图像显示 浏览器是不支持图形显示的迷你浏览器 浏览器是语音浏览器(供盲人和弱视人群使用) 如果您使用了 alt 属性,那么浏览器至少可以显示或读出有关图像的描述。

  7. 实用的 BOM 属性对象方法?
    什么是 Bom? Bom 是浏览器对象。有哪些常用的 Bom 属性呢?
    (1)location 对象
    location.href— 返回或设置当前文档的 URL
    location.search — 返回 URL 中的查询字符串部分。
    例 如 http://www.dreamdu.com/dreamdu.php?id=5&name=dreamdu 返回包括(?)后面的内 容?id=5&name=dreamdu
    location.hash — 返回 URL#后面的内容,如果没有#,返回空
    location.host — 返回 URL 中的域名部分,例如 www.dreamdu.com location.hostname — 返回 URL 中的主域名部分,例如 dreamdu.com location.pathname — 返回 URL 的域名后的部分。例如 http://www.dreamdu.com/xhtml/ 返 回/xhtml/
    location.port — 返回 URL 中的端口部分。例如 http://www.dreamdu.com:8080/xhtml/ 返回 8080
    location.protocol — 返回 URL 中的协议部分。
    例如 http://www.dreamdu.com:8080/xhtml/ 返 回(//)前面的内容 http: location.assign — 设置当前文档的 URL
    location.replace() — 设置当前文档的 URL,并且在 history 对象的地址列表中移除这个 URL
    location.replace(url);
    location.reload() — 重载当前页面
    (2)history 对象
    history.go() — 前进或后退指定的页面数 history.go(num);
    history.back() — 后退一页
    history.forward() — 前进一页
    (3)Navigator 对象
    navigator.userAgent — 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字 符串)
    navigator.cookieEnabled — 返回浏览器是否支持(启用)cookie
  8. HTML5 drag api
    dragstart:事件主体是被拖放元素,在开始拖放被拖放元素时触发,。
    darg:事件主体是被拖放元素,在正在拖放被拖放元素时触发。
    dragenter:事件主体是目标元素,在被拖放元素进入某元素时触发。
    dragover:事件主体是目标元素,在被拖放在某元素内移动时触发。
    dragleave:事件主体是目标元素,在被拖放元素移出目标元素是触发。
    drop:事件主体是目标元素,在目标元素完全接受被拖放元素时触发。
    dragend:事件主体是被拖放元素,在整个拖放操作结束时触发
  9. http2.0
      提升访问速度(可以对于,请求资源所需时间更少,访问速度更快,相比 http1.0) 允许多路复用:多路复用允许同时通过单一的 HTTP/2 连接发送多重请求-响应信息。改 善了:在 http1.1 中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限 制(连接数量),超过限制会被阻塞。
    二进制分帧:HTTP2.0 会将所有的传输信息分割为更小的信息或者帧,并对他们进行二 进制编码 首部压缩 服务器端推送
  10. 400 和 401、403 状态码
    (1)400 状态码:请求无效
    产生原因:
    前端提交数据的字段名称和字段类型与后台的实体没有保持一致 前端提交到后台的数据应该是 json字符串类型,但是前端没有将对象 JSON.stringify 转 化成字符串。
    解决方法: 对照字段的名称,保持一致性 将 obj 对象通过 JSON.stringify 实现序列化
    (2)401 状态码:当前请求需要用户验证
    (3)403 状态码:服务器已经得到请求,但是拒绝执行
    (4)404状态码是一种HTTP(超文本传输协议)状态码,表示客户端请求的资源在服务器上未找到
  11. fetch 发送 2 次请求的原因
      fetch 发送 post 请求的时候,总是发送 2 次,第一次状态码是 204,第二次才成功? 原因很简单,因为你用 fetch 的 post 请求的时候,导致 fetch 第一次发送了一个Options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的 请求。
  12. Cookie、sessionStorage、localStorage 的区别
    共同点:都是保存在浏览器端,并且是同源的
    Cookie:cookie 数据始终在同源的 http 请求中携带(即使不需要),即 cookie 在浏览器 和服务器间来回传递。而 sessionStorage 和 localStorage 不会自动把数据发给服务器,仅 在本地保存。cookie 数据还有路径(path)的概念,可以限制 cookie 只属于某个路径下, 存储的大小很小只有4K 左右。 (key:可以在浏览器和服务器端来回传递,存储容量 小,只有大约 4K 左右
    sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持,localStorage: 始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie 只在设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭。(key:本身就是一个回话过程,关 闭浏览器后消失,session 为一个回话,当页面不同即使是同一页面打开两次,也被视为 同一次回话
    localStorage:localStorage 在所有同源窗口中都是共享的
    cookie 也是在所有同源窗口中 都是共享的。(key:同源窗口都会共享,并且不会失效,不管窗口或者浏览器关闭与 否都会始终生效)
    补充说明一下 cookie 的作用: 保存用户登录状态。例如将用户 id 存储于一个 cookie 内,这样当用户下次访问该页面 时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie 还可以设置 过期时间,当超过时间期限后,cookie 就会自动消失。因此,系统往往可以提示用户保 持登录状态的时间:常见选项有一个月、三个 月、一年等。 跟踪用户行为。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。 如果每次都需要选择所在地是烦琐的,当利用了 cookie 后就会显得很人性化了,系统能 够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区 的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便定制页面。如果网站提供了换肤或更换布局的功能,那么可以使 用 cookie 来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以 保存上一次访问的界面风格。
  13. Doctype 作用?严格模式与混杂模式如何区分?它们有何意义?
      Doctype 声明于文档最前面,告诉浏览器以何种方式来渲染页面,这里有两种模式,严 格模式和混杂模式。 严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。 混杂模式,向后兼容,模拟老式浏览器,防止浏览器无法兼容页面
  14. Cookie 如何防范 XSS 攻击
      XSS(跨站脚本攻击)是指攻击者在返回的 HTML 中嵌入 javascript 脚本,为了减轻这些 攻击,需要在 HTTP 头部配上,
    set-cookie:
    httponly-这个属性可以防止 XSS,它会禁止 javascript 脚本来访问 cookie。 secure- 这个属性告诉浏览器仅在请求为 https 的时候发送 cookie。 结果应该是这样的:Set-Cookie=< cookie-value >
  15. click 在 ios 上有 300ms 延迟,原因及如何解决?
    (1)粗暴型,禁用缩放
    (2)利用 FastClick,其原理是: 检测到 touchend 事件后,立刻出发模拟 click 事件,并且把浏览器 300 毫秒之后真正出 发的事件给阻断掉
  16. addEventListener 参数
    addEventListener(event, function, useCapture)
    其中,event 指定事件名;function 指定要事件触发时执行的函数;useCapture 指定事件 是否在捕获或冒泡阶段执行。
  17. 强缓存、协商缓存什么时候用哪个
      因为服务器上的资源不是一直固定不变的,大多数情况下它会更新,这个时候如果我们 还访问本地缓存,那么对用户来说,那就相当于资源没有更新,用户看到的还是旧的资 源;所以我们希望服务器上的资源更新了浏览器就请求新的资源,没有更新就使用本地 的缓存,以最大程度的减少因网络请求而产生的资源浪费。
  18. 前端优化
    降低请求量:合并资源,减少 HTTP 请求数,minify / gzip 压缩,webP,lazyLoad。
    加快请求速度:预解析 DNS,减少域名数,并行加载,CDN 分发。
    缓存:HTTP 协议缓存请求,离线缓存 manifest,离线数据缓存 localStorage。
    渲染:JS/CSS 优化,加载顺序,服务端渲染,pipeline。
  19. HTTP 支持的方法
    GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE,
  20. 如何画一个三角形
    三角形原理:边框的均分原理
1
2
3
4
5
6
7
div {
width:0px;
height:0px;
border-top:10px solid red;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
border-left:10px solid transparent; }
  1. HTML5 新增的元素
      首先 html5 为了更好的实践 web 语义化,增加了 header,footer,nav,aside,section 等语义 化标签,在表单方面,为了增强表单,为 input 增加了 color,emial,data ,range 等类型, 在存储方面,提供了 sessionStorage,localStorage,和离线存储,通过这些存储方式方便数 据在客户端的存储和获取,在多媒体方面规定了音频和视频元素 audiovedio,另外还 有地理定位canvas 画布拖放多线程编程的 web workerwebsocket协议。
  2. Cookie 和 Session 的认知,Cookie 有哪些限制?
    1) cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
    2) cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session。
    3) session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 COOKIE。
    4) 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

CSS

  1. css 盒模型
    简介:就是用来装页面上的元素的矩形区域。CSS 中的盒子模型包括 IE 盒子模型和标 准的 W3C 盒子模型。
    box-sizing(有 3 个值哦):border-box,padding-box,content-box. 标准盒子模型
    W3C盒子模型
    IE盒子模型
    区别:从图中我们可以看出,这两种盒子模型最主要的区别就是width 的包含范围,在 标准的盒子模型中,width 指 content 部分的宽度,在 IE 盒子模型中,width 表示 content+padding+border 这三个部分的宽度,故这使得在计算整个盒子的宽度时存在着差 异:
    标准盒子模型的盒子宽度:左右 border+左右 padding+width
    IE 盒子模型的盒子宽度:width
    在 CSS3 中引入了 box-sizing 属性,box-sizing:content-box;表示标准的盒子模型box-sizing:border-box 表示的是 IE 盒子模型
      最后,前面我们还提到了,box-sizing:padding-box,这个属性值的宽度包含了左右 padding+width 也很好理解性记忆,包含什么,width 就从什么开始算起。
  2. 画一条 0.5px 的线
    采用 meta viewport 的方式
    < meta name=”viewport” content=”initial-scale=1.0, maximum-scale=1.0, user-scalable=no” / >
    采用 border-image 的方式
    采用 < div style=”height: 1px; border-top: 0.5px solid red;”>< /div >
    采用 transform: scaleY(0.5);的方式
  3. link 标签和 import 标签的区别
    link 属于 html 标签,而@import 是 css 提供的 页面被加载时,link 会同时被加载,而@import 引用的 css 会等到页面加载结束后加载
    link 是 html 标签,因此没有兼容性,而@import 只有 IE5 以上才能识别。 link 方式样式的权重高于@import 的
  4. Flex 布局
    Flex 是 Flexible Box 的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性。它 对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 简单的分为容器属性和元素属性
    容器的属性:
    flex-direction:决定主轴的方向(即子 item 的排列方法)
    .box { flex-direction: row | row-reverse | column | column-reverse;
    }
    flex-wrap:决定换行规则
    .box{ flex-wrap: nowrap | wrap | wrap-reverse; }
    flex-flow
    .box { flex-flow: < flex-direction> || < flex-wrap>; }justify-content:对其方式,水平主轴对齐方式
    align-items:对齐方式,竖直轴线方向
    项目的属性(元素的属性):
    order 属性:定义项目的排列顺序,顺序越小,排列越靠前,默认为 0 flex-grow 属性:定义项目的放大比例,即使存在空间,也不会放大
    flex-shrink 属性:定义了项目的缩小比例,当空间不足的情况下会等比例的缩小,如果 定义个 item 的 flow-shrink 为 0,则为不缩小
    flex-basis 属性:定义了在分配多余的空间,项目占据的空间。
    flex:是 flex-grow 和 flex-shrink、flex-basis 的简写,默认值为 0 1 auto。
    align-self:允许单个项目与其他项目不一样的对齐方式,可以覆盖 align-items,默认属 性为 auto,表示继承父元素的 align-items 比如说,用 flex 实现圣杯布局
  5. BFC(块级格式化上下文,用于清楚浮动,防止 margin 重叠等)
      直译成:块级格式化上下文,是一个独立的渲染区域,并且有一定的布局规则。 BFC 区域不会与 float box 重叠
    BFC 是页面上的一个独立容器,子元素不会影响到外面
    计算 BFC 的高度时,浮动元素也会参与计算 那些元素会生成 BFC:
    根元素
    float 不为 none 的元素
    position 为 fixed 和 absolute 的元素
    display 为 inline-block、table-cell、table-caption,flex,inline-flex 的元素
    overflow 不为 visible 的元素
  6. 垂直居中的方法
    1) margin:auto 法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     div{ 
    width: 400px; height: 400px;
    position: relative;
    border: 1px solid #465468;
    }
    img{
    position: absolute;
    margin: auto; top: 0;
    left: 0; right: 0;
    bottom: 0;
    }
    < div>
    < img src="mm.jpg">
    < /div> 定位为上下左右为 0,margin:0 可以实现脱离文档流的居中
    2)margin 负值法
    .container{
    width: 500px; height: 400px;
    border: 2px solid #379;
    position: relative;
    }
    .inner{ 
     width: 480px; 
     height: 380px; 
     background-color: #746; 
     position: absolute; 
     top: 50%; left: 50%;
      margin-top: -190px; /*height 的一半*/ 
      margin-left: -240px; /*width 的一半*/ }
    
    补充:其实这里也可以将 marin-top 和 margin-left 负值替换成, transform:translateX(-50%)和 transform:translateY(-50%)
    3)table-cell(未脱离文档流的) 设置父元素的 display:table-cell,并且 vertical-align:middle,这样子元素可以实现垂直居中。 css: div{ width: 300px; height: 300px; border: 3px solid #555; display: table-cell; vertical-align: middle; text-align: center; }img{ vertical-align: middle; }
    4)利用 flex 将父元素设置为 display:flex,并且设置 align-items:center;justify-content:center;
    1css: 2.container{ 3width: 300px; 4height: 200px; 5border: 3px solid #546461; 6display: -webkit-flex; 7display: flex; 8-webkit-align-items: center; 9align-items: center; 10-webkit-justify-content: center; 11justify-content: center; 12} 13.inner{ 14border: 3px solid #458761; 15padding: 20px; 16}
  7. 使用CSS实现硬币翻转效果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
      /* 硬币容器样式 */
    .coin {
    width: 100px;
    height: 100px;
    perspective: 1000px; /* 透视距离 */
    }

    /* 硬币正面样式 */
    .front {
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: gold;
    }

    /* 硬币背面样式 */
    .back {
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: silver;
    transform: rotateY(180deg); /* 初始为反面朝上 */
    }

    /* 动画效果 */
    .coin:hover .front {
    animation: flip-coin 0.8s forwards;
    }

    @keyframes flip-coin {
    0% {
    transform: rotateY(0);
    }
    50% {
    transform: rotateY(-90deg);
    }
    100% {
    transform: rotateY(-180deg);
    }
    }

    .coin:hover .back {
    animation: flip-coin-back 0.8s forwards;
    }

    @keyframes flip-coin-back {
    0% {
    transform: rotateY(-180deg);
    }
    50% {
    transform: rotateY(-90deg);
    }
    100% {
    transform: rotateY(0);
    }
    }

    通过定义两个 @keyframes 规则分别 表示正面翻转和背面翻转的动画,使用 transform: rotateY() 来实现翻转的效果。
    需要注意的是,在动画效果中,我们使用了 forwards 关键字,使得动画结束后保持最终状态。此外,为了避免鼠标快速移动时动画效果重复触发,我们可以使用 transition-delay 属性为鼠标悬停状态添加一个延迟效果。

    1
    2
    3
    4
    5
    <div class="coin">
    <div class="front"></div>
    <div class="back"></div>
    </div>

  8. em、deg和px都是在前端开发中常用的单位
    它们之间的区别如下:
    1) px(像素)是一个绝对单位,它在所有设备上的显示效果相同。例如,10px 的文本在所有设备上看起来都是一样大小的。
    2) em 是一个相对单位,它基于当前元素的字体大小进行计算。例如,如果一个元素的字体大小为16px,那么 1em 就等于16px。如果在一个元素内部设置字体大小为 0.5em,那么它的大小将会是当前元素字体大小的一半。
    因此,em 和 px 的主要区别在于它们的大小计算方式不同。px 是一个绝对单位,而 em 是一个相对单位。在设置文本大小时,使用 em 可以让你的文本大小根据父元素的大小进行缩放,而不是在不同的设备上显示不同的大小。
    1) deg是一个角度单位,用于表示旋转角度。在CSS中,它通常用于设置CSS3的旋转属性,如transform: rotate(45deg)

  9. 画一个3D正方形
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <style>
    .wrapper {
    width: 50%;
    float: left;
    }

    .cube {
    font-size: 4em;
    width: 2em;
    margin: 1.5em auto;
    transform-style: preserve-3d;
    transform: rotateX(-30deg) rotateY(32deg);
    }

    .side {
    position: absolute;
    width: 2em;
    height: 2em;
    background: rgba(255, 99, 71, 0.6);
    border: 1px solid rgba(0, 0, 0, 0.5);
    color: white;
    text-align: center;
    line-height: 2em;
    }

    .front {
    transform: translateZ(1em);
    }

    .bottom {
    transform: rotateX(-90deg) translateZ(1em);
    }

    .top {
    transform: rotateX(90deg) translateZ(1em);
    }

    .left {
    transform: rotateY(-90deg) translateZ(1em);
    }

    .right {
    transform: rotateY(90deg) translateZ(1em);
    }

    .back {
    transform: translateZ(-1em);
    }
    </style>
    </head>

    <body>
    <div class="wrapper w1">
    <div class="cube">
    <div class="side front">1</div>
    <div class="side back">6</div>
    <div class="side right">4</div>
    <div class="side left">3</div>
    <div class="side top">5</div>
    <div class="side bottom">2</div>
    </div>
    </div>
    <div class="wrapper w2">
    <div class="cube">
    <div class="side front">1</div>
    <div class="side back">6</div>
    <div class="side right">4</div>
    <div class="side left">3</div>
    <div class="side top">5</div>
    <div class="side bottom">2</div>
    </div>
    </div>
    </body>
  10. calc 属性
    Calc 用户动态计算长度值,任何长度值都可以使用 calc()函数计算,需要注意的是,运 算符前后都需要保留一个空格,例如:width: calc(100% - 10px);
  11. 隐藏页面中某个元素的方法
    display:none; visibility:hidden; opacity: 0; position 移到外部,z-index 涂层遮盖等等
    1) visibility:hidden,该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已 经绑定的事件
    2) display:none,把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元 素删除掉
  12. line-height 和 height 的区别
    line-height 一般是指布局里面一段文字上下行之间的高度,是针对字体来设置的,height 一般是指容器的整体高度。
  13. 相对布局和绝对布局,position:relative 和 obsolute。
    相对定位 relative:
    如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直 或水平位置,``。 在使用相对定位时,无论是 否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。
    绝对定位 absolute:
    绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于。absolute 定位使元素的位置与文档流无关,因此不占据空间。 absolute 定位的元素和其他元素重叠。
  14. css 布局
    六种布局方式总结:
    圣杯布局、双飞翼布局、Flex 布局、绝对定位布局、表格布局、网 格布局
    圣杯布局是指布局从上到下分为 header、container、footer,然后 container 部分定为三栏 布局。这种布局方式同样分为 header、container、footer。
    圣杯布局的缺陷在于 center 是 在 container 的 padding 中的,因此宽度小的时候会出现混乱。
    双飞翼布局给 center 部分包裹了一个 main 通过设置 margin 主动地把页面撑开。
    Flex 布局是由 CSS3 提供的一种方便的布局方式。
    绝对定位布局是给 container 设置 position: relative 和 overflow: hidden,因为绝对定位的元 素的参照物为第一个 postion 不为 static 的祖先元素。 left 向左浮动,right 向右浮动。 center 使用绝对定位,通过设置 left 和 right 并把两边撑开。 center 设置 top: 0 和 bottom: 0 使其高度撑开。 表格布局的好处是能使三栏的高度统一。 网格布局可能是最强大的布局方式了,使用起来极其方便,但目前而言,兼容性并不好。 网格布局,可以将页面分割成多个区域,或者用来定义内部元素的大小,位置,图层关 系
  15. css 预处理器有什么
    less,sass 等

javaScript

  1. 闭包
    一句话可以概括:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用, 子函数所在的父函数的作用域不会被释放。
  2. 图片的懒加载和预加载
    预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。 懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。 两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。 懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力
  3. JS 实现跨域
    JSONP:通过动态创建 script,再请求一个带参网址实现跨域通信。document.domain + iframe
    跨域:两个页面都通过 js 强制设置 document.domain 为基础主域,就实现了同域。
    location.hash + iframe 跨域:a 欲与 b 跨域相互通信,通过中间页 c 来实现。 三个页面, 不同域之间利用 iframe 的 location.hash 传值,相同域之间直接 js 访问来通信。 window.name + iframe跨域:通过iframe的src属性由外域转向本地域,跨域数据即由iframe 的 window.name 从外域传递到本地域。 postMessage 跨域:可以跨域操作的 window 属性之一。 CORS:服务端设置 Access-Control-Allow-Origin 即可,前端无须设置,若要带 cookie 请 求,前后端都需要设置。 代理跨域:启一个代理服务器,实现数据的转发
  4. JS 基本数据类型
    基本数据类型:undefined、null、number、boolean、string、symbol
  5. 跨域的原理
    跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览 器对 JavaScript 实施的安全限制,那么只要协议、域名、端口有任何一个不同,都被当 作是不同的域。跨域原理,即是通过各种方式,避开浏览器的安全限制。
  6. 写一个函数,第一秒打印 1,第二秒打印 2
    两个方法,第一个是用 let 块级作用域
    for(let i=0;i<5;i++){
    setTimeout(function(){
    console.log(i)
    },1000*i)
    }
    第二个方法闭包
    for(var i=0;i<5;i++){
    (function(i){
     setTimeout(function(){
    
    console.log(i)
    },1000*i) })(i)
    }

前端核心

服务端编程

Ajax

移动Web端

前端进阶

前端工程化

Vue框架

React框架

Angular框架