来源:http://www.enet.com.cn/article/2010/0106/A20100106596840.shtml

使用Table布局页面为什么是不明智的?

大家看到标题,不要误解认为在页面中不能使用Table,而是可以使用Table,但是尽量不要用Table去布局页面,为什么这么说呢,因为使用Table布局页面会使页面失去灵活性,怎么个灵活法呢,比如今天你好不容易做出来的页面,第二天老板说我不喜欢登录模块放到右边,还是放到左边,通知板块放到右侧去,页面风格最好一个月换一种,如果遇到这种老板,提出这种要求,并且你的页面是用Table布局的,那么你会崩溃的,工作量那是大大滴~,如果不相信的话,你们自己可以找个页面,用Table布局出来,然后变换板块和风格,你就会体会到Table布局的不灵活性,这是为什么呢,因为Table的诞生是为存储数据用的,功能和Execel差不多,不是用来布局用的,只不过后来大家发现用Table可以把想放的页面元素,比如图片,放到任何自己想放的地方,且做出来的页面可以兼容多种浏览器,于是Table就承担起了布局页面的重担,这一做就是好几年… …直到Web2.0时代的到来,Table才从布局页面的工作中逐渐解脱,专心的去存储数据^_^

既然Table是为存储数据诞生的,那谁的诞生是为了页面布局呢?

答案就是:DIV,DIV就是为布局页面而诞生的,只不过一直不被人认同,原因就是DIV去布局页面需要CSS的配合,使用比较繁琐,还不如Table拖拖拽拽页面就布局OK了,感觉还不如Table方便,从而DIV被人们放置在一个无人问津的昏暗角落里,暗暗的等待着伯乐的出现,直到2003年美国加州Scott Design公司参加了在旧金山举办的有关网页排版和设计的一个研讨会上的演讲,使DIV看到了阳光,走出了阴霾… …

说了那么多,我们对比一下Table布局页面和DIV布局页面的优缺点

使用表格进行页面布局会带来很多问题:

* 把格式数据混入你的内容中。这使得文件的大小无谓地变大,而用户访问每个 页面时都必须下载一次这样的格式信息,带宽并非免费。

* 这使得重新设计现有的站点和内容极为消耗劳力 (且昂贵)。

* 这还使我们保持整个站点的视觉的一致性极难,花费也极高。

* 基于表格的页面还大大降低了它对残疾人和用手机或 PDA 浏览者的亲和力。

而使用CSS进行网页布局,它会:

* 使你的页面载入得更快

* 降低你的流量费用

* 让你在修改设计时更有效率而代价更低

* 帮助你的整个站点保持视觉的一致性

* 让你的站点可以更好地被搜索引擎找到

* 使你的站点对浏览者和浏览器更具亲和力

* 在世界上越来越多人采用 Web 标准时,它还能 提高你的职场竞争实力 (事实上也就是降低失业的风险)。

网上有一篇文章,转过来,文章着重介绍DIV三点优势,也许看完文章后,就像社区元老heflyaway说的感觉作者比较迷恋Table,每篇文章都不可避免的带有个人色彩,而转出来的目的,其实就是想给大家降降DIV+CSS的温度,免得“走火入魔”,视DIV+CSS是为万能的,如果想学好CSS布局页面,就要从多个方面看它,好了,不多说了,下面是作者对CSS布局页面的三点优势及理解:

1、内容和形式分离,网页前台只需要显示内容就行,形式上的美工交给CSS来处理。生成的HTML文件代码精简,更小打开更快。

2、改版网站更简单容易了,不用重新设计排版网页,甚至于不用动原网站的任何HTML和程序页面,只需要改动CSS文件就完成了所有改版。对于门户网站来说改版就像换件衣服一样简单容易。

3、搜索引擎更友好,排名更容易靠前。

第一点、内容和形式分离

网页前台只需要显示内容就行,形式上的美工交给CSS来处理。生成的HTML文件代码精简,更小打开更快。

这个是DIV+CSS技术最显著的特点,也是CSS存在的根源。完全的颠覆现在传统(table)网页设计的技术。所有现在用table制作的内容,都可以用CSS来解决掉,而且解决的更完美,更强大。不需要大家再表格套表格,让生成的网页文件大小更精简,更小。table时代,一个页面表格达到10个以上是非常普遍的事情,但是现在用DIV+CSS,一个table都可以不用,就完全达到之前的效果,这就直接导致网页文件大小比使用table时减少50%-80%,更节约各位站长的硬盘空间,访问者打开网页时更快,而且用div+CSS时,不像以往使用table时,必须把全部table读取完了才显示页面内容,现在是可以读一个div就显示一个效果,大家打开网页不用等。好处真是明显而强大。

这个优点的确是显著的,凡是使用传统table建的网页,内容多的话,有时候达到30K左右都有可能,文件打了打开时,肯定就有0.0几秒的延迟。使用DIV+CSS,你前台打开看到的全是直接内容,CSS文件都是导入链接的,是另一个文件,根本和HTML文件大小没关系,这种生成的HTML文件,一个也就10K左右大小。

第二点,改版网站更简单容易了

不用重新设计排版网页,甚至于不用动原网站的任何HTML和程序页面,只需要改动CSS文件就完成了所有改版。

DIV+CSS对于门户网站来说改版就像换件衣服一样简单容易,改版时,不用改动全站HTML页面,只需要重新写CSS,再用新CSS覆盖以前的CSS就可以实现改版了。方便吧。

第三点,搜索引擎更友好,确实能够对SEO起到一定的帮助。

通过DIV+CSS对网页的布局,可以让一些重要的链接、文字信息,优先让搜索引擎蜘蛛爬取。这对于SEO也有帮助。

综上所述,个人感觉DIV+CSS不能太迷信它的很好很强大,它作为制作网页,美化网页的一个重要辅助是很强大方便的。可以弥补table制作框架和表格时的很多不足和美工上的缺点,但是完全只用它来做,太费时费力,对于全国中小型网站长来说,真的不太适合。我个人觉得用table+DIV+CSS是最好的组合,也是最省时省力的办法。

还需要再说明一下,本节讲得是Table布局页面和CSS布局页面的问题,讨论的是“布局页面”上用谁更好,并不是说在CSS布局的页面内不能用Table,真正厉害的人物是DIV、Table、CSS用得恰到好处,他们三个各做各的事情,DIV布局页面,Table存储数据,CSS给页面穿衣服!

一月 7th, 2010

海岸山的卡通主页

No Comments, 我的作品, by admin.

海岸山主页的灵感很随意,因为这本来就是一个很随意的网站,只要看了简洁生动。

————————————————————————————————————————————————

地址:http://www.haianshan.com

如果数据表格对于视力没问题的用户都难以阅读,那么想像一下对于那些必须使用辅助技术(比如屏幕阅读器)的人来说它们是多么复杂和混乱。幸运的是,XHTML规范提供了许多元素和属性来提高数据表格对于这种设备的可访问性。这些元素和属性当前并非都得到了屏幕阅读器的支持,但是尽可能使用它们肯定是好做法。

summary & caption

第一个元素是表格的caption,它基本上用做表格的标题。尽管这不是必须有的元素,但是尽可能使用caption总是好的。另一个有用的元素是表格的summary。summary属性可以应用于表格标签,用来描述表格的内容。与image的all文本相似,summary应该总结表格中的数据,编写得出色的summary可以减少用户阅读表格内容的需要。

<table id=”playlistTable”summary=”Top 15 songs played.Top artist~
include ColdplayJ Yeah Yeah Yeahs,Snow Patrol J Deeper Water,Kisl
of Leon J EmbraceJ Oasis,Franz FerdinandJ]et,The Bees,Blue stars.s
Kaiser Cheifs and Athlete”>
<caption>Top 15 Playlist</caption>
</table>

thead & tbody & tfoot

thead、tbody和tfoot使开发人员能够将表格划分为逻辑部分。例如,可以将所有列标题放在thead元素中,这样就能够对这个特殊区域单独地应用样式。如果选择使用thead或tfoot元素,那么必须至少使用一个tbody元素。在一个表格中只能使用一个thead和tfoot元素,但是可以使用多个tbody元素将复杂的表格划分为更容易管理的部分。

行和列标题应该使用th标记而不是td,但是如果某些内容既是标题又是数据,那么它仍然应该使用td。表格标题可以设置值为rOW或col的scope属性,定义它们是行标题还是列标题。它们还可以设置值rowgroup或colgroup,表示它们与多行或多列相关。

<thead>
<tr>
<th id=”playlistP0sHead” scope=”col”>Playllst Position</th>
<th scope=”col”>Tzack Name</th>
<th scope=”col”>Aztist</th>
<th scope=”col”>Album</th>
<Itr>
</thead>


col & colgroup

虽然tr元素使开发人员能够对整行应用样式,但是很难对整列应用样式。为了解决这个问题,W3C引入了colgroup和col元素。colgroup能够对使用col元素定义的一个或多个列进行分组。不幸的是,支持col和colgroup元素的样式的浏览器并不多。

<colgroup>
<col ld=”P1ayllstC01″/>
<col id=”trackCol”/>
<col id=”aztLstCol”/>
<col id=”albumCol”/>
</colgroup>

CSS学习越深入,我们需要关注的细节之处就越多,特别是当效果全部实现的时候,我们更注重的是网页的速度,也读取的效率,这也很大程度上关系到用户体验。
通过以下11步,检查下你的CSS是不是效率最高的~这些并非个人观点,集合网上老手的经验之谈!

1、十六进制的颜色值对位数与大小写
编写十六进制颜色值时你可能会用小写字母或省略成3位数,关于这写法没找到确实的数据证明对浏览器的渲染效率是否有影响,但十六进制的颜色值默认标准是大写及6位数标注。在未知情况下不希望冒险而降低了渲染的效率。
* 不赞成 – color:#f3a;
* 建议用 – color:#FF33AA;
2、display与visibility的差异
他们用于设置或检索是否显示对象。display隐藏对象不保留物理空间,visibility为隐藏对象保留占据的物理空间。当浏览器渲染被占据的物理空间时,会有所消耗资源。
* 不赞成 – visibility:hidden;
* 建议用 – display:none;
3、border:none;与border:0;的区别
和display与visibility的关系类似,分别不保留与保留空间。更多的是border:0;尽管可以隐藏掉边框,但它会为你保留border-color/border-style的使用权。
* 不赞成 – border:0;
* 建议用 – border:none;
4、不宜用过小的背景图片平铺
一张宽高1px的背景图片,虽然文件体积非常之小,但渲染宽高500px的板块需要重复平铺2500次。提高背景图片渲染效率跟图片尺寸及体积有关,最大的图片文件体积不超过约70KB。
* 不赞成 – 宽高8px以下的平铺背景图片
* 建议用 – 衡量适中体积及尺寸的背景图片
5、慎用IE滤镜
IE的滤镜除了比较消耗资源外也有兼容性问题。当中有让PNG透明的滤镜,可采用GIF或JPG似透非透的办法来避免使用此滤镜。建议只在IE6应用GIF透明,因为IE7以上已经支持了PNG透明。
* 不赞成,滥用IE滤镜因为消耗资源外也有兼容性问题。
* 建议用,最好选择其它方法能避免使用滤镜。
6、*{ margin:0; padding:0;}  免浏览器样式差异
*号通配符把所有标签都初始化一遍,浏览器的渲染消耗一定的资源。有部分在标签在不同浏览器上几乎无差异,或是某些已经不推荐使用的标签(因为你不会去用它),它们不需通配符要重新初始化一遍这样做能节省一点资源。
* 不赞成,使用*号通配符
* 不赞成,div span button b table等标签纳入通配符控制内外填充样式
* 建议用,有选择性地使用通配符控制内外填充样式。
7、不要添加额外的标签来描述class或id
如果你有一个选择器是以id作为关键选择符,请不要添加多余标签名上去。因为ID是唯一的,你不要为了一个不存在的理由而降低了匹配的效率。
* 不赞成 – button#backButton { }
* 不赞成 – .menu-left #newMenuIcon { }
* 建议用 – #backButton { }
* 建议用 – #newMenuIcon { }
8、尽量选择最特殊的类来存放选择器
降低系统效率的一个最大原因是我们在标签类中用了过多的选择符。通过添加 class 到元素,我们可以将类别进行再细分为 class 类,这样就不用为了一个标签浪费时间去匹配过多的选择符了。
* 不赞成 – treeitem[mailfolder="true"] > treerow > treecell { }
* 建议用 – .treecell-mailfolder { }

9、避免子孙选择符

子孙选择符是CSS中最耗资源的选择符。他真的是非常的耗资源,尤其是在选择器使用标签类或通用类的时候。很多情况中,我们真正想要的是子选择符。除非有明确说明,在 UI CSS 中是严禁使用子孙选择符的。
* 不赞成 – treehead treerow treecell { }
* 好一点,但还是不行(参照下一条) – treehead > treerow > treecell { }

10、标签类中不要包含子选择符
不要在标签类中使用子选择符。否则,每次元素的出现,都会额外地增加匹配时间。(特别是当CSS选择器似乎多半会被匹配的情况下)
* 不赞成 – treehead > treerow > treecell { }
* 建议用 – .treecell-header { }
11、留意所有子选择符的使用
小心地使用子选择符。如果你能想出一个的不使用他的方法,那么就不要使用。特别是在 RDF 树和菜单会频繁地使用子选择符,像这样。
* 不赞成 – treeitem[IsImapServer="true"] > treerow > .tree-folderpane-icon { }
请记住 RDF 的属性是可以在模板中被复制的!利用这一点,我们可以复制那些想基于该属性改变的子 XUL 元素上的 RDF 属性。
* 建议用 – .tree-folderpane-icon[IsImapServer="true"] { }

css垂直居中


用 CSS 垂直居中,多数是在有高度的情况下,或者容器高度不定的情况下,会看上去比较舒服,而且实现的方法也不少。
以下一些方法可能看到代码会一下子想不同为什么能够实现,但请一定要理解,只有理解了它的居中思想,你才能活用他们,复制黏贴是没有效果的,这些不是万能垂直居中的代码!万能垂直居中代码也有,很复杂,你要吗?记住,我们遵循的还有一个规则是:web标准!你可以在这里了解到:遵循web标准的好处。

我们还要遵循一个理念:凡是 table 布局可以实现的,CSS也 一定可以实现。CSS 可以实现的,table 未必能做到。


一、单行内容的居中


只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 height 两值相等,再加上 over-flow: hidden 就可以了

.middle-demo-1{
height: 4em;
line-height: 4em;
overflow: hidden;
}

优点:
1. 同时支持块级和内联极元素
2. 支持所有浏览器

缺点:
1. 只能显示一行
2. IE中不支持<img>等的居中

要注意的是:
1. 使用相对高度定义你的 height 和 line-height
2. 不想毁了你的布局的话,overflow: hidden 一定要,为什么?

请比较以下两个例子:

<p style=”background: #900; color: #00f; font: bold 12px/24px Helvertica,Arial,sans-serif; height:24px; width:370px;”>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
<br/>
<br/>
<p style=”background: #090; color: #00f; font: bold 12px/2em Helvertica,Arial,sans-serif; height:2em; width:370px; overflow: hidden;”>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
上一个高度是用的绝对单位px,并且没有隐藏溢出,下一个高度用的单位是相对单位em,并且隐藏了溢出。
如果你的浏览器支持放大字体,那么尽情地放大字体,看看会出现什么效果(错位会把所有的页面其他元素遮挡掉)。


二、多行内容居中

也很简单,给出一致的 padding-bottom 和 padding-top 就行

.middle-demo-2{
padding-top: 24px;
padding-bottom: 24px;
}
优点:
1. 同时支持块级和内联极元素
2. 支持非文本内容
3. 支持所有浏览器
缺点:
1. 容器只能固定高度



三、把容器当作表格单元


CSS 提供一系列diplay属性值,包括 display: table, display: table-row, display: table-cell 等,能把元素当作表格单元来显示。这是再加上 vertical-align: middle, 就和表格中的 valign=”center” (表格中垂直居中)一样了。


.middle-demo-3{
display: table-cell;
height: 300px;
vertical-align: middle;
}
可惜IE不支持这些属性,IE的的很垃圾,不过在其他浏览器上显示效果非常完美。

要注意的是:和一个合法的<td>元素必须在<table>里一样,display: table-cell 元素必须作为 display: table 的元素的子孙出现。


优点:

不用说了吧,就是表格,效果和表格一模一样

缺点:

IE下无效


四、以毒攻毒!用 IE 的 bug 解决 IE 中的绝对居中


先不得不说一句,IE 真的是个很烂的浏览器,CSS1中的定义都不支持,害得要我们转个大圈子来造居中。不过就像我说的,凡是 table 布局可以实现的,CSS 一定可以实现,即使在 IE 里也不例外。我研究 IE layout 模式多年,还是找出了一个可以在 IE 中绝对居中的方法。这个方法就是基于 IE layout 的 bug,也可以算以毒攻毒。至于原理,不要问我,这是独门秘学,何况三言两语也讲不清楚,只要好用就行
.middle-demo-4{
height: 300px;
position: relative;
}

.middle-demo-4 div{
position: absolute;
top: 50%;
left: 0;
}

.middle-demo-4 div div{
position: relative;
top: -50%;
left: 0;
}


五、利用绝对定位

#main{width:640px; height:480px; margin:-240px 0 0 -320px; position:absolute; top:50%; left:50%;}

上例中需要居中的物体宽为640px,高位480px,top:50%与left:50%和在一起的效果就是指向页面中的中心点。然后减去物体宽的一半、减去物体高的一半,这时候物体的中心点与页面中心点正好重合,完美居中!
优点:
1.方便,易懂
缺点:
1.只适合单个页面需要放单个物体居中的时候使用,否则会造成其他元素错位。