虚心使人进步

虚心学习,天天向上......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  大家都在学习CSS网页布局,研究着CSS定位、浮动,以及各种CSS属性的应用与设置技巧。这本身并没有什么问题。也值得大家去研究学习。但往往忽视了一个重要的领域,那就是HTML。我在52CSS.com的文章中,不止一次的强调,语义和结构。大家可能也看得烦了。认为这没有什么,认为这并不重要。

  没有良好的HTML文档作为基础,我们的CSS网页布局往往困难重重。如同是,一幛建筑,本身就有质量问题。你去装修,怎么弄都会有问题,除了消耗更多的材料、精力,还会让最终的装修效果大打折扣。CSS网页布局同样如此,如果HTML文档,本身结构不合理,没有注重语义,我们除了要编写更多的CSS样式去定义,还会让HTML代码繁琐。这与WEB标准本身的理念是背道而驰的。

  我们52CSS.com今天继续与大家讨论这方面的内容。或许您看了下面的案例,你对HTML将会有新的认识。同时也希望能引起你学习的欲望,能意识到,CSS网页布局,不止是学习CSS。

  一、引子

  在52CSS.com的论坛,有网友提出这样一个问题,说是页面元素在FF中出现了错位的现象。

  原贴:

  打开他的页面,我们看到如下效果:

  

 

  查看HTML源文件,得到了如下的代码:  


  1. <div id=product> 

  2.  

  3. <span><a href="/product/Stainless_Steel_runching_hole_mesh/">Stainless Steel runching hole mesh</a></span><br /> 

  4. <div id=list align="left"> 

  5. <a href="/product/Stainless_Steel_runching_hole_mesh/"><img src="/up_files/image/article/2009/02/20/TN/34812561_70_80.jpg" alt="Stainless Steel runching hole mesh" border=0 /></a> <em>We can provide perforated metals for decoration, screening, separation, sifting,..</em> 

  6. </div> 

  7.  

  8. <span><a href="/product/aluminim_plate_runching_hole_mesh/">aluminim plate runching hole mesh</a></span><br /> 

  9. <div id=list align="left"> 

  10. <a href="/product/aluminim_plate_runching_hole_mesh/"><img src="/up_files/image/article/2009/02/20/TN/33976161_70_80.jpg" alt="aluminim plate runching hole mesh" border=0 /></a> <em>Weaving and Characteridtic :it is punched to mesh ,including:aluminim plate mesh..</em> 

  11. </div> 

  12.  

  13. <span><a href="/product/Expanded_Metal_Mesh/">Expanded Metal Mesh</a></span><br /> 

  14. <div id=list align="left"> 

  15. <a href="/product/Expanded_Metal_Mesh/"><img src="/up_files/image/article/2009/02/19/TN/60598081_70_80.jpg" alt="Expanded Metal Mesh" border=0 /></a> <em>Material: Superior steel material Processing: Expanded with steel or other meta..</em> 

  16. </div> 

  17.  

  18. <span><a href="/product/crimped_wire_mesh/">crimped wire mesh</a></span><br /> 

  19. <div id=list align="left"> 

  20. <a href="/product/crimped_wire_mesh/"><img src="/up_files/image/article/2009/02/19/TN/60198941_70_80.jpg" alt="crimped wire mesh" border=0 /></a> <em>Material: Stainless steel wire 301 ,302 ,304, 304L ,316 ,316L, 321 Iron Wire Red..</em> 

  21. </div> 

  22.  

  23. <span><a href="/product/Punching_Hole_Mesh/">Punching Hole Mesh</a></span><br /> 

  24. <div id=list align="left"> 

  25. <a href="/product/Punching_Hole_Mesh/"><img src="/up_files/image/article/2009/02/19/TN/34749721_70_80.jpg" alt="Punching Hole Mesh" border=0 /></a> <em>Also named mine screen mesh, mechanic screen mesh. It can be supplied in folded ..</em> 

  26. </div> 

  27.  

  28. </div> 

  相关CSS代码:  


  1. #product{  

  2. margin: 2px;  

  3. }  

  4. #product a{  

  5. color: #1A9CCE;  

  6. }  

  7. #product a:hover{  

  8. color: #EF8D3D;  

  9. }  

  10. #product span{  

  11. font-family: Arial, Helvetica, sans-serif;  

  12. font-size: 13px;  

  13. line-height: 25px;  

  14. font-weight: bold;  

  15. color: #5199DB;  

  16. float: left;  

  17. margin-left: 2px;  

  18. width: 250px;  

  19. text-align: left;  

  20. display: block;  

  21. }  

  22. .list{}  

  23. .list img{  

  24. float: left;  

  25. height: 50px;  

  26. width: 50px;  

  27. border: 1px solid #CCCCCC;  

  28. padding: 2px;  

  29. margin: 2px;  

  30. }  

  31. .list em{  

  32. clear: none;  

  33. float: left;  

  34. height: 50px;  

  35. font-family: Arial, Helvetica, sans-serif;  

  36. font-size: 12px;  

  37. line-height: normal;  

  38. color: #3587B3;  

  39. padding: 2px;  

  40. margin: 2px;  

  41. font-style: normal;  

  对上面的代码,作一下简要的评述,可能并不全面。

  1、id的定义需要用引号。如,div id=product,应为,div id="product"

  2、同一个页面中id具有唯一性,楼主将多个div的id设置为list

  3、将样式彻底分离到CSS中,而不是在HTML文件内,align="left"类似这样的代码都要去除。

  4、未重视HTML结构语义。HTML标签应用不规范,如,标题用span,描述性图片与文字用div。

  5、再谈语义,这个页面元素本身的结构就是列表。可以用无序列表,也可以用定义列表。而不是楼主所理解的标签组织方式。

  6、页面存在的问题可能是id为list的CSS定义,选择器是.list,样式未产生作用。也可能是宽度理解差异造成的。

  二、思考

  上面的代码编写思路,在初学的时候往往认为是非常正确、无可厚非。只要用标签将内容组织起来,然后应用CSS样式进行定义,使HTML文档在浏览器中显示出想要的效果,即是进行了CSS网页布局,不再是table布局而符合WEB标准了。

  本文作者:52CSS.com 如需转载请建立本站链接(http://www.52css.com/),并且不得随意改动文章内容、保留此版权声明文本!

  其实不然,CSS网页布局本身需要设置的对象就是HTML标签与页面元素。如果这些没有组织好,再强大的CSS知识可能也无能为力。如上面的编码,CSS设置繁琐,更容易出错。样式本身不易于管理,等等。

  那我们该如何对这样的页面元素进行定义呢?

  或许您会想到无序列表ul,将每一组单元,看成是一个列表项li,列表项li中,再包括标题,缩略图和描述文字。如图所示。

  

 

  我们的HTML代码可以是这样:  


  1. <ul> 

  2.     <li> 

  3.     <strong><a href="">CSS实例:一个简单的form搜索表单</a></strong> 

  4.     <p><a href=""><img src="01.jpg" alt="01" /></a></p> 

  5.     CSS网页布局中不可避免的会遇到表单元素。有网友提出了这样的问题。对表单...  

  6.     </li> 

  7. </ul> 

  然而这样应用也并不贴切。在XHTML中还有另外一种列表形式,定义列表dl。

  可以参考这里:

  dt——代表HTML自定义列表标题

  可以将标题视为定义列表中列表组的标题dt。

  dd——代表HTML自定义列表描述

  可以将缩略图和描述文字视为列表组中对标题的描述与释义dd。

  如图所示。

  

 

  我们的编码可以是这样的:  


  1. <dl> 

  2.     <dt><a href="">CSS实例:一个简单的form搜索表单</a></dt> 

  3.     <dd><a href=""><img src="01.jpg" alt="01" /></a>CSS网页布局中不可避免的会遇到表单元素。有网友提出了这样的问题。对表单...</dd> 

  4. </dl> 

  三、解决

  以上面的思考为基础,开始对这个页面元素重新编写。HTML编码。  


  1. <dl id="product"> 

  2.     <dt><a href="">CSS实例:一个简单的form搜索表单</a></dt> 

  3.     <dd><a href=""><img src="01.jpg" alt="01" /></a>CSS网页布局中不可避免的会遇到表单元素。有网友提出了这样的问题。对表单...</dd> 

  4.     <dt><a href="">用ul+li打造图书目录效果</a></dt> 

  5.     <dd><a href=""><img src="02.jpg" alt="02" /></a>ul无序列表是一个非常重要的HTML标签,页面中许多元素都用它来组织。图书目录...</dd> 

  6.     <dt><a href="">CSS经典技巧:text-indent隐藏文字</a></dt> 

  7.     <dd><a href=""><img src="03.jpg" alt="03" /></a>以图换字是CSS布局中非常常用的一种手段,因为图片文字有时候比可选的文字的...</dd> 

  8.     <dt><a href="">制作CSS半透明效果的浮动层</a></dt> 

  9.     <dd><a href=""><img src="04.jpg" alt="04" /></a>CSS网页布局中常常会遇到各种各样的问题,由于产品和项目的需要,往往引出...</dd> 

  10.     <dt><a href="">纯CSS实现中英文双语 导航菜单</a></dt> 

  11.     <dd><a href=""><img src="05.jpg" alt="05" /></a>CSS导航菜单一直是大家所关心的问题。52CSS推出的实例也很多,今天向大家介...</dd> 

  12. </dl> 

  对上面的编码进行CSS样式定义.

  

  重置CSS样式。


  1. * {  

  2.     margin:0;  

  3.     padding:0;  

  定义整个dl的宽度,设置外边距、内边距和边框。 


  1. #product {  

  2.     width:240px;  

  3.     margin:30px auto;  

  4.     padding:0 4px 8px 4px;  

  5.     border:1px solid #ccc;  

  定义dt标题的样式,设置宽度和高度,定义上外边距、行距。强制在一行显示,溢出隐藏。可以避免文字过多撑开dt的现象。  


  1. #product dt {  

  2.     width:240px;  

  3.     height:26px;  

  4.     margin-top:8px;  

  5.     line-height:26px;  

  6.     white-space:nowrap;  

  7.     overflow:hidden;  

  定义dt标题的链接样式。  


  1. #product dt a {  

  2.     font-size:14px;  

  3.     color:#06f;  

  4.     text-decoration:none;  

  5. }  

  6. #product dt a:hover {  

  7.     color:#00f;  

  8.     text-decoration:underline;  

  定义dd描述的CSS样式,设置宽度和高度,定义文字大小与行距。设置溢出隐藏。这样就将描述中的文字部分的CSS样式编写完毕了。  


  1. #product dd {  

  2.     width:240px;  

  3.     height:64px;  

  4.     font-size:13px;  

  5.     line-height:21px;  

  6.     color:#333;  

  7.     overflow:hidden;  

  定义dd描述中链接元素a的CSS样式,向左浮动,定义边框,右外边距定义。使图片与文字产生一定的距离。

  定义缩略图的大小。使链接a元素的边框与图片有1px的距离,将外边距设置为1px。设置边框为0。

  本文作者:52CSS.com 如需转载请建立本站链接(http://www.52css.com/),并且不得随意改动文章内容、保留此版权声明文本!

  在悬停状态下,定义链接元素a的边框颜色为蓝色。

  此至,编码全部完成。

  最终的效果如图所示: