记得好像是05年吧,一本名为《网站重构》的书登陆了中国,也许它的译者阿捷自己也没意识到,这本书会对国内的业界产生什么样的影响。
05年,本民工还只是一个刚刚出道的菜鸟,当时还是一个靠着TABLE打天下的年代,这本书的确给当时国内的WEB技术带来了一场革命。书的确是本好书,但书本的语言中充斥着太多对以往TABLE结构的不满,让很多人特别是没经历过TABLE年代的新人把TABLE标签无情地抛弃,甚至唾弃的程度。而书本中反复出现的“DIV+CSS”这个词,则在很长一段时间里被认为就是WEB标准。于是,WEB标准结构变成了DIV的卖场,打开一个页面源码,看到的都是DIV没有TABLE那就算是个标准的页面、招聘信息里都写着什么精通DIV+CSS云云……-_-!
就连在今天,存在这样误解的人也还不在少数。也许是我们太渴望标准而走向了另一个极端。其实在《网站重构》中也没有说过禁止用TABLE,其实在一些数据内容的表现上,TABLE要优于DIV,比如说排一个“课程表”。TABLE也是符合W3C标准的标签之一,不应该如此的排斥。
从W3C标准的定义可以看出:W3C标准并不是某一个单独的标准,而是一系列标准的集合,包括结构、表现、行为三部分。这里的结构指的是标准化结构语言:XHTML、XML,而不是单指DIV。而网站重构更是一种理念,并不是做出一个页面来然后到http://validator.w3.org/通过了验证,就是一个好的页面,我们并不是为了标准而标准。网站重构所推崇的理念,应该是以更符合语义化的标签来构建简洁且易于维护的页面,良好的扩展性以及优秀的用户体验。
最后说点题外话,虽然现在WEB前端技术也渐渐地被重视,但国内的整体现状还是比较“惨淡”。浮躁的氛围让技术人才往往过早放弃了自己的技术生涯,而尔虞我诈的整体道德水平也让单纯的技术人员痛不欲生~~~希望还在这条路上奋斗的朋友们,保持好心态、把握好机会,曙光会出现的。
关于写CSS,本民工比较习惯于手写,很多写样式软件写写得快是快,但写出来的东西总会觉得有种“不干净”的感觉。个人看法而已哈,不过既然是手写,CSS的缩写当然是要注意的,会让你的CSS看起来很简洁,也容易阅读。接下来,把经常用到的一些简写形式来总结一下。
颜色(color)
16进制的色彩值,如果每两位的值相同,可以缩写一半,
例如:#000000可以缩写为#000;#336699可以缩写为#369;
盒尺寸(margin、padding)
通常有下面四种书写方法:
property:value1; 表示所有边都是一个值value1;
property:value1 value2; 表示top和bottom的值是value1,right和left的值是value2
property:value1 value2 value3; 表示top的值是value1,right和left的值是value2,bottom的值是value3
property:value1 value2 value3 value4; 四个值依次表示top,right,bottom,left
本民工的计算方法是按顺时针数,上右下左。
例如:margin:1em 0 2em 5px;
边框(border)
边框的属性如下:
border-width:1px;
border-style:solid;
border-color:#000;
缩写的顺序其实都可以互换,不过推荐用以下的缩写顺序:
语法是border:width style color;
例如上面的可缩写为:border:1px solid #000;
背景(Backgrounds)
背景的属性如下:
background-color:#f00;
background-image:url(background.gif);
background-repeat:no-repeat;
background-attachment:fixed;
background-position:0 0;
可以缩写为一句:background:#f00 url(background.gif) no-repeat fixed 0 0;
语法是background:color image repeat attachment position;
你可以省略其中一个或多个属性值,如果省略,该属性值将用浏览器默认值,默认值为:
color: transparent
image: none
repeat: repeat
attachment: scroll
position: 0% 0%
另外要注意的是position属性在缩写时如果只想定义其中一个,也需要把另一个加上。
字体(fonts)
字体的属性如下:
font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:1em;
line-height:140%;
font-family:”Lucida Grande”,sans-serif;
可以缩写为一句:font:italic small-caps bold 1em/140% ”Lucida Grande”,sans-serif;
要注意,如果你缩写字体定义,至少要定义font-size和font-family两个值。
不过font-family值大部分情况下都会全局定义,所以也不是经常用到。
列表(lists)
取消默认的圆点和序号用这句:list-style-type:none;
list的属性如下:
list-style-type:square;
list-style-position:inside;
list-style-image:url(image.gif);
可以缩写为一句:list-style:square inside url(image.gif);
这个平时也用得少咯。
做为一个Web Desginer,不可能不跟WEB标准打交道。但说起什么是W3C标准,却未必都能说得出。其实这种概念上的东西并不需要像记语法那样牢牢记住咯,理解以及应用才是关键。就好比之前一直按自己经验中的一个“标准”来做东西,直到后来才知道这个“标准”其实就是叫W3C标准。下面的东西基本上都摘自网络,就当做一个备忘咯。
WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。
1.结构标准语言
(1)XML
XML是The Extensible Markup Language(可扩展标识语言)的简写。目前推荐遵循的是W3C于2000年10月6日发布的XML1.0,参考(www.w3.org/TR/2000/REC-XML-20001006)。和HTML一样,XML同样来源于SGML,但XML是一种能定义其他语言的语。XML最初设计的目的是弥补HTML的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换和描述。
(2)XHTML
XHTML是The Extensible HyperText Markup Language可扩展标识语言的缩写。目前推荐遵循的是W3C于2000年1月26日推荐XML1.0(参考http://www.w3.org/TR/xhtml1)。XML虽然数据转换能力强大,完全可以替代HTML,但面对成千上万已有的站点,直接采用XML还为时过早。因此,我们在HTML4.0的基础上,用XML的规则对其进行扩展,得到了XHTML。简单的说,建立XHTML的目的就是实现HTML向XML的过渡。
2. 表现标准语言
CSS是Cascading Style Sheets层叠样式表的缩写。目前推荐遵循的是W3C于1998年5月12日推荐CSS2(参考http://www.w3.org/TR/CSS2/)。W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构,使站点的访问及维护更加容易。
3.行为标准
(1)DOM
DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/),DOM是一种与浏览器,平台,语言的接口,使得你可以访问页面其他的标准组件。简单理解,DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对像。
(2) ECMAScript
ECMAScript是ECMA(European Computer Manufacturers Association)制定的标准脚本语言(JAVAScript)。目前推荐遵循的是ECMAScript 262(http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM)。
关于这个问题,各人有各人的习惯吧,以前在公司的时候,有位同事的风格习惯很不一样,搞得有点相互不兼容,呵呵。
在构建一个页面的时候,是先写好HTML代码呢?还是先写好CSS呢?按标准来说,是先把HTML页面写好,再写CSS来定义,而且看起来很酷!但是在实际操作中,几乎不可能一次性把HTML先写好而不用修改的,也许因为构建思路的问题、或者一些事先没预料到的特殊问题、又或者因为浏览器兼容的问题……都有可能再去改动到HTML代码。当然,这样的改动是小意思了,主要是这样的方法不方便测试,在你的CSS没有写完之前,页面里会有很多还未定义的标签,预览的话页面有可能会乱,而且也不便于问题的排察。
大多数情况下,我还是建义HTML跟CSS同时进行,每写了一段之后用多个浏览器进行测试。至于写多少测试一下就要看各人的经验水平了。本人习惯的写法步骤是这样的:
写先好页面的布局部分,也就是外套,头部,中间部分以及中间部分的左、中、右,以及版权部分。我一般是先定义样式,然后再在DW里把该样式插入。
然后再写各部分的内容。比如说头部,我们可以在里面加LOGO部分,以及NAV部分等等。而NAV里我们有可能还会定义sub……就这样一层层地由外至内。
在这里,本民工也只是说说个人的一些见解,欢迎指正,共同学习、共同提高。
我想只要是跟DIV+CSS打交道的朋友,肯定都碰到过闭合浮动元素的问题,或者叫做清除浮动元素。因为按照CSS的规范,浮动的元素(float)会被移出文档流,当它的高度超出其父容器的高度时,父容器不会自动伸长以闭合浮动元素。这就是我们所碰到的闭合浮动元素的问题。
解决此问题的方法有很多,下面一一分析一下。
一、额外标签法。
这是最常见是一种方法,也是W3C推荐使用的一种方法。此方法的做法就是在内容的末尾加上一个空标签,常用的做法是:
.clearfloat {clear:both;}
然后在内容的末尾加上
<br class="clearfloat" />
或者
<div class="clearfloat"></div>
当然你也可以使用其它的块级元素,但是用<br>的话,在IE中能清除浮动但不能闭合元素。额外标签法的标准写法应该是这样的:
.clearfloat {
clear:both;
height:0;
font-size: 1px;
line-height: 0px;
}
这样基本上就能适应所有的状况了。
此方法最为通用,但是由于增加了一个空标签,某些有“洁僻”的朋友会觉得HTML代码显得不够简洁。
二、使用after伪类
使用after伪类的做法就是在指定的现在内容末尾添加新的内容,通常是加一个小“.”,并把它隐藏,可以通过它来闭合浮动元素。但是,Win/IE6并不支持after伪类,所以还不得不单独针对Win/IE6进行hack处理。
.clearfloat {
display:inline-block;
}
/* Hack Begine \*/ 这里出现的反斜杠(\)是为了区分Win/IE跟Mac/IE,只针对Win/IE进行hack
* html .clearfloat {
height:1%;
}
.clearfloat {
display:block;
}
/* End Hack */
把此类加在浮动元素的父容器上就可以清除浮动。但本民工不喜欢用这种方法,因为我觉得用hack方法太烦琐不好掌握,而且又远离标准。
三、设置父容器的overflow
把父容器的overflow属性设为hidden或auto同样也能清除浮动,但是单单设置overflow属性在IE6中会不起作用,需要触发一下layout,一般可以指定一个维度,或者是用zoom:1;。
#clearfloat {
overflow:auto;
height:1%;
}
此方法用起来也很方便的,但是overflow有可能会影响到浏览器的表现,所以用此方法时多调试一下。另外,此方法能在浏览器表现正常,但是在Dreamweaver中浮动元素还是会乱。
四、浮动外部元素,float-in-float
给浮动元素的父容器也加上浮动属性,浮动元素能闭合浮动元素。此方法很方便,效果也好,但缺点也很明显,父容器并不是想浮动就浮动,相邻元素有可能会发生变化,再嵌套一层DIV的话又会觉得有些烦琐,所以此方法有可能会给布局增加难度。
总结
想要兼容浏览器闭合浮动元素的方法还是很多的,具体情况具体分析,在这里说的也未必详尽,如果哪位朋友有更好的方法或不同的意见,欢迎讨论与分享!
虽然DIV不像TABLE那要需要把容器内的内容都加载了才能显示,但是为了标准化,当然还是越少嵌套越好。
常用的列表元素有ul ol li dl dt dd,其中ul li用得比较多。先说说ol与ul,其实两者是一样的。
<ol>是有序列表
1
2
3
4
5
6
7
8
9
| <ol>
<li>……</li>
<li>……</li>
<li>……</li>
</ol>
页面显示为:
1……
2……
3…… |
<ul>是无序列表
页面显示为li前是大圆点而不是123……
dl dt dd的用法
1
2
3
4
5
| <dl>//dl为内容块
<dt>内容标题</dt>//dt为内容块的标题
<dd>内容1</dd>//dd为内容
<dd>内容2</dd>
</dl> |
dt 和dd中可以再加入 ol ul li p等标签。熟练运用这些列表元素,可以在布局时减少DIV的嵌套。