Mar 3

  关于IE6下line-height属性失效问题,以前也遇到过几次。不过由于时间关系,没有深究,就用padding解决了。今天又遇到了问题,最后发现IE6下line-height属性失效是由于文字中包含img、input、select、textarea、button、object造成的。

          解决办法:

                  对和文字相连接的img、input、textarea、select、object等元素加以属性:
                  margin: (所属line-height-自身高度)/2px 0; 
                  vertical-align:middle;

  下面是实例演示代码,请在IE6中运行

Mar 2

  当li的子元素中有浮动(float)时,IE6/IE7中li会产生3px空隙的bug的。
   

  XHTML  
        
  1.       <ul id="list">
  2.     
  3.               <li><div>vapour</div></li>
  4.     
  5.               <li><div>百度</div></li>
  6.     
  7.               <li><div>淘宝</div></li>
  8.     
  9.               <li><div>迅雷</div></li>
  10.     
  11.       </ul>
  12.   

   

  经过测试发现:li的子元素浮动只是这个bug产生的必要条件,这个bug产生的充要条件是li的子元素浮动并且li设置了以下CSS属性之一:width、height、zoom、padding-top、padding-bottom、margin-top、margin-bottom。

          知道了这个bug的产生条件,所以解决方法也就有了:

  
    方法1
  
    #list div设置clear:left|both,这时#list li不能设置width、height、zoom。
  
    方法2
  
    #list li设置float:left,这时#list li可以设置width、height、zoom。
  
    #list li设置clear:left|both,这时#list li不能设置width、height、zoom。
  
    方法3

  特别感谢 meimei 的指教,IE6/IE7的这个Bug可以通过给li中的div设置vertical-align:top|middle|bottom解决。太怪异了,只要加上vertical-align的值是三者之一即可。

   

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>IE6/IE7中li底部3px的Bug</title><style type="text/css">ul{margin:0;padding:0;list-style:none;}hr{clear:both;}.list li{width:420px;}.list div{float:left;width:400px;height:24px;background:red;}.v-top div{vertical-align:top;}.v-middle div{vertical-align:middle;}.v-bottom div{vertical-align:bottom;}</style></head><body><ul class="list">    <li><div>vapour</div></li>            <li><div>百度</div></li>     <li><div>淘宝</div></li>     <li><div>迅雷</div></li> </ul><hr /><ul class="list v-top">    <li><div>vapour</div></li>            <li><div>百度</div></li>     <li><div>淘宝</div></li>     <li><div>迅雷</div></li> </ul><hr /><ul class="list v-middle">    <li><div>vapour</div></li>            <li><div>百度</div></li>     <li><div>淘宝</div></li>     <li><div>迅雷</div></li> </ul><hr /><ul class="list v-bottom">    <li><div>vapour</div></li>            <li><div>百度</div></li>     <li><div>淘宝</div></li>     <li><div>迅雷</div></li> </ul></body></html>
Mar 2
  

    测试页面兼容时,经常会遇到多余空白问题:IE6/IE7中li底部3px的Bugimg在IE6和IE7中导致父层DIV高度多了4px

  

    无论是IE6/IE7,还是IE8/FF/Opera/Chrome都存在这样的问题,只不过是产生的原因各不相同:IE6/IE7中的空隙是因为img前后的空格、换行、回车、缩进产生的;IE8/FF/Chrome/Opera则是line-height和font-size导致的。下面分别列举最常见的情况:

  

    1、li-img

  
    <ul class="list-img">
    <li><img src="garden01.jpg" /></li>
    <li><img src="garden01.jpg" /></li>
    <li><img src="garden01.jpg" /></li>
    </ul>
  
        
  •       li 的子元素包含图片元素(img),会导致li底部多余6px-7px的空隙
  •     
  •       用vertical-align:top|middle|bottom都可以消除li底部多余的6px-7px空隙。兼容各个主流浏览器
  •     
  •       IE6/IE7以外的其它浏览器,还可以给img设置display:block来消除的多余6px-7px空隙,或者设置float:left|right来隐式将img设置成块状元素block
  •   
  

     

  

    2、li-inline

  
    <ul class="list-inline">
    <li><span>http://www.dovapour.com.cn/</span></li>
    <li><span>http://www.baidu.com/</span></li>
    <li><span>http://www.taobao.com/</span></li>
    </ul>
  

    li 的儿子元素是内联元素(inline),会导致li底部出现空隙。

  

    解决办法1:将内联元素(inline)设置成display:inline-block。兼容各个浏览器。

  

    解决办法2:将内联元素(inline)设置成display:block。另外再用zoom:1触发layout来兼容IE6。

  

     

  

    3、li-block

  
    <ul class="list-float">
    <li><div>http://www.dovapour.com.cn/</div></li>
    <li><div>http://www.baidu.com/</div></li>
    <li><div>http://www.taobao.com/</div></li>
    </ul>
    <style type="text/css">
    .list-float li{
    width:300px;
    
}
    .list-float div{
    clear:left;
    float:left;
    background:#CCC;
    
}
    
</style>
  

    当li设置了width,并且li的儿子元素设置了float:left|right和clear:both|left|right,会导致li底部出现3px-4px空隙。

  

    解决办法:给li的儿子元素设置vertical-align:top|middle|bottom。

  

     

  

    4、float-img

  
    <div class="float-img">
    <ul>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    <li><img src="garden01.jpg"></li>
    </ul>
    </div>
    <style type="text/css">
    .float-img{
    width:600px;
    background:#F1F1F1;
    
}
    .float-img ul{
    padding:10px;
    zoom:1;
    
}
    .float-img li{
    float:left;
    background:red;
    
}
    .float-img img{
    border:2px solid orange;
    vertical-align:middle;
    
}
    
</style>
  

    给li设置float:left|right,ul设置padding-top:10px;会导致IE6/IE7中每个li都增加了10px的垂直空隙。

  

    解决方法:通过设置width、height、zoom等方法触发ul 的layout。

  

    另外:将上面的ul和li 都替换成div也存在这个问题,看来这个bug不是li 独有的。

  

     

  

    总结:多余空白问题都可以通过设置vertical-align:top|middle|bottom来解决。第4种情况有点特殊需要触发layout

  null
Feb 23

  http://bbs.blueidea.com/thread-2929636-1-1.html

Feb 22

  js+css结合高亮导航当前页链接

  很多朋友在做网站的时候可能遇到这样一个问题,如何高亮导航当前页链接 
  以育儿网新版导航条来举例
  大家可以看到“首页”2个字做了高亮处理。 

  <div id=”navi”>
          <ul>
              <li><a target=”_blank” title=”首页” href=”http://www.ci123.com/” class=”on” ><span>首页</span></a></li>
              <li><a target=”_blank” title=”父母学堂” href=”http://www.ci123.com/index1.html”><span>父母学堂</span></a></li>
              <li><a target=”_blank” title=”育儿论坛” href=”http://bbs.ci123.com”><span>育儿论坛</span></a></li>
              <li><a target=”_blank” title=”宝宝主页” href=”http://baobao.ci123.com”><span>宝宝主页</span></a></li>
              <li><a target=”_blank” title=”育儿博客” href=”http://blog.ci123.com”><span>育儿博客</span></a></li>
              <li><a target=”_blank” title=”育儿问答” href=”http://ask.ci123.com”><span>育儿问答</span></a></li>
              <li><a target=”_blank” title=”许愿树” href=”http://tree.ci123.com”><span>许愿树</span></a></li>
              <li><a target=”_blank” title=”亲子资源” href=”http://rs.ci123.com”><span>亲子资源</span></a></li>
              <li><a target=”_blank” title=”城市伙伴” href=”http://www.ci123.com/baodian”><span>育儿宝典</span></a></li>
              <li class=”end”><a target=”_blank” title=”活动吧” href=”http://www.ci123.com/huod-bar.html”><span>活动吧</span></a></li>
          </ul>
      </div> 

  蓝色加下划线的地方,就是用来区别“首页”这个链接和其它链接的不同样式的class。

  #navi li a.on,#navi li a:hover{
      background: url(images/navi.gif) top left no-repeat;
      color: Red;
  }#navi li a.on  span,#navi li a:hover span{
      background: url(images/navi.gif);
          background-position: right 25px;
      padding-top: 2px;

  }a 里面的 span 标签是为了实现滑动门效果的。具体可以看CSS滑动门技术这篇文章。下面继续。如果是单个页面,设置这样的效果只要按上面的方法,在需要高亮度链接标识出特定的class就可以了。但在大型网站中,因为频道和页面众多,如果每个频道的头部都为此单独去做一个只是高亮部位不同的文件,那维护起来必然是非常繁琐的。因此,我们将头部分离出来,放入服务器单独的目录,再让各个频道去引用这个单独的文件。这样在维护的时候,就可以一次修改。多次使用。具体引用的方式在不同的语言和架构上有不同的方法,这个和我们要说的东西又是另一回事。回到这里,如果是引用的同一个头部文件,那么就没有办法给每个链接区按一个class,那又如何按频道高亮呢。下面有个函数:function highlightPage(){
      if(!document.getElementsByTagName) return false;
      if(!document.getElementById) return false;
      if(!document.getElementById(’navi’)) return false;
      var nav = document.getElementById(’navi’);
      var links = nav.getElementsByTagName(’a');
      for (var i=0;i<links.length;i++){
          var linkurl =  links[i].getAttribute(’href’);
          var currenturl = document.location.href;
              if(currenturl.indexOf(linkurl)!=-1){
                  links[i].className = ’on’;
                  return true;
              }
      }

  }这个js的前三行,是用于判断dom上的节点是否能取到,以及浏览器对document.getElementsById方法的支持程度。 

  到了第三行开始,建立了一个 nav的变量,并给它赋值document.getElementById(’navi’)。 

  navi是唯一的。而它下面的诸多a 标签,用links[]这个数组再进行赋值。 

  赋值完成后,就开始遍历。一遍links的数组,每遍历一个数组成员,都用 links[i].getAttribute(’href’) 将这个成员的’href’属性值取出,放入临时变量linkurl,同时用l将页面当前的地址也取出放入currenturl这个变量。 

  如http://www.ci123.com/  因为基本网页的实际地址长度都会大于页面代码href的里面所写的路径,所以我们用indexOf这个方法来判断 currenturl 里面是否包含 linkurl的字符串,如果结果为true,我们就给这个链接的className赋值’on’ 设定它为当前链接。然后返回。 

  这样开头的那个高亮效果就实现了。

   

  -----------------------------------------------------------------------------------------------

  <script>
  function addloadEvent(fun){
      var olonload=window.onload;
      if(typeof window.onload!='function'){
          window.onload=fun;
      }else{
          window.onload=function(){
              olonload();
              fun();
          }
      }
  }
  function highlightpage(){
      if(!document.getElementsByTagName) return false;
      if(!document.getElementById) return false;
      if(!document.getElementById("navigation")) return false;
      var nav=document.getElementById("navigation");
      var links = nav.getElementsByTagName("a");
      for(var i=0;i<links.length;i++){
          var linkurl=links[i].getAttribute("href");
          var currenturl= window.location.href;
         if(currenturl.indexOf(linkurl)!=-1){
                   var a=linkurl.lastIndexOf("/")+1
                  var b=linkurl.lastIndexOf(".")
                  var c=linkurl.substring(a, b)
              links[i].className=c;
          }
      }
  }
  addloadEvent(highlightpage);
  </script>
  <style>
  a.nava:{}
  a.navb:visited{color:red}
  a.navc:{}
  a.navd:{}
  </style>
  <div id="navigation">
  <ul>
  <li><a href="nava.htm">111</a></li>
  <li><a href="navb.htm">222</a></li>
  <li><a href="navc.htm">333</a></li>
  <li><a href="navd.htm">444</a></li>
  </ul>
  </div>

分页: 3/7 第一页 上页 1 2 3 4 5 6 7 下页 最后页 [ 显示模式: 摘要 | 列表 ]