整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS简史:从1.0到3.0,最终又将走向哪里?

CSS简史:从1.0到3.0,最终又将走向哪里?

/面包理想

一转眼已经2018年,前端行业也风风雨雨地走过了10多年,网页布局也从最原始的文档变成了精彩纷呈的交互。当我看到第四代CSS布局技术的时候,在惊叹互联网发展如此突飞猛进的同时,不禁会有一个疑问:CSS经历1.0到3.0的版本变迁,最终又将走向哪里?

今天我们就回顾一下CSS简史和四次布局技术的跃迁。

1.CSS简史

为什么我们需要回顾一下CSS简史呢?

1.了解过去能够更好地预测未来,毕竟太阳底下没有什么新鲜事。

2.相比预测未来,通过了解CSS发展演变趋势,能够科学合理地评判CSS的发展,指导我们学习CSS的核心技术,让我们在有限的精力和时间内学对知识,学好知识。

那是1989年的第一场雪,比1988年来的更早一些,伯纳斯·李(Tim Berners-Lee)以超人的智慧和消耗了前额无数浓密的头发为代价发明了World Wide Web,没有他就没有我们今天互联网相关的工作,也就没有了这个专栏教程,请允许我代表广大前端致以崇高的敬意。我们先一睹大神的风采。

对互联网之父,我只想对他说一句话,有一款洗发水增发效果挺好的,我一直用,你要不要试试?

互联网诞生了以后,最初的网页仅仅是纯文本,但是随着互联网的发展,大家意识到web的原始版本根本就没有提供一种装饰网页的方法。这就好比一个婴儿不会穿着衣服出生一样,孩子大了,总不能裸奔吧?这个时候两个大神提供了解决方案Pei Yaun Wei和Andreesen。

Pei Yaun Wei说,这个好办,我们可以给孩子穿上纸尿裤。

Pei-Yuan Wei在1991年创建图形浏览器 ViolaWWW ,他整合了自己提出的样式语言到自己开发的浏览器中,还期望自己的样式语法最终能成为web关于样式的官方标准。虽然这个目标并未达到,但是他提出的样式语法确实为其它的一些样式语法提供了一些灵感。

Andreesen说,那玩意得换多麻烦,我给孩子画一身衣服吧,当然你懂的,最后Pei Yaun Wei的方案被采用了,但是我们还是看看Andreessen画出来的情况有多乱。

与此同时,Andreessen 在他开发的网景浏览器中进行了不同的尝试。他并没有创建一种分离式的标记语言,而是采取拓展HTML标签的方法来包含非标准化的HTML标签已达到装饰网页的目的。不幸的是,没过多久,网页就失去了所有的语义化并看起来像下面这样混乱:

<MULTICOL COLS="3" GUTTER="25">
 <P><FONT SIZE="4" COLOR="RED">This would be some font broken up into columns</FONT></P></MULTICOL>

最终被大家采纳的语言是由Hakon Wium 在 1994年 10月提出的样式语法。它被称为样式层叠表,简称CSS,但是直到1996年的时候,CSS才演变成我们熟悉的样子。

html { margin-left: 2cm; font-family: "Times", serif;
}h1 { font-size: 24px;
}

然后在1998年5月W3C发表了CSS2,紧接着一个让我们深恶痛觉的浏览器诞生了!对没错,就是你深恶痛绝的那个万能的IE6,2001年微软发布了IE6,不过搞笑的是,IE6最初的出现确实很大程度推动了CSS发展。那时候的网页已经变成跟现在很接近了。

按照常理你肯定会想,后面我就知道了,你不用说了,然后就是CSS3.0了。好吧,如果是我,我也这样想,但是国际友人的脑回路可能跟我们不一样,事实上,CSS3早于1999年已经开始制订,直到2011年6月7日,CSS 3 Color Module终于发布为W3C Recommendation。这个故事告诉我们两件事:

1.w3c这个组织活的真够长,甚至比很多读者年龄都大。

2.不是CSS正式版发布了你才放心使用,如果等到那个时候使用,你的项目可能未曾绽放就枯萎了。

细心的读者可能会问了,CSS3正式版什么时候发布啊?另外CSS4.0什么时候发布?

好吧,我只能告诉你随缘吧……而且没有CSS4.0了,也不会有CSS5.0了。

来我们再看看国际友人的脑回路:

简单地说,就是从CSS3开始,CSS规范就被拆成众多模块(module)单独进行升级,或者将新需求作为一个新模块来立项并进行标准化。因此今后不会再有CSS4、CSS5这种所谓大版本号的变更,有的只是CSS某个模块级别的跃迁。

按照CSS工作组的说法,CSS历史上并没有版本的概念,有的只是“级别”(level)的概念。比如,CSS3其实是CSS Level 3,CSS2是CSS Level 2,而CSS Level 1当然就是CSS1。每个级别都以上一个级别为基础。

大家可能说这个命名好乱啊,这事儿我只想跟你说,你就把CSS工作组当成你女朋友就好了,她开心就好,她说的都是对的,她说啥就是啥……

至于我们,会用就好了。

CSS出现的好处就是让结构和表现分离,可以更灵活的修饰网页,学习也很简单。这里我更想说说它的不足。

1.CSS只有一个全局的命名空间,所以是无法避免出现选择器冲突的。

2.模块化做的不够好,所以造成嵌套和覆盖混乱,容易产生一大堆乱糟糟的样式。

所以现在CSS也在向“模块化、JS化发展”

不过客观地说,CSS的出现确实是互联网里程碑式的进步。

CSS其实就做了两件事:

1.如何布局

2.元素怎么表现

说直白一点就是两件事,一个房子是盖成两室一厅还是三室两厅,另一件事是精装修。

这里大家就会看到如果一个房子180平米隔成1个10平米的主卧170平米的厕所,你再怎么精装修也不会是一个宜居的房间。所以布局在CSS中是极其重要的。与CSS发展简史类似,CSS布局也经历了一代又一代的迭代,才成为当前的样子。

接下来我们就说说CSS布局简史。

2.CSS布局简史

初代table布局

在1997年的时候,David Siegel 改变了web,他自己研究出了一项网页布局技术,利用html中的table元素和gif图片缝合在一起,创造了表格布局技术,之后他就犹如一头猛兽泛滥起来。

优点:布局容易、快捷、兼容性好

缺点:改动不便,需要重新调整,工作量大

由于互联网网站越来越复杂,内容和业务更新频繁,所以table布局是完全不能胜任的,以至于table布局的发明人都说:

“我把炸酱和面倒在了一起,并且没法分开它。”

不过这个真不是我杜撰出来的,原文:

David Siegel:“有人说我毁掉了Web,我回答他们,的确如此。我毁掉了Web是因为我把巧克力和花生酱混合在一起却再也不能把它们分开。我犯下了把结构跟表现混合在一起的错误。”

然后第二代布局技术登场了,

CSS+div布局

CSS+div布局总结起来有三大优点,

1.省时,学习容易,写代码也很容易,很快,效率高

2.省事,如果业务逻辑变了,改起来特别方便快捷

3.省钱,代码量少,省带宽,适合seo

基于这三年不难看出CSS+div布局人畜无害,人见人爱,也就不难解释为什么被广泛地使用成为目前主流的布局技术了。当然了他也有缺点:

1.需要考虑平台兼容性,对制作人员的技能要求较高。

2.在移动端布局显得有些力不从心,如未知宽高float内部元素居中、垂直水平布局、响应式布局等方面略显繁琐。

基于此,第三代布局技术应运而生。

Flex布局

优点:

1.CSS3的布局方式,可以在不使用其他框架的情况下,简便、完整、响应式地实现各种页面布局 2.移动端布局简直太友好

缺点:

兼容性较差,IE浏览器版本在9.0以上,基本要10.0 对于其他浏览器,要求兼容性写法

Flex布局日渐成为移动端主流布局技术,但是它是单一维度的布局,这个我会在专栏后面讲到,有时候也会捉襟见肘,所以目前出现了第四代的布局技术:

grid布局

因为目前大部分浏览器并不支持这种技术,但是它代表了网络发展,这里大家保持关注就好,这里我重点说下它为什么可以称为第四代网络布局技术。首先一个观点大家先记住:

它并不会取代第三代的布局技术,而是颠覆和突破。就好像Flex远比div+CSS布局更方便,但是div+CSS依然有用武之地。

我们说下它的突破之处:

1.flex对标的是float,本质上还是一维布局,这就跟别人开着夏利,你开奔驰都是地面上跑没啥本质区别一样。但是grid升维了,grid是飞机,在地面马路这条线一维之上让人能够思考高度这个维度,以前是汽车一维交通工具(你只能在水平方向一个方向开),飞机是二维(能俯冲了(横向、纵向同时)),所以grid可以说是拓宽了CSS布局的维度。不排除将来会有三维布局的出现。到时候CSS不仅仅能控制横向布局,纵向布局,还可以深度布局(这个要依赖于三维展示的出现,如VR,AR三维立体的展示设备出现)。

2.grid布局里面采用了“可视化布局(template部分,所见即所得)”,这个是颠覆了传统的,写一句代码刷一下浏览器这样的开发方式,不排除以后会出现代码即效果的开发模式。比如你在一个设备上画一个区域,然后画轮播图。

这种方式类似于vc++控件方式,但是更智能,也更友好。谁说不可能呢?大家不要忘了grid布局的来源是早就废弃的table布局。说到这里我多说一句搞笑的微软,frontpage没火,dreamwaver火了,最早提出“canvas”概念的 VML没火,最后html5的canvas火了,连CSS3网格布局也是由微软创建的一个模块 ,最后火起来居然没人认识它。心疼微软一秒钟。

说到这里大家对CSS简史和布局也有所了解了,我们总结下,通过本文你应该学到:

(1)CSS的发展历史。

(2)熟知布局的发展历史,以便对未来布局技术的发展有一个客观的判断,来选择是否学习。

通过本文的学习大家已经对CSS相关基础知识有所了解,接下来我们就开始真正的进入技术的学习,大家是不是迫不及待了呢?

本样式对齐文本text-align属性用于指定文本块的对齐方式,可选值包括: 1)start:内容对齐开始边界,默认; 2)end:内容对齐结束边界; 3)left:内容左对齐; 4)right:内容右对齐; 5)center:内容居中对齐; 6)justify:内容两端对齐。当text-align属性使用了justify值时,可以使用text-justify属性指定文本添加空白的方式,这个属性...
了解了包的概念,就可以系统的介绍Java中的访问控制级别。在Java中,针对类、成员方法和属性提供了四种访问级别,分别是private、default、protected和public。 权限访问修饰符(权限从大到小依次往右排) public(公共) protected(受保护) default(缺省) private(私有) 同一个类 √ √...
Rust 提供了代码封装的机制。可以通过crate (等同于Java中的package)创建相对独立的module模块,模块中封装了可以重复使用的功能函数。当创建了自己的 lib 库或者要使用第三方的库的时候(这些库就是一些事先写好的crate)需要将这些库中的module 模块引用到当前的环境中。Rust提供了以下几种引用方式:一、使用 extern crate在使用这些Module的文件中,通过...
填空题: 他______牺牲生命_______出卖组织? 据数据统计,不同年代的同学回复的最多的是….. 60后,他宁可牺牲生命,也不出卖组织。 70后,他害怕牺牲生命,所以出卖组织。 80后,他与其牺牲生命,不如出卖组织。 90后,他即使牺牲生命,也要出卖组织。 00后,他白白牺牲了生命,忘了出卖组织。 上边的案例,引发了大家对”自我与企业关系的思考”. 能力与欲望...
历届试题 国王的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。 如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座...
go test命令参数问题在使用go test对go代码进行单元测试的时候,遇到关于命令参数的问题,google了一下,没有找到很好的说明,其实就是一些细节而已。问题是这样的,在进行单元测试的时候,我希望输入一些命令行参数来控制程序的运行。 参考go官方文档,只需要在go test后面加上-args和参数就可以了 例如 go test -args -classpath E:\testcase...
阿里云OSS-使用经验总结,存储,账号-权限,分页,缩略图,账号切换最近项目中,需要使用云存储,最后选择了阿里云-对象存储服务OSS。总的来说,比较简单,但是仍然遇到了几个问题,需要总结下。1.OSS总的使用介绍 https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/...
WEB应用图片的格式,以及各自的特点和优化(一) by FungLeo前言12年前我入行三天.用table布局做了一个非常粗糙的网页.我说了一句话,”网页就是表格加文字加图片,图片分两种,插入图片和背景图片”.这句话在今天看来,当然是一个笑话.但是当时我说出这句话的时候,当时的那些前辈都非常认可我的总结,并且认为我很有从事网络发展的潜力啊.哎,要不是他们的鼓励,说不定我早转行了……扯远了.说回正题,...
1. 单表数据的导出针对单表数据的导出操作,MongoDB 提供了 mongoexport 命令。mongoexport 既可以将数据导出为 CSV 格式的文件,也可以导出 JSON 格式的文件。这两者之间的区别是:JSON 是 mongoexport 默认的导出格式,不需要指定,而要导出 CSV 格式的话需要明确指定;导出 CSV 格式必须显式指定各属性名,而导出 JSON 格式不需要。由此可见...
商业智能对于中小企业来说,由于其高昂的费用和运行维护技术水平要求高,往往难以承受,商业智能SAAS系统平台+模块的创新模式的出现能帮助中小企业走上商业智能之路。...
stack.sh给出了一个非常好的例子,关于学习openstack创建 1.检查devstack文件,检查bash4.2以上,检查用户,不能是root2.准备环境,导入函数3.检查local.conf和localrc是否都存在,如果存在使用localrc4.检查是否已经运行devstack5.代理设置和禁用无效服务6.配置sudo7.配置distro库8.配置目标目录,创建目标目录9.配置主机、日...
博客地址:http://blog.csdn.net/FoxDave本文介绍如何利用SharePoint客户端对象模型(.NET)逐级获取Office 365网站中List的内容,仅仅是示例,没有讲究太多东西。代码如下:ClientContext ctx=new ClientContext(""); ctx.Credentials=new SharePointOn...
题外话Atom,风风雨雨走过一年多了.,目前最新版本是V1.7.0 .社区还是相当活跃;体验也改善了很多;但是性能上还是欠缺;今天我再来介绍自己常用的一款插件git-control插件介绍 官方介绍页面 作者: jacogr Github地址 我的介绍 就是命令行的GUI版本,,有些类似sourcetree,但是不如它强大,日用满足使用在编辑器下加载git版本的工作目录;工具默认启用快捷键...
安装devstack后,如果没有设置参数,执行openstack命令是不成功的。1.登录到horizon页面,使用admin登入,进入project->compute-> Access&Security -> API Access,记录下Service Endpoint。或选择download OpenStack RC File按钮,下载demo-openrc.sh文件2.将demo-openrc...
对于这样的问题,看到第一眼就是暴力破解,所以也就递归找到所有情况,再筛选出合格的小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?思路: 首先无论怎么取,手牌为13张的时候结束.也就是递归结束标...
网红和粉丝经济,是最近几年流行起来的概念。 截至目前,有一些初步的认识,整理成文。 粉丝,最早是明星的跟随者比较多。 我的理解是,对于一个人物、动物、运动等,有着共同的兴趣,从而建立多个人和一个人之间的关系,比如粉丝和明星。 粉丝经济,大获成功的标志是,雷军和小米科技。在创业早期,就把粉丝经济和社交传播结合在一起,低成本地实现了全网营销。从此以后,各大手机厂商等很多领域的企业,都...
关于android端apk退出方式的设计,现在大体只有下面几种:1,有退出和取消按钮;2,一定时间内两次返回为退出;3,一次返回就是退出。首先可以看到这两个用按钮的,退出都在左侧,设计者肯定没有看过十年前雅虎研究院出的web端设计指导,下一步的操作一定是在右侧,而返回上一步的操作是在左侧。但是到了移动端应该考虑用户是左手还是右手使用,也就是说,如果是左手使用,这个位置设计没有问题,反之就不用说了。...
写在最前:本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变可扩展性架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种Scale-up : 纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力Scale-out : 横向扩展, 通过加节点(机器)来实现伸缩,提升服务能力对于互联网的高并...
angular.js中,指令是最基础的也是最重要的工具之一。angular.js指令指的是以ng为前缀的HTML属性。在之前的ng-app、ng-model等,都属于指令。 angular.js中的基本指令包括如下内容: · 1.ng-app/ng-model ng-app指令用于声明angular,js的作用范围,ng-model用于声明模型。这些在之前都已经进行过详细介绍。 2.ng-...
java编码 当你的字节序列是某种编码时,这个时候想把字节序列变成 字符串,也需要用这种编码方式,否则会出现乱码 文本文件就是字节序列 可以是任意编码的序列,如果在中文机器上直接创建文本文件,那么该文本文件 只认识ANSI编码 案例: public class Bianma { public static void main(Strin...
调试JDK源码-一步一步看HashMap怎么Hash和扩容调试JDK源码-ConcurrentHashMap实现原理调试JDK源码-HashSet实现原理调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 ConcurrentHashMap线程安全的总结是我从源码分析出来的:ConcurrentHashMap所谓线程安全是哈希冲突的时候新增的节点是线程安全的,而 Conc...
对于后台系统的搜索进行UI自动化,主要是比对页面查询结果是否与预期一致(即数据库查询结果) search.py# -*- coding:utf8 -*- import HTMLTestRunner import time import unittest import public from selenium import webdriver class Search(unittest.TestCa...
ajax 的全称是Asynchronous(异步的意思) JavaScript and XML,是一种创建交互式网页应用的网页开发技术 ajax技术的流行得益于google的大力推广,正是由于google产品对ajax技术的广泛应用,使得ajax流行起来了。 Ajax其核心有JavaScript、XMLHTTPRequest、DOM对象组成,通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请...
一、SpringMVChttp://blog.csdn.net/evankaka/article/details/45501811Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简...
概念: 优化策略:字段选择性 选择性较低索引 可能带来的性能问题索引选择性=索引列唯一值/表记录数;选择性越高索引检索价值越高,消耗系统资源越少;选择性越低索引检索价值越低,消耗系统资源越多;查询条件含有多个字段时,不要在选择性很低字段上创建索引可通过创建组合索引来增强低字段选择性和避免选择性很低字段创建索引带来副作用;尽量减少possible_keys,正确索引会提高sql查询速度,过多索引...
一. 什么是Spark? Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需...
相比之前的增改查,删除就显得简单的多了。 这里的request的type为delete,删除成功的status为204,404则是要删除的记录不存在 var id='BAD90A95-7FEA-E511-9414-ADA183AB6249'; $.ajax({ async: false, type: "DELETE ", co...
关于JPush极光推送是国内的服务厂商提供的一站式push服务(同时支持iOS、android),后面也加入了即时通讯的能力供app使用。致力于打造简单、可靠、价格有竞争力的服务(简单功能全免费,高级版才收费),让应用开发商可以聚焦业务开发,push相关的技术实现全部通过极光推送来解决,仅需调用极光推送的api即可。正因为如此,开发者小伙伴们对其的评价相当不错。笔者的app新增了从服务器往移动客户端...
Mapreduce初析 Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。 重点就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段...
Jquery对象常用的方法:$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值,参数是map $(”img”).attr(”src”,”test.jpg”); 给某个元素添加属性/值 $(”img”).attr(”title”, function(...

2月24日消息,“高庄村村委会委员单某长期霸占村集体耕地!”今年6月,一封举报件送到了河南省郸城县宜路镇纪委工作人员的手中。被举报人单某系宜路镇高庄村村委会委员、文书,却并非党员。

村(社区)一级的党员干部违了纪,会由相关党组织进行处理。那么,如果是非党员干部胡作非为,谁可以来管呢?

监察机关管。监察体制改革后,根据监察法,“基层群众性自治组织中从事管理的人员”被纳入监察范围,各级监察机关均可以按照管理权限管辖本辖区内上述人员所涉监察事项。另外,上级监察机关可以办理下一级监察机关管辖范围内的监察事项,必要时也可以办理所辖各级监察机关管辖范围内的监察事项。

同时,监察法规定了监察委员会设立到县一级,那么广大的乡镇区域呢?当然有办法。根据监察法,各级监察委员会可以向所管辖的行政区域等派驻或者派出监察机构、监察专员。派驻或者派出的监察机构、监察专员根据授权,按照管理权限依法对公职人员进行监督,提出监察建议,依法对公职人员进行调查、处置。

实践中,县级监委主要通过向辖区乡镇(办事处)设立派出监察机构,设置若干监察员,有效承接、履行监察职能,推动监察职能向基层延伸。

接到举报后,郸城县宜路镇派出监察员办公室立即把问题线索呈报县监委,履行相应程序后便成立调查组进行调查核实。通过询问、走访、实地测量,最终查实了单某依仗其村干部身份霸占村集体耕地1亩11年的事实,并依据县监委授权对其进行相应处理。

当然,有的乡镇面临监督力量薄弱、能力不强等问题。一些县区通过将辖区划分为若干片区,设置派出监察员办公室,通过整合工作力量,破解乡镇监督难题。比如,江苏省南通市崇川区监委设置三个派出监察员办公室,联系11个街道(开发区),与街道纪工委联合开展对街道、社区党员和监察对象的日常监督。

机构、人员有了,具体如何监察呢?实践中,县区监委相应地赋予乡镇(街道)派出机构和人员部分监察权限,有的调查措施可以自主实施,有的则由县区监委批准后以县区监委的名义实施,以此行使监察职能。

监察到乡镇就“见底”了吗?不,还有向下的延伸和触角。多地都探索了将监察职能延伸至村(社区)的相关制度,通过设置“消息哨”,紧盯基层“微权力”。比如,四川省广元市朝天区纪委监委从退休干部、大学生村官、农村党员中择优挑选村级特邀监督员,一旦发现重要问题线索可直接向区纪委监委报告。河南省淮阳县纪委监委在全县各村设立1名监察信息员,由村(社区)务监督委员会主任兼任,履行发现问题、报送信息职责等。

纵向到底、横向到边,监察职能向基层有效延伸覆盖,非党员村干部也休想“跑脱”。“出了问题,有人被处理,有人就不被处理”的怪事儿,很难再有了。

(来源:中央纪委国家监委网站微信公号)