创建文章
个人比较喜欢通过命令行创建一篇新的博客,通过命令行初始化的博客会自动创建博客的开头部分(包含标题、创建日期等)
|
个人比较喜欢通过命令行创建一篇新的博客,通过命令行初始化的博客会自动创建博客的开头部分(包含标题、创建日期等)
|
Block formatting context (块级格式化上下文)
一块独立的渲染区域、内部元素的渲染不会影响边界以外的元素
页面文档由块block
构成 每个block
在页面上占据自己的位置
使用新的元素构建BFC overflow:hidden | auto | scroll; 只要不为visible
新的空间
告诉浏览器,外面的环境影响不到我了 我重新来进行Block formatting 布局和定位
核心:
新的BFC,给出了新的不受外界影响的块级格式化环境
block 块级-> 页面的基础
formatting context 格式化-> 渲染
网页的定位(大) 文档流正常,浮动,定位,flex,table
广义的定位 块级元素的定位 垂直的定位;行内元素 左右定位 通过内容来确定
狭义的定位:
float 浮动元素,在一行的开始或者结束
flex 弹性布局
position
BFC 在正常的文档流里面重建一个新的上下文环境
一、在浏览器进行页面元素布局的时候 同一个BFC的两个相邻的Box的margin 会重叠,与方向无关
破坏规则 创建新的BFC Context上下文的概念
如何创建BFC?=>重新规划一个(独立)渲染区域
好像只剩块级元素和行内元素不是BFC
二、BFC
的高度,浮动元素也要参与计算
在元素
float
之后脱离了文档流没有办法计算确切高度,这种情况我们称之为高度塌陷。解决高度塌陷的前提就是能识
别并包含
到浮动元素。而BFC
就有这个特性,所以BFC也可以计算浮动元素的高度。新建BFC让浮动元素也参与计算
|
html代码如下:
<div class="book">
<div class="front-cover">
</div>
</div>
Css居中方法 (敲黑板)重点
绝对定位
,然后距顶部和左各50%
,此时的元素还不是居中的,因此需要通过一定的偏移
将其移到理想位置,两种方法的主要思想
都是一样的,第一种通过margin-left和margin-top移动元素自身宽高的一半
,另一种通过css3
的属性transform的translate方法
平移元素自身宽高的一半, 代码展示如下:.book {
width: 300px;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
/* 第一种 */
/* 兼容性 未使用css3, ie678 */
/* margin-left: -150px; */
/* margin-top: -150px; */
/*第二种*/
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
```
两种方法第一种的兼容性更加的好一些,因为其中没有使用Css3的属性 对于ie678的兼容比较友好
stylus
中 可以将常用的样式像表达式中变量赋值一样保存给一个变量、如下:
|
|
|
stylus
中可以不使用这里的变量w和h, 而是简单地前置@
字符在属性名前来访问该属性名对应的值:
|
例如,在书写Css3
样式时我们经常要进行兼容性处理,需要在属性前加上相应的前缀,下面有定义的border-radius(n)方法,其却作为一个mixin(如,作为状态调用,而非表达式)调用。
|
Stylus
支持通过使用{}字符包围表达式来插入值,其会变成标识符的一部分。例如,-webkit-{‘border’ + ‘-radius’}等同于-webkit-border-radius
.
再进一步,在stylus中我们还可以对border-radius再做进一步的处理 类似与js中的函数封装 ,如下(这样对于任何需要做兼容性处理的属性 我们只需要调用两次mixin出入所需参数,大大的简化了一下琐碎代码工作):
vendor(prop,args)
-webkit-{prop} args
-moz-{prop} args
-ms-{prop} args
-o-{prop} args
{prop} args
border-radius(n)
vendor('border-radius',arguments)
box-shadow(n)
vendor('boa-shadow',arguments)
.box
background-color bg_color
width box_size
height box_size
border-radius(5px)
编译后:
.box {
background-color: #123456;
width: 100px;
height: 100px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
-moz-box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
-ms-box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
-o-box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
}
在所有的前端面试中常常喜欢考面试者如何手写一个new操作符,作为在准备秋招的大三党,我也要考虑这些。
那么我们先看看new操作符都干了什么事情,有哪些操作?通过下面的代码来进行思考:
|
安装对应依赖
|
应用场景:
在开发过程中经常会遇到时间戳的获取和对比
不同的时间戳获取方式也存在性能的差异,虽然差异不会太大,但是也可以多考虑在日常开发中使用性能更佳的方式
经常用的时间戳的获取方式有:
|
测试代码
|
Date.now()
Date.now() 用的时间最少,它与其它获取时间戳最大的区别就是,一个是 constructor 的 属性,其它是 constructor.prptotype 的属性,实例化的区别,显然实例化对象花的时间更多
+new Date()
涉及到对象实例化、类型转换,转换成数字, 耗时最多
虽然差别不大,但是也算是一种性能的追求
更多具体性能对比参考如下:
date.now() vs new Date()