韦德国际官网你不可不知的,全兼容的多列均匀布局问题

你不可不知的 HTML 优化技巧

2016/09/12 · 基础技术 ·
2 评论 ·
HTML

本文作者: 伯乐在线 –
葡萄城控件
。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

如何提升Web页面的性能,很多开发人员从多个方面来下手如JavaScript、图像优化、服务器配置,文件压缩或是调整CSS。

很显然HTML 已经达到了一个瓶颈,尽管它是开发Web
界面必备的核心语言。HTML页面的负载也是越来越重。大多数页面平均需要40K的空间,像一些大型网站会包含数以千计的HTML
元素,页面Size会更大。

如何有效的降低HTML
代码的复杂度和页面元素的数量,本文主要解决了这个问题,从多个方面介绍了如何编写简练,清晰的HTML
代码,能够使得页面加载更为迅速,且能在多种设备中运行良好。

前端基础进阶(二):执行上下文详细图解

2017/02/21 · 基础技术 ·
执行上下文

原文出处: 波同学   

韦德国际官网 1

先随便放张图

我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题。比如先来一个简单一点的。

JavaScript

console.log(a); // 这里会打印出什么? var a = 20;

1
2
console.log(a);   // 这里会打印出什么?
var a = 20;

暂时先不管这个例子,我们先引入一个JavaScript中最基础,但同时也是最重要的一个概念执行上下文(Execution
Context)

每次当控制器转到可执行代码的时候,就会进入一个执行上下文。执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。JavaScript中的运行环境大概包括三种情况。

  • 全局环境:JavaScript代码运行起来会首先进入该环境
  • 函数环境:当函数被调用执行时,会进入当前函数中执行代码
  • eval

因此在一个JavaScript程序中,必定会产生多个执行上下文,在我的上一篇文章中也有提到,JavaScript引擎会以堆栈的方式来处理它们,这个堆栈,我们称其为函数调用栈(call
stack)。栈底永远都是全局上下文,而栈顶就是当前正在执行的上下文。

当代码在执行过程中,遇到以上三种情况,都会生成一个执行上下文,放入栈中,而处于栈顶的上下文执行完毕之后,就会自动出栈。为了更加清晰的理解这个过程,根据下面的例子,结合图示给大家展示。

JavaScript

var color = ‘blue’; function changeColor() { var anotherColor = ‘red’;
function swapColors() { var tempColor = anotherColor; anotherColor =
color; color = tempColor; } swapColors(); } changeColor();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var color = ‘blue’;
 
function changeColor() {
    var anotherColor = ‘red’;
 
    function swapColors() {
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
    }
 
    swapColors();
}
 
changeColor();

我们用ECStack来表示处理执行上下文组的堆栈。我们很容易知道,第一步,首先是全局上下文入栈。

韦德国际官网 2

第一步:全局上下文入栈

全局上下文入栈之后,其中的可执行代码开始执行,直到遇到了changeColor(),这一句激活函数changeColor创建它自己的执行上下文,因此第二步就是changeColor的执行上下文入栈。

韦德国际官网 3

第二步:changeColor的执行上下文入栈

changeColor的上下文入栈之后,控制器开始执行其中的可执行代码,遇到swapColors()之后又激活了一个执行上下文。因此第三步是swapColors的执行上下文入栈。

韦德国际官网 4

第三步:swapColors的执行上下文入栈

在swapColors的可执行代码中,再没有遇到其他能生成执行上下文的情况,因此这段代码顺利执行完毕,swapColors的上下文从栈中弹出。

韦德国际官网 5

第四步:swapColors的执行上下文出栈

swapColors的执行上下文弹出之后,继续执行changeColor的可执行代码,也没有再遇到其他执行上下文,顺利执行完毕之后弹出。这样,ECStack中就只身下全局上下文了。

韦德国际官网 6

第五步:changeColor的执行上下文出栈

全局上下文在浏览器窗口关闭后出栈。

注意:函数中,遇到return能直接终止可执行代码的执行,因此会直接将当前上下文弹出栈。

韦德国际官网 7

整个过程

详细了解了这个过程之后,我们就可以对执行上下文总结一些结论了。

  • 单线程
  • 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待
  • 全局上下文只有唯一的一个,它在浏览器关闭时出栈
  • 函数的执行上下文的个数没有限制
  • 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。

为了巩固一下执行上下文的理解,我们再来绘制一个例子的演变过程,这是一个简单的闭包例子。

JavaScript

function f1(){ var n=999; function f2(){ alert(n); } return f2; } var
result=f1(); result(); // 999

1
2
3
4
5
6
7
8
9
function f1(){
    var n=999;
    function f2(){
        alert(n);
    }
    return f2;
}
var result=f1();
result(); // 999

因为f1中的函数f2在f1的可执行代码中,并没有被调用执行,因此执行f1时,f2不会创建新的上下文,而直到result执行时,才创建了一个新的。具体演变过程如下。

韦德国际官网 8

上例演变过程

下一篇文章继续总结执行上下文的创建过程与变量对象,求持续关注与点赞,谢谢大家。

前端基础进阶系列目录

前端基础进阶系列我会持续更新,欢迎大家关注我公众号isreact,新的文章更新了我会在公众号里第一时间通知大家。也欢迎大家来简书关注我。

1 赞 2 收藏
评论

韦德国际官网 9

有趣的CSS题目(6): 全兼容的多列均匀布局问题

2016/09/29 · CSS ·
CSS

本文作者: 伯乐在线 –
chokcoco
。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

开本系列,讨论一些有趣的 CSS
题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的
CSS 细节。

解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的
CSS 属性,赶紧去补习一下吧。

不断更新,不断更新,不断更新,重要的事情说三遍。

谈谈一些有趣的CSS题目(1):
左边竖条的实现方法

谈谈一些有趣的CSS题目(2):
从条纹边框的实现谈盒子模型

谈谈一些有趣的CSS题目(3):
层叠顺序与堆栈上下文知多少

谈谈一些有趣的CSS题目(4): 从倒影说起,谈谈 CSS 继承
inherit

谈谈一些有趣的CSS题目(5):
单行居中,两行居左,超过两行省略

所有题目汇总在我的 Github 。

 

在设计和开发过程中需要遵循以下原则:

  • 结构分离:使用HTML 增加结构,而不是样式内容;
  • 保持整洁:为工作流添加代码验证工具;使用工具或样式向导维护代码结构和格式
  • 学习新语言:获取元素结构和语义标记。
  • 确保可访问: 使用ARIA 属性和Fallback 属性等
  • 测试: 使网站在多种设备中能够良好运行,可使用emulators和性能工具。

韦德国际官网 10

6、全兼容的多列均匀布局问题

如何实现下列这种多列均匀布局(图中直线为了展示容器宽度,不算在内):

韦德国际官网 11

 

HTML、CSS 和JavaScript三者的关系

HTML 是用于调整页面结构和内容的标记语言。HTML
不能用于修饰样式内容,也不能在头标签中输入文本内容,使代码变得冗长和复杂,相反使用CSS
来修饰布局元素和外观比较合适。HTML元素默认的外观是由浏览器默认的样式表定义的,如在Chrome中h1标签元素会渲染成32px的Times
粗体。

三条通用设计规则:

  1. 使用HTML
    来构造页面结构,CSS修饰页面呈现,JavaScript实现页面功能。CSS
    ZenGarden 很好地展示了行为分离。
  2. 如果能用CSS或JavaScript实现就少用HTML代码。
  3. 将CSS和JavaScript文件与HTML 分开存放。这可有助于缓存和调试。

法一:display:flex

CSS3 弹性盒子(Flexible Box 或
Flexbox),是一种布局方式,当页面需要适应不同的屏幕大小以及设备类型时,它依然能确保元素拥有更恰当的排布行为。

当然 flex 布局应用于移动端不错,PC
端需要全兼容的话,兼容性不够,此处略过不谈。

文档结构方面也可以做优化,如下:

  • 使用HTML5 文档类型,以下是空文件:

<!DOCTYPE html> <html> <head> <title>Recipes:
pesto</title> </head> <body>
<h1>Pesto</h1> <p>Pesto is good!</p>
</body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
 
<head>
<title>Recipes: pesto</title>
</head>
 
<body>
 
  <h1>Pesto</h1>
 
  <p>Pesto is good!</p>
 
</body>
</html>
  • 在文档起始位置引用CSS文件,如下:

<head> <title>My pesto recipe</title> <link
rel=”stylesheet” href=”/css/global.css”> <link rel=”stylesheet”
href=”css/local.css”> </head>

1
2
3
4
5
6
7
<head>
  <title>My pesto recipe</title>
 
  <link rel="stylesheet" href="/css/global.css">
  <link rel="stylesheet" href="css/local.css">
 
</head>

使用这两种方法,浏览器会在解析HTML代码之前将CSS信息准备好。因此有助于提升页面加载性能。

在页面底部body结束标签之前输入JavaScript代码,这样有助于提升页面加载的速度,因为浏览器在解析JavaScript代码之前将页面加载完成,使用JavaScript会对页面元素产生积极的影响。

<body> … <script src=”/js/global.js”> <script
src=”js/local.js”> </body>

1
2
3
4
5
6
7
8
<body>
 
  …
 
  <script src="/js/global.js">
  <script src="js/local.js">
 
</body>

使用Defer和async属性,脚本元素具有async 属性无法保证会按顺序执行。

可在JavaScript代码中添加Handlers。千万别加到HTML内联代码中,比如下面的代码则容易导致错误且不易于维护:

index.html:

<head> … <script src=”js/local.js”> </head> <body
onload=”init()”> … <button
onclick=”handleFoo()”>Foo</button> … </body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<head>
  
  …
 
  <script src="js/local.js">
 
</head>
 
<body onload="init()">
 
  …
 
  <button onclick="handleFoo()">Foo</button>
 
  …
 
</body>

下面的写法比较好:

index.html:

<head> … </head> <body> … <button
id=”foo”>Foo</button> … <script src=”js/local.js”>
</body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<head>
 
  …
 
</head>
 
<body>
 
  …
 
  <button id="foo">Foo</button>
 
  …
 
  <script src="js/local.js">
 
</body>

js/local.js:

init(); var fooButton = document.querySelector(‘#foo’);
fooButton.onclick = handleFoo();

1
2
3
4
init();
var fooButton =
    document.querySelector(‘#foo’);
fooButton.onclick = handleFoo();

发表评论

电子邮件地址不会被公开。 必填项已用*标注