eb开发是一个很依赖经验的领域,然而这对初学者很不友好。
知识一旦脱离了应用场景就会变得晦涩、空洞,且知识本身也满足“二八定律”,“抓大放小”是提高学习效率的关键。
下文向大家介绍了HTML和CSS之间的关系。内容选自《HTML 5与CSS 3核心技法(全彩)》一书。本书主线清晰,讲解简洁,并提供在线效果演示效果,非常适合小白上手!
1 HTML是骨架
很难想象一个人在桌前对着一块砧板坐一夜,隔一会儿就噼里啪啦敲几下,一会儿哭一会儿笑,是一种什么景象。事实上,在猫眼中我们就是这样的。只不过我们面对的是一块会发光的“砧板”而已。但为什么这块“板子”如此吸引人?“上网”到底是在做什么?
获取信息。
重点在“信息”,一种看不见摸不着却真实存在的东西。无论“1 + 1 = 2”这段字符显示得多么粗糙,都不会影响它传递了完整的信息,以及这条信息的内在逻辑是正确的,不是吗?HTML就是用来盛放最核心的内容——信息。
所以,在CSS和JavaScript出现之前,HTML就出现了。这是必然的,因为如果连最核心的信息都无法有效传递,那围绕着它的一切装饰物和附属品都是毫无意义的。
除满足承载核心信息的需求外,HTML还解决了一个重要的问题——将信息结构化。
试想有这样一篇文章:
背影
我说道:“爸爸,你走吧。”他望车外看了看,说:“我买几个橘子去。你就在此地,不要走动。”我看那边月台的栅栏外有几个卖东西的等着顾客。走到那边月台,须穿过铁道,须跳下去又爬上去。父亲是一个胖子,走过去自然要费事些。我本来要去的,他不肯,只好让他去。我看见他戴着黑布小帽,穿着黑布大马褂,深青布棉袍,蹒跚地走到铁道边,慢慢探身下去,尚不大难。可是他穿过铁道,要爬上那边月台,就不容易了。他用两手攀着上面,两脚再向上缩;他肥胖的身子向左微倾,显出努力的样子。
评论
王花花 大概,天底下的父亲,老去的样子都有些共同的特质吧
李拴蛋 我们都不愿意承认他老了
刘备备 想吃橘子...
此时上面的信息基本没有结构,只能通过断行或缩进尽可能让内容更易读,编辑时的状态就是其最终的显示效果。
HTML就派上了用场,见下方的代码:
代码
<artcle>
<h1>背影</h1>
<p>
我说道:“爸爸,你走吧。”他望车外看了看,说:“我买几个橘子去。你就在此地,不要走动。”我看那边月台的栅栏外有几个卖东西的等着顾客。走到那边月台,须穿过铁道,须跳下去又爬上去。父亲是一个胖子,走过去自然要费事些。我本来要去的,他不肯,只好让他去。我看见他戴着黑布小帽,穿着黑布大马褂,深青布棉袍,蹒跚地走到铁道边,慢慢探身下去,尚不大难。可是他穿过铁道,要爬上那边月台,就不容易了。他用两手攀着上面,两脚再向上缩;他肥胖的身子向左微倾,显出努力的样子。
</p>
</artcle>
<section id="comment-list">
<div class="title">评论</div>
<div class="comment">
<strong class="username">王花花</strong>
<span class="content">大概,天底下的父亲,老去的样子都有些共同的特质吧</span>
</div>
<divclass="comment">
<strong class="username">李拴蛋</strong>
<span class="content">我们都不愿意承认他老了</span>
</div>
<div class="comment">
<strong class="username">刘备备</strong>
<span class="content">想吃橘子...</span>
</div>
</section>
一头雾水没关系,后面我们会细说每一个部分。总之这段内容给人感觉反而更繁琐。但繁琐是代价,重要的是现在这段信息有结构了。这就意味着计算机可以通过结构的规律将其显示得更便于阅读(甚至是交互)。
以下是不加任何装饰性内容直接让浏览器呈现的结果:
效果
这是纯HTML在没有引入任何装饰时的显示效果。很明显,即便是这样也比纯文字状态易读了许多。但注意,HTML本身没有样式,字体大小和粗细有变化的原因是浏览器的默认样式起了作用,与HTML没有关系。而重点就在这里,这意味着我们可以基于这个结构设计自己的页面效果,见下方的示例。
代码
<style>
body { font-family: 'Microsoft YaHei', sans-serif; }
#comment-list { background: #f0f0f0; padding: 10px; border: 1px solid #ccc; margin-top: 25px; }
#comment-list .comment { margin-top: 10px; margin-bottom: 10px; }
#comment-list .title {
color: #777; font-size: 1.1rem; padding-bottom: 5px;
border-bottom: 1px solid #ccc;
}
</style>
<artcle>
<h1>背影</h1>
<p>
我说道:“爸爸,你走吧。”他望车外看了看,说:“我买几个橘子去。你就在此地,不要走动。”我看那边月台的栅栏外有几个卖东西的等着顾客。走到那边月台,须穿过铁道,须跳下去又爬上去。父亲是一个胖子,走过去自然要费事些。我本来要去的,他不肯,只好让他去。我看见他戴着黑布小帽,穿着黑布大马褂,深青布棉袍,蹒跚地走到铁道边,慢慢探身下去,尚不大难。可是他穿过铁道,要爬上那边月台,就不容易了。他用两手攀着上面,两脚再向上缩;他肥胖的身子向左微倾,显出努力的样子。
</p>
</artcle>
<section id="comment-list">
<div class="title">评论</div>
<div class="comment">
<strong class="username">王花花</strong>
<span class="content">大概,天底下的父亲,老去的样子都有些共同的特质吧</span>
</div>
<div class="comment">
<strong class="username">李拴蛋</strong>
<span class="content">我们都不愿意承认他老了</span>
</div>
<div class="comment">
<strong class="username">刘备备</strong>
<span class="content">想吃橘子...</span>
</div>
</section>
效果
这里只是举了一个小示例。你可以轻而易举地让页面的风格千变万化,进而让用户体验有所差异(或差距)。“千变万化”因CSS灵活、强大,“轻而易举”因HTML简洁、有序。结构的力量!
CSS是皮肤
一个充满活力的生态是不满足于现状的。人们在适应了便利地浏览核心信息之后,就会想方设法改进浏览的体验。比如,让自己的博客以多栏显示,以便在视觉上区分不同板块;修改字体颜色,以便强调一些重要信息等。
起初的做法是——准备几种特殊的标签,专门用于样式的指定。涉及布局的地方,如果没有特殊标签就直接用表格布局。以下没有任何样式的状态(以下代码均不需要看懂):
代码
<h1>标题</h1>
<p>
从前有座山,山里有个庙,庙里...
</p>
效果
此时的页面结构下。
如果想让标题居中,则需要给其添加元素<center>,见下方的示例。
代码
<center>
<h1>标题</h1>
</center>
<p>
从前有座山,山里有个庙,庙里...
</p>
效果
此时的页面结构如下。
居中标题的目的确实达到了,但是有一个很大的问题:如果我改变主意了,不想让其居中了,那么我还得再去将<center>元素去掉。这对于简单的页面确实可行,但如果是复杂的页面,这种做法的工作量就是噩梦,因为每个地方都得修改,无论是对齐方式、颜色、背景色,还是大的布局都必须通过修改结构才能完成。这种做法的最大问题是可维护性太差,很多时候为了一种样式要修改很多不必要的结构,枯燥、重复、削足适履的工作太多,基本上写一次就再也不想改了。
这个问题亟待解决,而且解决方案还要兼容现有规则。现有规则是什么?HTML的语法及结构。不过既然HTML已经有结构了,为什么不好好利用呢?
以前面示例中的文章页面为例,如果我们想更改标题,是否可以先统一选中所有标题,然后说明想要什么样式规则呢?就像下面这样:
所有h1 元素听着
对齐方式 居中。
字体颜色 黑色。
如果想将所有段落字体放大,则像下面这样:
所有p 元素听着
字体大小 150%。
这种方式的确很高效!同时这个规则与HTML语法无关,相当于另一种语言。这样结构和样式就不会互相影响,结构是结构,样式是样式,两者隔离开了。如果想修改样式,则完全不需要劳HTML大驾,只需要修改样式文件即可,更便于管理和维护。这就是CSS,只不过其语法更简洁。
下面以修改标题对齐方式为例:
h1 { /* 所有h1 元素听着 */
text-align: center; /* 对齐方式 居中 */
}
通过批量选择和处理,极大地提高了开发效率,降低了维护成本,四两拨千斤。
(完)
图书推荐
《HTML 5与CSS 3核心技法(全彩)》
表严肃 著
本书能够为自学Web开发初学者建立一套HTML与CSS的核心知识框架,同时借助丰富的示例让初学者有一个愉悦、轻松的学习过程。
想从事前端开发的,可将本书作为学习的起点。正从事前端开发的,可将本书作为速查的手册。
/面包理想
一转眼已经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相关基础知识有所了解,接下来我们就开始真正的进入技术的学习,大家是不是迫不及待了呢?
4 种方式可以在 HTML 中引入 CSS。其中有 2 种方式是在 HTML 文件中直接添加 CSS 代码,另外两种是引入 外部 CSS 文件。下面我们就来看看这些方式和它们的优缺点。
内联方式
内联方式指的是直接在 HTML 标签中的 style 属性中添加 CSS。
示例:
<div style="background: red"></div>
这通常是个很糟糕的书写方式,它只能改变当前标签的样式,如果想要多个 <div> 拥有相同的样式,你不得不重复地为每个 <div> 添加相同的样式,如果想要修改一种样式,又不得不修改所有的 style 中的代码。很显然,内联方式引入 CSS 代码会导致 HTML 代码变得冗长,且使得网页难以维护。
嵌入方式
嵌入方式指的是在 HTML 头部中的 <style> 标签下书写 CSS 代码。
示例:
<head> <style> .content { background: red; } </style> </head>
嵌入方式的 CSS 只对当前的网页有效。因为 CSS 代码是在 HTML 文件中,所以会使得代码比较集中,当我们写模板网页时这通常比较有利。因为查看模板代码的人可以一目了然地查看 HTML 结构和 CSS 样式。因为嵌入的 CSS 只对当前页面有效,所以当多个页面需要引入相同的 CSS 代码时,这样写会导致代码冗余,也不利于维护。
链接方式
链接方式指的是使用 HTML 头部的 <head> 标签引入外部的 CSS 文件。
示例:
<head> <link rel="stylesheet" type="text/css" href="style.css"> </head>
这是最常见的也是最推荐的引入 CSS 的方式。使用这种方式,所有的 CSS 代码只存在于单独的 CSS 文件中,所以具有良好的可维护性。并且所有的 CSS 代码只存在于 CSS 文件中,CSS 文件会在第一次加载时引入,以后切换页面时只需加载 HTML 文件即可。
导入方式
导入方式指的是使用 CSS 规则引入外部 CSS 文件。
示例:
<style> @import url(style.css); </style>
比较链接方式和导入方式
链接方式(下面用 link 代替)和导入方式(下面用 @import 代替)都是引入外部的 CSS 文件的方式,下面我们来比较这两种方式,并且说明为什么不推荐使用 @import。
小结:我们应尽量使用 <link> 标签导入外部 CSS 文件,避免或者少用使用其他三种方式。
*请认真填写需求信息,我们会在24小时内与您取得联系。