CSS
1、Flex 布局
Flex 是 Flexible Box 的缩写,意为 ” 弹性布局 ”,用来为盒状模型提供最大的灵活性。
采纳 Flex 布局的元素,称为 Flex 容器(flex container),简称 ” 容器 ”。它的所有子元素主动成为容器成员,称为 Flex 我的项目(flex item),简称 ” 我的项目 ”。
flex 属性是 flex-grow, flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto。
flex-grow 属性定义我的项目的放大比例,默认为 0,即如果存在残余空间,也不放大。
flex-shrink 属性定义了我的项目的放大比例,默认为 1,即如果空间有余,该我的项目将放大。
flex-basis 属性定义了在调配多余空间之前,我的项目占据的主轴空间(main size)。浏览器依据这个属性,计算主轴是否有多余空间。它的默认值为 auto,即我的项目的原本大小。
应用 Flex 时,比应用 inline-block 和 float 时重排更快,在布局时优先思考 Flex。
2、css 革除浮动
浮动:浮动使元素脱离文档流,可设置文字盘绕,但会导致父元素的高度塌陷。
clear 属性
- 追加元素并设置 clear 属性
clear: both; -
应用 CSS 款式插入伪元素
.clearfix::after { content: ""; display: block; clear: both; }
创立父级 BFC
- 父元素设置 overflow: hidden;
- 父元素浮动(float)
- 父元素 display: inline-block;
给父元素设置高度
3、选择器优先级
!important > 行内款式 > #id > .class > tag > * > 继承 > 默认
CSS 选择器 从右往左
解析,举荐应用 BEM
命名
4、BFC
BFC 块级格式化上下文 (Block Formatting Context),是一个独立的渲染区域,让处于 BFC 外部的元素与内部的元素互相隔离,使内外元素的定位不会相互影响。
触发条件
- 根元素或其它蕴含它的元素
- 浮动元素 (元素的 float 不是 none)
- 相对定位元素 (元素具备 position 为 absolute 或 fixed)
- 内联块 (元素具备 display: inline-block)
- 表格单元格 (元素具备 display: table-cell,HTML 表格单元格默认属性)
- 表格题目 (元素具备 display: table-caption, HTML 表格题目默认属性)
- 具备 overflow 且值不是 visible 的块元素
- 弹性盒(flex 或 inline-flex)
- display: flow-root
-
column-span: all
规定
- 属于同一个 BFC 的两个相邻 Box 垂直排列
- 属于同一个 BFC 的两个相邻 Box 的 margin 会产生重叠
- BFC 中子元素的 margin box 的右边,与蕴含块 (BFC) border box 的右边相接触 (子元素 absolute 除外)
- BFC 的区域不会与 float 的元素区域重叠
- 计算 BFC 的高度时,浮动子元素也参加计算
- 文字层不会被浮动层笼罩,盘绕于四周
利用
- 阻止 margin 重叠
- 能够蕴含浮动元素 —— 革除外部浮动(革除浮动的原理是两个 div 都位于同一个 BFC 区域之中)
- 自适应两栏布局
-
能够阻止元素被浮动元素笼罩
5、盒模型
规范盒模型 (content-box) 和 IE 盒模型(border-box)。
规范盒模型
浏览器默认模型,即 box-sizing: content-box;
width = content-width
height = content-heightIE 盒模型
box-sizing: border-box;
width = content-width + padding-width + border-width
height = content-height + padding-height + border-heightoffsetWidth
返回元素的宽度(包含元素宽度、内边距和边框,不包含外边距)
offsetWidth = content-width + padding-width + border-widthclientWidth
元素的外部宽度(包含元素宽度、内边距,不包含边框和外边距)
clientWidth = content-width + padding-width
clientWidth 用于获取 dom 元素在浏览器的理论占用文档的宽度6、布局
实现左右两边固定宽度,两头自适应的布局的几种办法
7、利用 html css 编写款式,div 垂直 body 居中、div 内的 text 垂直居中,div 高度等于 body 宽度的一半
<body> <div> 垂直居中 </div> </body> 办法一:body { position: relative; height: 100vh; } div { position: absolute; top: 50%; width: 100%; height: 0; padding: 25% 0; transform: translateY(-50%); text-align: center; background: green; } 办法二:body {height: 100vh;} body, div { display: flex; align-items: center; } div { width: 100%; padding: 25% 0; text-align: center; background: green; }
8、文本溢出省略成果
/* 超出一行用省略号显示 */ .title{ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 超出 2 行用省略号显示 */ .title{ overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; text-overflow: ellipsis; }
9、1 像素问题
应用 css3 的 scaleY(0.5) 来解决
eg:div 的 border-top 的 1px 问题解决。.border-top-1px {position: relative;} .border-top-1px::before { content: ""; display: block; position: absolute; left: 0; top: 0; right: 0; transform-origin: 0 top; border-top: 1px solid #ccc; } @media (min-resolution: 2dppx) { .border-top-1px::before {transform: scaleY(.5); } } @media (min-resolution: 3dppx) { .border-top-1px::before {transform: scaleY(.333); } }
JS
1、跨域问题
跨域指浏览器不能执行其余网站的脚本。跨域是浏览器的同源策略限度造成的,是浏览器对 js 施加的平安限度。(同源策略限度)
同源指域名、协定、端口均雷同。JSONP: 利用 <script> 标签不受跨域限度的特点,毛病是只能反对 get 申请
function jsonp(url, jsonpCallback, success) {const script = document.createElement('script'); script.src = url; script.async = true; script.type = 'text/javascript'; window[jsonpCallback] = function(data) {success && success(data); } document.body.appendChild(script); }
JSONP 跨域的基本原理:因为 script 标签不受浏览器同源策略的影响,容许跨域援用资源。因而,通过动态创建 script 标签,而后利用 src 属性进行跨域。
设置 CORS:
Access-Control-Allow-Origin:* // CORS(跨域资源共享): 服务端设置 Access-Control-Allow-Origin
postMessage
window.postMessage() 是 HTML5 的一个 API,专一实现不同窗口不同页面的跨域通信。
2、什么是事件委托 / 事件代理
事件委托就是利用事件冒泡,只指定一个事件处理程序,就能够治理某一类型的所有事件。
事件捕捉(event capturing):当鼠标点击或者触发 dom 事件时(被触发 dom 事件的这个元素被叫作事件源),浏览器会从根节点到事件源(由外到内)进行事件流传。
事件冒泡(dubbed bubbling):事件冒泡刚好相同,事件源到根节点(由内到外)进行事件流传。
DOM 规范事件流的触发的先后顺序为:先捕捉再冒泡,即当触发 DOM 事件时,会先进行事件捕捉,捕捉到事件源之后通过事件流传进行事件冒泡。
element.addEventListener(event, function, useCapture);
将多个子元素上雷同的事件增加到父元素上,eg: 将 li 的事件代理到 ul 上。
3、JS 开发技巧
格式化金钱
formatRMB(num) {return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
最快捷的数组求最大值
const arr = [1,5,1,7,5,9];
Math.max(...arr) // 9
最短的数组去重写法
[...new Set([2,"12",2,12,1,2,1,6,12,13,6])]
// [2, "12", 12, 1, 6, 13]
4、判断 if([] == false) {} , if({} == false) {} , if([]) {}
若应用 ===,示意相对相等,须要类型雷同并且值雷同;若应用 ==,则在类型不同的状况下会进行类型转换,而后再比拟。
JS“假值”总共只有 6 个:false,undefined,null,0,”(空字符串),NaN
- []间接用于 if 判断条件时会被转化为 true。
- 与布尔值比拟,都会将两边的值转化为 Number,[]转换为 0,{}转换为 NaN。
1) [] == false // true
2) {} == false // false
3) [] // true
尽量避免应用==
和!=
运算符
5、window 的 onload 事件和 domcontentloaded 谁先谁后?
页面加载事件:DOMContentLoaded 和 onLoad
1) DOMContentLoaded:当 DOM 树生成后触发该事件。
2) onLoad:当页面的所有资源(css、js、图片、视频等)都加载实现后触发。
DOM 残缺的解析过程:
- 解析 HTML 构造。
- 加载内部脚本和样式表文件。
- 解析并执行脚本代码。// js 之类的
- DOM 树构建实现。// DOMContentLoaded 事件会被触发
- 加载图片等内部文件。
- 页面加载结束。//load 事件会被触发
// todo:
参考文章:
Flex 布局教程:语法篇
中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂 (上)
CSS 盒模型与 style.width,offsetWidth,clientWidth 的关系
字节跳动最爱考的前端面试题:CSS 根底
[浅谈 JavaScript 空数组[] 和空对象 {} 的布尔运算](https://blog.csdn.net/zhouziy…