网站开发日志

2009年5月17日星期日

几个HTML编码的良好习惯

坚持做一件事情真的很难,就比如说坚持写Blog。最近写文章的频率明显下降,也许是最近比较忙,但是也可能这只是借口。

另外也有好几周没上Nettut了,今天看到了这篇30 HTML Best Practices for Beginners,觉得写得比较好,在此推荐给大家。没有准备全文翻译,只是针对自己没有做好的几点做个‘检讨’:-)

1. 坚决不用inline的CSS样式

<p style="color: red;">
  这段字体为红色
</p>

专家建议只有在页面HTML代码完成后才考虑CSS样式。不要图一时方便,把CSS样式直接加入HTML标签里。

2. 把所有外部CSS代码都放在Head标签里

通常情况下我也是这么做的。这么做的首要目的是,加快页面的加载速度。

3. 学会使用Firebug

Firebug也是我喜欢的Firefox扩展插件,但是我从来没有认真的研究过它的功能。专家提示:大部分Firebug用户只用到体验到2成的Firebug提供的功能。看来要找时间好好的学习学习。

下面是两个资源:

4. 使用H1-H6标签

从词意学上讲,使用H1-H6标签对SEO比较有帮助。因为H - 代表标题, 而P代表段落,所以用H(例如H6)代替P,有利于搜索引擎的对文章内容的获取。

5. 下载使用ySlow

还没用过,专家建议下载使用ySlow, 是配合Firebug的Firefox插件,可以对现有网页进行优化分析。刚刚下载了,貌似不错。

6. 网站完成后,压缩代码

下面几个网站提供JS和CSS压缩的服务。其实我也用过,只是每次更新网站,要重复解/压缩,觉得有点烦。

7. 学习Photoshop

学习中... 下面是专家建议的PS学习网站,有空一定去看看。

  • Visit the Videos section at Psdtuts+
  • Enjoy the "You Suck at Photoshop" series.

  • 标签: ,

    2009年4月7日星期二

    CSS文本垂直居中的最终方案

    关于"CSS文本垂直居中"的文章在网上可以找到很多,它们主要涉及3种方法:

    单行文本垂直居中

    方法:把文本段落高度(line-height)和所在区域高度(height)设为一致即可。缺点:这种方法只对单行文本有效。

    代码:

    <div style="border:1px solid #ccc; height:50px; line-height:50px;">
    
    网站开发日志
    
    </div>

    效果:

    网站开发日志

    多行文本垂直居中

    方法: 不设区域高度(让高度自适应), 然后在区域上下位置使用相同的填充控制,即使用padding属性。缺点:对固定高度的区间无效。

    代码:

    <div style="border:1px #ccc solid; padding:20px 0; width:578px;">
    
    www.61dh.com/blog
    
    本博客用于记录网站开发的点点滴滴。包括网站设计,编程指南,资源和灵感。
    
    本站的文章大都是原创或者翻译作品。
    
    </div>

    效果

    www.61dh.com/blog 本博客用于记录网站开发的点点滴滴。包括网站设计,编程指南,资源和灵感。本站的文章大都是原创或者翻译作品

    浏览器居中:

    方法: 设置position属性为绝对(absolute), 然后把在上方留下浏览器高度一半减去文本区域高度一半的距离,例如文本区域高度为浏览器高度的20%,那么上方应该留下50%-10%=40%;同理,在左边留下浏览器宽度一半减去文本区域宽度一半的距离。

    缺点:这种方法只是让文本在落在浏览器中央,而并非在某个特定区域的中间。

    代码:

    <div style="position:absolute; top:40%; left:40%; width:20%; height:20%">
    
    本博客用于记录网站开发的点点滴滴。包括网站设计,编程指南,资源和灵感。
    
    本站的文章大都是原创或者翻译作品。我并不反对转载,因为互联网本来就是用来共享资源的。
    
    但是当你引用我的文章时,请注明出处。谢谢!
    
    </div>

    效果

    由于上面的三种方法都存在缺点,因此它们往往不是你所想要的方案。在实际运用中,你可能需要在让多行文本在一个特定高度的区域内垂直居中。当以上三种方法都行不通的情况下,请试试下面要介绍的CSS文本居中的最终方案!

    其实最终方案并不复杂,有点麻烦的是浏览器的兼容性问题。因此,我们必须创建2套CSS样式方案:

    .outer {
    
      display:table; width:578px; overflow:hidden; 
    
      background: #eee; height: 42px;
    
    }
    
    .middle {display:table-cell; vertical-align:middle; margin-left 10px;} 
    
    /*下面的CSS是针对IE7,IE6*/
    

    <!--[if lte IE 7]>

    <style>

    .outer{position:relative;}
    
    .middle{position: absolute; top: 50%;}
    
    .inner{position: relative; top:-50%}
    </style>
    <![endif]-->

    这里我们需要定义三个DIV:

    • 外层(outer) 可以根据需要定义高度、宽度,但是display必须为table。
    • 中间层(middle) 可以有特定的CSS样式,例如:margin-left,但是display必须为table-cell,vertical-align必须为middle。
    • 内层(inner) 主要是用来对付IE6和IE7的(注意:IE8支持table-cell居中,所以无需hack)。

    有了上面的CSS,HTML代码可以这么写:

    <div class="outer">
    
      <div class="middle">
    
        <div class="inner">
    
          把你要居中的文本放在这里
    
          这是第二行
    
          ...
    
        </div>
    
      </div>
    
    </div>

    演示

    标签: ,

    2009年3月25日星期三

    你应该知道的几个少见的HTML标签

    今天在nettuts上看到一篇关于比较少见的HTML标签介绍,觉得这些标签还是挺有价值的,准备通过这篇文章和大家一起学习一下。

    1. <cite>

    我在日志里有时会用到<blockquote>(块状引用标签),Windows Live Writer的工具条上带有这个工具,使用它很容易给一个引用的段落加上这个标签。<cite>标签也是用来引用的,默认情况下浏览器会使用斜体来显示<cite>标签内的文字。演示:中文斜体很丑

    2. <optgroup>

    使用这个标签可以把<select>(选择标签)下相关的选项列在一起并且可以加上小标题。

    <select id="pz">
    
          <optgroup label="组合">
    
              <option value="cn7" selected="selected">N选七</option>
    
          </optgroup>
    
          <optgroup label="其他">
    
             <option value="other">自定义</option>
    
          </optgroup>
    
    </select> 

    上面HTML代码来自是我写的彩票电脑选号器,有兴趣的朋友可以看看可以看看。

    3. <acronym> 和 <abbr>

    <acronym>用于首字母缩写, 这个标签我虽然见过,但是从来没用过。貌似挺酷的,很可能在以后的项目里用到。<abbr>和<acronym>显示,只是意思稍有不同,它用于单词简写,

    61<acronym title="Developer's Home">dh</acronym>
    
    <!--dh本来是daohang(导航的缩写)--> 

    演示:61dh (把鼠标放到dh上看效果) ; 简写:央视

    4. <address>

    顾名思义,就是把地址放在这个标签里,默认情况下浏览器会使用斜体来显示标签内的文字。如果你和我一样觉得中文斜体很难看,你可以用CSS来改变address内的文字样式。演示如下:

    Adam Cai 61dh RD Somewhere, USA

    5. <ins>和<del>

    一个表示插入,一个表示删除。<del>和<strike>标签效果相同。这个应该算是有用,特别对于已经发布的日志进行修改。

    效果:插入删除

    6. <label>和<fieldset>

    这两个估计大家在表单里有看到,<label>用于表单控件前,通常用来表示控件的名称。<fieldset>用于把表单的内容框在一起。

    <form>
    
      <fieldset>
    
        <legend>不完全表单</legend>
    
        <label for="username">名字</label>
    
        <input id="username" type="text">
    
      </fieldset>
    
    </form>

    演示:

    不完全表单

    7. rel

    rel 不是HTML标签,但是它是一个非常有用的标签属性,我实在学习jQuery时学到这个标签的,通常我们可以通过在标签属性来选择标签,例如我在上篇日志里用到:

    <a rel="popin" href="....">rel标签属性</a>
    
    //使用下面的方法可以选中上面这个链接标签
    
    $("a[rel^='popin']").click(function(){
    
    ...});

    如果你想对HTML标签了解更多,建议阅读W3SCHOOL的介绍。中文 英文

    标签:

    2009年3月8日星期日

    面包屑(Breadcrumb)导航条

    breadcrumb

    演示和代码

    经常访问我网站的朋友一定注意到我更新了网站的导航条。上次的更新是在去年十月份,具体的介绍请看这篇文章日志模板更新。虽然上次更新的时候觉得旧款的导航条还挺漂亮的,但是时间一长我就开始厌烦了。特别是两个星期前,我在网上看到这款苹果风格的面包屑导航条,就深深地爱上了它。今天终于有空把它搬到了自己的网站上。

    总的来讲,这款导航条还是比较容易整合到网站上。主要碰到的问题还是浏览器的兼容性问题。原创的版本在IE6下根本是不能用的,可是在访问我网站的朋友里,大约有三分之一还在使用IE6,因此就算我不情愿,我也要把它修改成和IE6兼容。其实在这次IE6下最大的问题是:原创版本用PNG做背景,所以在IE6下原本透明的PNG背景被加上了一层淡淡的蓝色。关于IE6的PNG不透明问题在网上讨论的很多,我尝试过其中一种使用javascript的解决方法,但是效果很差,因此我干脆使用photshop把PNG转换成GIF,虽然转换后的背景图边缘不如PNG的平滑,但是整体效果还行,基本上看不出有什么区别。另外一个问题:在IE6/IE7浏览器里中文导航字在垂直方向不会居中,我没有找到更好的办法,只好给IE特别写了一行CSS样式代码。此外,我还加入了搜索栏,但是碰到类似问题:搜索栏在IE6下垂直方向不居中,因此又给IE6写了一行CSS。最终的效果图如上,如果你非常挑剔,那么你可能还注意到,那个搜索图标在垂直方向稍微有点偏上,这回是Firefox的问题了,它在IE里显示正常。不管了,总之我已经挺满意。希望这回不要过早的喜新厌旧。:-) 下面要介绍如何制作这款导航条。

    1.HTML代码:

    <ul id="breadcrumb">
    
      <li><a href="/"><img src="home_blk.gif" alt="Home" class="home" /></a></li>
    
      <li><a href="/blog" class="chinese">博客</a></li>
    
      <li><a href="/blog/categories" class="chinese">日志分类</a></li>
    
      <li><a href="/blog/categories/jquery.html">jQuery</a></li>
    
      <li><a href="http://feed.feedsky.com/61dev" target="_blank" title="订阅本日志"><img src="rss.gif" alt="订阅本日志" class="home" /></a></li>         
    
      <li>Search Result</li>        
    
      <li style="float:right;">          
    
        <form action="http://www.61dh.com/search" id="cse-search-box">
    
          <div>
    
           <input type="hidden" name="cx" value="partner-pub-8060693734982386:qvg7d0-myh2" />
    
           <input type="hidden" name="cof" value="FORID:11" /> 
    
           <input type="hidden" name="ie" value="UTF-8" /> 
    
           <input type="text" name="q" size="31" /> 
    
           <input class="srch" src="search.gif" type="image"> 
    
          </div> 
    
         </form> 
    
         <script type="text/javascript" src="http://www.google.cn/coop/cse/brand?form=cse-search-box&amp;lang=en"></script>               
    
        </li>
    
    </ul>

    上面的HTML代码没什么特别之处,只是些HTML列表(list)而已。值得注意的是: 当列表内容是图片,使用了CLASS ('home');当列表内容是中文,使用CLASS ('chinese')。此外,因为搜索栏是靠右的,所以其列表使用了CSS 'float:right'。

    2. CSS代码

    <style type="text/css">
    
    body{font: 12px Arial, Helvetica, sans-serif;}
    
    h1{font-size:22px;}
    
    #breadcrumb{
    
        background-image:url('bc_bg.gif'); 
    
        background-repeat:repeat-x;
    
        height:30px;
    
        line-height:30px;
    
        color:#9b9b9b;
    
        border:solid 1px #cacaca;
    
        width:100%;
    
        overflow:hidden;
    
        margin:0px;
    
        padding:0px;
    
    }
    
    #breadcrumb li {
    
        list-style-type:none;
    
        float:left;
    
        padding-left:10px;
    
    }
    
    #breadcrumb a{
    
        height:30px;
    
        display:inline;
    
        float:left;
    
        background-image:url('bc_separator.gif'); 
    
        background-repeat:no-repeat; 
    
        background-position:right;
    
        padding-right: 15px;
    
        text-decoration: none;
    
        color:#454545;
    
    }
    
    #breadcrumb a:hover{color:#35acc5;}
    
    .home{border:none;margin: 8px 0px;}
    
    .srch{display:inline; padding:5px 10px 0 0;}
    
    </style>
    
     <!--[if lt IE 7]>
    
       <style type="text/css">
    
         .srch{display:inline; padding:7px 10px 0 0;}
    
       </style>
    
    <![endif]-->
    
    <!--[if IE]>
    
       <style type="text/css">
    
         .chinese{ margin-top:2px;}
    
       </style>
    
    <![endif]--> 

    在原版的CSS上,我给#breadcrumb a, 加入了float:left,这解决了导航条在IE6下的显示问题,另外使用GIF替代PNG,还有一些小调整。最后要提醒注意的是:我给IE6和IE专门定制了CSS,用来解决本文开头提到的浏览器兼容问题。

    演示和代码

    标签: , ,

    2009年3月1日星期日

    CSS 信息框

    信息框在网站开发中比较常用,它可以用来引起网站访问者的注意;并且用来转递某种信息。例如Google的个性化主页iGoogle,有时会有一个信息框停靠在页面上方的中部,用来提示用户他们新增了一些功能。信息根据其传递内容的不同大致可以分为3种:

    • 1. 成功提示 (success) - 通常用绿色来表示
    • 2. 错误提示 (error) - 通常用红色来表示
    • 3. 通知提示 (notice) - 通常用黄色来表示

    哈哈,是不是和交通灯很相似啊。这里要介绍的两套CSS/HTML信息框,或许它们可以用在你的Project里。

    一. 横条型 演示

    HTML 代码:

    <div class="message notice">
    
      <div class="msg_head_img">
    
        <a class="close" href="#"><img src="/images/close.gif" border="0"/></a>
    
      </div>  
    
      通知提示信息<!--请用实际信息替代-->
    
    </div>
    
    <br />
    
    <div class="message success">
    
      <div class="msg_head_img">
    
        <a class="close" href="#"><img src="/images/close.gif" border="0"/></a>
    
      </div>
    
      成功提示信息
    
    </div>
    
    <br />
    
    <div class="message error">
    
      <div class="msg_head_img">
    
        <a class="close" href="#"><img src="/images/close.gif" border="0"/></a>
    
      </div>
    
      错误提示信息
    
    </div>

    上面的三段HTML代码分别用于显示通知、成功、错误信息。主要的CSS样式有:message、notice、sucess、error。message是共用的,其它三种分别代表不同的信息类型。具体样式表如下:

    .message {
    
      padding: 5px;
    
      border: 2px solid #ddd;
    
      background-color: #eee;
    
      color: #222;
    
      font-size:12px;
    
    }
    
    .notice {
    
      background: #FFF6BF;
    
      color: #817134;
    
      border-color: #FFD324;
    
    }
    
    .success {
    
      background: #E6EFC2;
    
      color: #529214;
    
      border-color: #C6D880;
    
    }
    
     
    
    .error {
    
      background: #FBE3E4;
    
      color: #D12F19;
    
      border-color: #FBC2C4;
    
    }

    二. 框框型 演示

    HTML 代码:

    <div class="msg_h yellow1">
    
      <div class="msg_head_img">
    
      <a class="close" href="#"><img src="/images/close.gif" border="0"/></a>
    
      </div>
    
       <div class="msg_head_txt yellow2" >
    
          信息标题
    
      </div>
    
      <div class="msg_body">
    
         通知提示信息
    
      </div>
    
    </div>
    
    <br />
    
    <div class="msg_h green1">
    
      <div class="msg_head_img">
    
      <a class="close " href="#"><img src="/images/close.gif" border="0"/></a> 
    
    </div>
    
       <div class="msg_head_txt green2" >
    
          信息标题
    
      </div>
    
      <div class="msg_body">
    
         成功提示信息
    
      </div>
    
    </div>
    
    <br />
    
    <div class="msg_h red1">
    
      <div class="msg_head_img">
    
      <a class="close " href="#"><img src="/images/close.gif" border="0"/></a> 
    
      </div>
    
       <div class="msg_head_txt red2" >
    
          信息标题
    
      </div>
    
      <div class="msg_body">
    
         错误提示信息
    
      </div>
    
    </div>

    和第一套CSS信息框不同的是,这一套包含有标题栏。CSS样式同样包含有共用的class和各自的class,具体如下:

    .msg_h{border:2px solid; height:auto; width:300px;}
    
    .msg_head_img{float:right; display:inline; padding-top:3px;}
    
    .msg_head_txt{padding:5px; font-size:12px; font-weight:normal;}
    
    .msg_body{padding:10px;}
    
    .yellow1{border-color: #FFD324;}
    
    .yellow2{background:#FFD324; color:#817134;}
    
    .green1{border-color: #C6D880;}
    
    .green2{background:#C6D880; color:#529214;}
    
    .red1{border-color: #FBC2C4;}
    
    .red2{background:#FBC2C4; color:#D12F19;}

    你可能注意到在这两套CSS信息框里都用到了以下HTML代码:

    <div class="msg_head_img">
    
      <a class="close" href="#"><img src="/images/close.gif" border="0"/></a>
    
    </div>

    这段HTML代码提供了一个可点击的图标,目的是让用户可以自由地关闭信息框。其实这可以根据实际情况改变,如果你想让信息框一直显示,那么你可以把<a>元素去掉,另外还可以换上其它小图标用于装饰。如果你想提供关闭信息框的功能,那么只要使用下面的jQuery语句就可以轻松实现:

    <script type="text/javascript">
    
      $(document).ready(function(){
    
        $(".close").click(function(){
    
          $(this).parent().parent().fadeOut('slow');
    
        });
    
      });
    
    </script>
    演示和代码

    标签: , ,

    2009年2月22日星期日

    图片在IE下存在空隙

    前两天在对公司网站进行更新时,遇到一个HTML的问题。最初的代码大致是这样:

    <div class="ban-img" style="height:87px;">
    
      <h1><a href="/"><img src="/images/new/example.gif" border="0" /></a></h1>
    
    </div>

    更新后的代码大致如下: (注:只显示出问题的部分代码

    <div class="ban-img" style="height:87px;">
    <h1>
    <a href="/"><img src="/images/new/example.gif" border="0" /></a>
    </h1>
    </div>

    实际这里我只是把<h1>分行写而已,图片的高度是87px;包含图片的div的高度也是87px,另外div和h1的margin和padding都设为零了,可是更新后的代码在IE下(IE6和IE7)下,图片下方出现一个大约5px的空隙。因为这次更新是针对代码的其他部分,一开始并没有注意得到问题会处在这里,所以花了挺长时间debugging才找出原因。把<h1>和其内容写在同一行后问题就解决了。

    之后,我重新温故了以前收集的有关IE的CSS问题的解决方案。其实这个问题还有一个解决方案,那就是设置img为display:block。如下:

    <div class="ban-img" style="height:87px;">
    <h1>
    <a href="/">
      <img src="/images/new/example.gif" border="0" style="display:block;" />
    </a>
    </h1>
    </div>

    标签: ,

    2009年2月8日星期日

    如何让图标垂直居中

    在网站设计中,为了让一个文本标题更加醒目,或者让一个列表更加美观,我们常常会在文本前加上一个小图标。例如,少儿上网导航的首页,我在标题“请选择频道进入”前就加入一个GO的图标。是不是觉得挺漂亮的?本文要介绍的是如果让在文本前加入图标,并且让图标垂直居中。

    在文本前加小图标的方法有两种:一种是直接用<img>标签,另外一种是使用CSS背景属性。

    1. <img>标签

    HTML的<img>标签,提供align的属性,但是这种属性已经被弃用(deprecated)。另外根据我的经验,img标签的align属性在IE和Firefox下的显示是不同的,使用它很难让图标垂直居中。比较标准的方法应该是通过CSS来定义img的样式属性 - vertical-align (元素的垂直排列)。

    vertical-align可能的值和描述如下:

    1. baseline
      默认。元素放置在父元素的基线上。
    2. sub
      垂直对齐文本的下标。
    3. super
      垂直对齐文本的上标
    4. top
      把元素的顶端与行中最高元素的顶端对齐
    5. text-top
      把元素的顶端与父元素字体的顶端对齐
    6. middle
      把此元素放置在父元素的中部。
    7. bottom
      把元素的顶端与行中最低的元素的顶端对齐。
    8. text-bottom
      把元素的底端与父元素字体的底端对齐。

    通常使用middle就可以让图标和文本水平对齐,但是这和图标的大小、文本的字体大小(font-size))、以及元素的行高(line-height)等都有关系。建议把行高设成和图标的高相同,然后把字体大小设成比行高小2个px。另外还可以根据实际情况调整图标或者文本的上下padding。例如:

    <p class="v1">
    
      <img id="myimg" src="/images/go.gif" border="0" />&nbsp;请选择频道进入
    
    </p>
    
    <!--CSS样式如下:-->
    
    <style type="text/css">
    
      #myimg{
    
        height:24px;
    
        vertical-align:text-bottom;
    
      }
    
      .v1 {
    
        line-height:24px;
    
        font-size:22px;
    
      }
    
    </style>

    2. 使用CSS背景属性

    使用CSS背景属性应该算是最标准的方法,使用它我们可以给文本标题加上特色图标。这种方法在给文本列表加上图标时尤其常用。当然我们还是要注意行高、图标尺寸和字体大小等因素,前面的建议在这种方法里依然适用。例如:

    <style type="text/css">  
    
      .v2 {
    
        font-size: 22px; 
    
        line-height:24px; 
    
        color: #6B9905; 
    
        margin:0; 
    
        padding:15px 0px 15px 30px; 
    
        text-align:left;
    
        background: url(../images/go.gif) no-repeat 0px 15px;
    
      }
    
    </style>
    
    <p class="v2">请选择频道进入</p>

    这里的难点是:background: url(../images/go.gif) no-repeat 0px 15px; 0px/15px指的是图标的横/纵坐标,横坐标为0代表在父元素区间的最左边,纵坐标为15px代表图标从父元素区间的顶部向下移动15px (因为文本的上方padding是15px,所以采用下移15px就可以和文本对齐)。注:关于背景元素,我在以前的文章里有比较详细的介绍。

    演示和代码

    标签: ,