半夜睡不着觉,起来写第一博。

近段时间,公司要给一个网站产品增加一个换色功能,安排我负责该事项。

之前参与过一些定制项目,是基于该产品的二次开发,说实话里面的前端结构很混乱。所以第一步就是将html前端标签进行了重构,规范了标签结构和className。第二步就开始按照产品原有的样式增加CSS代码。

在这时碰到了一个圆角边框的问题,以前的代码是在每个页面写一个固定结构的div,使用背景图片来实现圆角边框。代码结构大致如下:

  1. .top_border{background:url(topborder.png);}
  2. .left_border{background:url(leftborder.png);}
  3. .right_border{background:url(rightborder.png);}
  4. .bottom_border{background:url(bottomborder.png);}
  1. <div>
  2. <div class="top_border"></div>
  3. <div class="left_border"></div>
  4.  
  5. <div class="content">
  6.     ...
  7. </div>
  8.  
  9. <div class="right_border"></div>
  10. <div class="bottom_border"></div>
  11. <div>

在重构时,我直接把这个结构修改为最简化的版本

  1. <div class="content"></div>

这里就有点问题:使用boder-radius可以实现圆角边框,但是不支持IE7 、IE8。

当时我认为,我的这个规范是正确的,所以希望通过不修改HTML的代码结构来完成对IE7/IE8的兼容。

搜索了一下IE7/IE8的解决方案:http://www.cnblogs.com/binyong/archive/2009/11/30/1613376.html

就以此为基础,使用js来对IE7/IE8进行兼容。主要代码逻辑如下:

  1. if( typeof (document.documentElement.style["border-radius"]) == "string")//判断是否支持
  2. {
  3. $.fn.extend({//实现圆角
  4. borderRadius : function (r)
  5. {
  6.         var b = this.wrap("<div></div>").parent();
  7.         //以下代码 主要以逻辑为主 并非真实执行代码 ,为四角 border-radius = 5的实现        
  8.  
  9. //调整margin 及 宽度 以符合旧div的布局   
  10. b.css( {margin : this.css("margin") , "width ": this.clientWidth});        
  11. this.css({margin:"0"});                
  12. var borderColor = this.css("border-color");
            var background = this.css("background-color");
  13.        var borderStyle = this.css("borer-style");
  14.  
  15.         //重设边框,只保留两侧边框        
  16. this.css({"border-top-width":"0","border-bottom-width":"0"});//

  17.         //创建HTML结构,实现上下边框
  18.         var setting = { m: [1,2,3,5],bw : [1,1,2,0] };
  19.         var i = 0;
  20.         for(; i < 3; i++)
  21.         {
  22.           var t = $("<b><b>").css({"height": 1 , "margin" : "0 " + setting.m[i] + "px",
  23.               "border-left-width" : setting.bw[i] +"px","border-right-width" : setting.bw[i] +"px",
  24.               "border-color":borderColor,"background-color":background});
  25.           b.append(t);
  26.           b.prepend(t.clone(true));
  27.         }
  28.         var t = $("<b><b>").css({"height": 1 , "margin" : "0 " + setting.m[i] + "px",
  29.               "border-width" : "0",
  30.               background-color":borderColor});
  31.         b.append(t);
  32.         b.prepend(t.clone(true));
  33. }
  34. });
  35. $(".content").borderRadius(5);//设置圆角
  36. $(".border1").borderRadius(5);
  37. }

虽然运行时的HTML结构变化了,但是编码时的HTML结构没有变化,也算是一种兼容方式吧。

还记得以前也有JS处理过一些其他伪类的兼容,一起列出来:

场景:鼠标移入显示二级菜单。

通常的做法:

  1. .menu{}
  2. .menu li ul{display:none;}
  3. .menu li:hover ul{display:block;}
  1. <ul class="menu">
  2. <li><a>一级</a>
  3. <ul >
  4. <li><a>二级</a></li>
  5. <li><a>二级</a></li>
  6. </ul>
  7. </li>
  8. </ul>

当IE6不支持时,可以进行调整

  1. .menu{}
  2. .menu li ul{display:none;}
  3. .menu li:hover ul,.menu li_hover ul{display:block;}/*增加了一个样式名*/

增加兼容JS

  1. if(不支持:hover)
    {
    $(".menu li").hover(function(){$(this).addClass("li_hover");},function(){$(this).removeClass("li_hover");})
    }

增加下面的JS,还可以兼容触屏

  1. if(触屏)
  2. {
  3. $(".menu li").click(function(){
  4. var isHover = $(this).hasClass("li_hover");
  5. if(!isHover)
  6. {
  7. $(this).addClass("li_hover");
  8. }
  9. else
  10. {
  11. $(this).removeClass("li_hover");
  12. }
  13. });
  14. }

以上这些方式仅是个人喜好而已。欢迎各位发表见解。

前端CSS兼容的一些思路的更多相关文章

  1. 【转】Web前端浏览器兼容初探

    原文地址:http://blog.jobbole.com/38638/ 前言 浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易选择忽略,而形成两个极端: ...

  2. css兼容各个浏览器的三角形图标

    css兼容各个浏览器的三角形图标 在当前流行的的网站上,我们经常会看到一些小三角形的下拉提示(微博顶部的下拉菜单),简单的方式可以使用一张图片代替,但是随着前端技术的发展,以及开发者对于前端性能的“吹 ...

  3. 前端CSS编程之道-LESS

    由于前端css编写繁琐,最近开始学习LESS,用LESS编写文件.less文件可以直接编译成我们要的.css文件 学习Less 我下面是我练习时的截图,希望小伙伴也能动手自己写一下,而不是复制粘贴模式 ...

  4. 扯一扯前端css的整体架构设计:(2)base基础类的那些事儿

    周一下午在实验室写了第一篇博文,有几个人捧场,那咱就得接着下去啊.然后我觉得现在写的内容更多的偏向于谈一下我对于前端css架构的理解和前端经验的一个小总结,所以就把标题里原来的[项目总结]给删掉了.但 ...

  5. Web前端浏览器兼容初探

    浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易选择忽略,而形成两个极端: 1 我最开始都是使用IE6,IE6上没问题,其它浏览器坑爹(多出现与前端后端 ...

  6. 浏览器 CSS 兼容写法的测试总结

    做前端最讨厌的就是 IE6,7,8,虽然被淘汰的浏览器,但是在中国用户仍然很多,不可能像国外网站一样直接就不管它了,这样会流失很多流量啊. 现在有了IE9,IE10还好些,几乎和 Chrome,Fir ...

  7. 前端CSS - 相对定位,绝对定位,固定定位

    前端CSS - 相对定位,绝对定位,固定定位 1.1 相对定位 position:relative 相对定位,就是微调元素位置的.让元素相对自己原来的位置,进行位置的微调. 也就是说,如果一个盒子想进 ...

  8. js和css兼容问题

    (一)html部分 1.H5新标签在IE9以下的浏览器识别 <!--[if lt IE 9]>  <script type="text/javascript" s ...

  9. [转]Web前端浏览器兼容

    转自: http://www.admin10000.com/document/1900.html 前言 浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易 ...

随机推荐

  1. MYSQL一对多,两表查询合并数据

    select a.askid,a.title,GROUP_CONCAT(b.message SEPARATOR '----') as content from gg_ask as a join gg_ ...

  2. CSS实现div居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. C++ STL基本容器的使用

    C++中有两种类型的容器:顺序容器和关联容器.顺序容器主要有vector.list.deque等.其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与 ...

  4. Python自动化运维之21、CSS

    一.css简介 CSS 是 Cascading Style Sheets的缩写,称为层叠样式表,用来设计网页的样式布局,以及大小来适应不同的屏幕等,使网页的样式和网页数据分离, 二.导入css 导入c ...

  5. 通过Web Deploy方式部署WCF

    如何发布WCF, 其实它有很多种方式去发布WCF服务到IIS上,这篇文章将介绍通过Web Deploy的发布方式去部署. 步骤: 在IIS上创建一个网站 打开IIS, 右击“Site” -> & ...

  6. fpdf使用標楷體

    <? require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); $pdf->AddPage(); $ ...

  7. COALESCE函数

    --SQL学习笔记一 --函数coalesce --功能返回参数中第一个非NULL值 --语法 COALESCE ( expression [ ,n ] ) --创建测试表 IF OBJECT_ID( ...

  8. Sql自动生成字母加数字的随机数

    /* select char(65+ceiling(rand()*25)) --随机字母(大写) select char(97+ceiling(rand()*25)) --随机字母(小写) selec ...

  9. HDU2050(分平面问题)

    分平面问题: 一.n条直线最多分平面问题. n条直线最多可以把平面分成多少个区域? 此类问题主要采用递归的思想.当有n-1条直线时,平面最多被分成了f(n-1)块区域.如果要使第n条直线分的区域最多, ...

  10. AOJ 0558 广度优先搜索

    题意:在 H * W 的地图里有 N 个工厂,每个工厂分别生产硬度为1-N 的奶酪,有一只老鼠准备把所有奶酪都吃完.老鼠的初始体力值为1,每吃一个奶酪体力值加 1.已知老鼠不能吃硬度大于当前体力值的奶 ...