前端开发常见细节问题

496 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

两个span之前的默认间距

(1)原因分析:内联元素在html中换行的同时会产生一个文本节点

(2)解决办法:将父元素的font-size设置为0;分别设置子元素的字体大小

图片底部空白间隙

详细分析文章:彻底搞定 vertical-align 垂直居中不起作用疑难杂症

(1)原因分析

图片后存在一个看不见的空白节点,这个特殊的空白节点与普通文节点一样,具有文字大小,行高

默认情况下,图片的对齐方式是以父级元素基线对齐,为了保持与基线对齐,图片底部必须留出间隙,大小为半倍文本间距,即(line-height - font-size) / 2,所以line-height 的值越大,间隙将越大

(2)解决办法

  • 将图片设置为 display:block
  • 将 vertical-align 设置为 top,bottom,或者 middle 等值
  • 将 line-height 设置为 0
  • 将 font-size 设置为 0
  • 将 img 设置浮动或者绝对定位

定位失效问题

absolute 绝对定位失效:绝对定位相对于最近的非 static 元素定位,如果不存在这样的元素时,会相对于根元素定位,造成定位失效

fixed定位失效:父元素有 transform 样式

BFC(块级格式化上下文)

描述:具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会影响外面的元素,外面的也不会影响里面的

独特特性:

  • 内部元素在垂直方向上一个接一个地排列
  • 两个盒子之间的垂直距离由 margin 值决定,会发生重叠(两个BFC,解决margin重叠的问题
  • 每一个盒子的左外边缘会挨着容器的左边缘,存在浮动也是如此
  • BFC 区域不会与 float 区域重叠,可以阻止元素被浮动元素覆盖(实现左边的宽度固定,右边的内容自适应布局
  • BFC 就是一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之也如此
  • 计算 BFC 的高度时,浮动元素也参与计算(清除浮动,解决浮动元素造成的父元素高度塌陷问题

触发条件:只要元素满足下面任一条件即可触发 BFC 特性

  • body 根元素
  • 浮动元素:float 除 none 以外的值
  • 绝对定位元素:position (absolute、fixed)
  • display 为 inline-block、table-cells、flex
  • overflow 除了 visible 以外的值 (hidden、auto、scroll)

水平垂直居中

  • flex 布局:justify-content: center;align-items: center;

  • absolute 绝对定位:position: absolute; top: 50%; left: 50%;

    • transform: translate(-50%, -50%);
    • width: 50px; height: 10px;margin-left: -25px;margin-top: -5px;
    • left: 0;top: 0;right: 0;bottom: 0;margin: auto;
  • grid 布局:

    • div.parent{ display:grid; } div.child{ margin:auto; }
    • div.parent {display: grid;} div.child {justify-self: center;align-self: center;}
  • table 布局:

    • div.parent {display: table;} div.child {display: table-cell;vertical-align: middle;text-align: center;}
  • 其他方式居中

    • 行内元素水平居中: text-align:center;
    • 块元素水平居中: margin:0 auto;
    • 单行文字垂直居中: height:12 px; line-height:12 px;
    • 文字相对图片、输入框垂直居中: vertical-align:middle;
    • 单行文本垂直居中: text-align + line-height

常用错误监控方式

  • try/catch:能捕获常规运行时错误,语法错误和异步错误不行
  • window.onerror:JS 运行时错误,不能捕获资源错误
  • window.addEventListener('error'):捕获资源(如图片或脚本)加载失败的错误
  • window.addEventListener("unhandledrejection"):全局捕获Promise中的错误
  • vue错误:errorHandler,errorCaptured
  • 重写console.error,具体可看搭建前端监控系统

参考文档:一篇讲透自研的前端错误监控