RSS
 

Archive for the ‘css’ Category

IE8正式版的CSS hack

11

E8正式版出来有一段日志了,但是针对ie8正式版的CSS hack却很少,其实这是值得庆幸的,因为ie8修复了很多IE6和IE7的一些BUG,更加接近W3C标准。

针对IE8正式版的CSS hack ”\9″:
基本的写法:

.xiedaima { color/*\**/: blue\9 }

这个IE6、IE7、IE8都能识别;但是IE8不能识别“*”和“_”的css hack;所以我们可以这样写hack:

.xiedaima {width:300px;} /* 所有浏览器*/
.xiedaima {width/*\**/:330px\9;} /* 所有浏览器IE浏览器 */
.xiedaima {*width:310px;} /* IE7和IE6能识别,IE8和FF不能识别*/
.xiedaima {_width:290px;} /* IE6能识别,IE7、IE8和FF不能识别*/

其他一些css hack的测试:

.xiedaima1{ color:#F00; color/*\**/:#00F /*\**/}/*IE6,IE7,IE8,FF,OP,SA识别*/
.xiedaima2{ color:#F00; color /*\**/:#00F /*\9**/}/*IE7,IE8,FF,OP,SA识别*/
.xiedaima3{ color:#F00; color/*\**/:#00F \9}/*IE6,IE7,IE8识别*/
.xiedaima4{ color:#F00; color /*\**/:#00F\9}/*IE7,IE8识别*/

注:“color” 和 “/*\**/” 之间有个空格

 
No Comments

Posted in css

 

前端开发中一些常用技巧总结

14

自己前端开发中常用到的一些技巧及问题解决方法,会常更新,希望对前端路上的朋友有帮助.
1.文章标题列表中日期居右显示的方法:


2010-10-10写代码的文章标题

然后定义span右浮动:

 p span{float:right}

其实这种方法可以延伸到很多情况下,很实用的一种写法;

2.web标准中,同一页面中只能有一个h1标签.很多人知道这个概念,但做到的却很少;

3.空白外边距互相叠加的问题:一般通过添加透明边框或者1px的内边距避免.

4.ie6下max/min-width/height实现,_width: expression(this.width >600 ? “600px” : true);,height同理.

5.html/class/id,最好统一以小写书写,这样更严谨(符合xhtml标准);

6.不推荐用下面代码兼容IE8:

<meta http-equiv="X-UA-Compatible" content="IE=7" />

如果是非短期性页面,尽量避免使用,页面应尽可能保证向后兼容;

7.空div在IE(FF中没有)是有默认高度的,可以用定义:

div { witdh:100%; background:#9c0; ling-height:0}

的方式去掉默认高度;

8.在使用table标签时应该尽可能的利用它本身的属性,最大限度的分离结构与样式.

9.充分利用表单中label标签提升用户体验; 这一点对于页面中那些小的选项框,以及对残障人士阅读网站都有好处. 细节是用户体验的第一步;

10.fieldset, legend标签, 鲜为人知,却很实用的一组标签;它可以很明了的把一组元素框起来,主要用于表单;

11.optgroup标签,鲜为人知,它对提升选择表单用户体验很有帮助.作用? 就是可以在有很多选项时,对这些选项分组:


12.表单都要加name值,name值是一个标示,不同于id,据我所发现,若是未定义name值,非IE浏览器下是无法通过document.formid获取到表单元素的.请看如下代码及注释:

<html>
<head>
<script>
    window.onload=function(){ 
        aler t(document.xdmform.length);  //所有浏览器均会弹出表单元素长度
        aler t(document.xiedaimaform.length);  //仅IE会弹出该表单元素长度
    }
</script>
</head>
<body>
    <form name="xdmform" id="xiedaimaform" action="#">
    ......
    </form>
</body>
</html>
 
No Comments

Posted in css

 

Google谷歌的CSS前景图片合并技术

06

  以前的教程中介绍过背景图片的合并方法。但不只有背景图片能合并,前景图片同样可以。

  在 Google 搜索结果页面中,将其 Logo 图标右键另存为后可以发现,它并非单纯的 Google Logo,而是一块复杂的拼合图片:

查看搜索页面源代码,其 Logo 部分代码如下:
<a id=logo href=”/tz.php?url=www.google.cn/webhp?hl=zh-CN” title=”Google 主页”>Google<img width=168 height=119 src=”/images/nav_logo4.png” alt=”"></a>

其CSS 部分代码如下:
#logo{display:block;overflow:hidden;position:relative;width:150px;height:52px;margin:14px 0 7px}
#logo img{border:none;position:absolute;left:-0px;top:-26px}

  分析上述代码可知,CSS 中 id=logo 的样式父元素采用相对定位方式,定义了宽度和高度,使用 overflow:hidden 来隐藏溢出部分;而 img 元素则采取绝对定位方式,使用 left 和 top 进行图片定位,这与背景图片的定位是一致的。
 
No Comments

Posted in css

 

DIV+CSS编写的XHTML网页对SEO的影响

25

第一:DIV+CSS页面对于spider爬行效 率
Div+Css的代码精简是table无法比拟的,即使DIV+CSS的html 加上对应CSS文件一般都小于table的html文件,div+css实现了样式和布局完全分离,前台垃圾代码大量减少,内容更加突 出,让蜘蛛在你的网站上快速爬行,短时间内爬完你的网站。

第二:改善网页打开速度
众所周之:客户是上帝。搜索引擎也不例外,所以搜索引擎会优先抓取客户体验比较好的网站。真正的SEOer不只是为了追求收录、排名,快速的响应速度是提 高用户体验度的基础网站。试问:如果你打开一个网站需要一分钟以上,你下次还会来这个网站吗?

DIV+CSS布局较Table布局减少了页面代码,加载速度得到很大的提高,这在Spider爬行时是非常有利的。过多的页面代码可能造成爬行超 时,Spider就会认为这个页面无法访问,影响收录及权重。
题外:tale布局的页面打开原理:一般table布局的页面是大表格套中表格,中表格嵌套小表格,小表格 再套小小表格。一般第一个表格(最外边的)要读取完才能显示出来,读取大表格的同时又要读取大表格中的小表格,大大加长了网页打开速度。
即浏览器加载table页面时候通常是加载<table>开始等加载完对于</table>及加载完table的 关闭才将内容送出显示给浏览者,这样让浏览者感到网页等等时间长点从而感觉慢。

第三:对搜索引擎排名的影响
基于XTHML标准的DIV+CSS布局,一般在设计完成后会尽可能的完善到能通过W3C验 证。截止目前没有搜索引擎表示排名规则会倾向于符合 W3C标准的 网站或页面,但事实证明使用XTHML架构的网站排名状况一般都不错。这一点或许会有争议,但樂思蜀本人保持这样的观点,有异议者可以拿三组以上基本同等 质量的网站对比观察。

DIV+CSS对网页的整体控制性要强很多。通过简单的代码修改,即可大幅度对网站进行代码优化改版。实用性很强。
很多人感觉CSS对排名虽然很有利,但是影响排名的因素重多。这并不唯一 的没有基础的同样可以利用表格 但是表格不要超过三层。建议不会css+div的 朋友有时间学习一下

DIV+CSS的不好之处:
1、开发DIV+CSS页面相对于TABLE页面需要更多的开发时间
2、兼容性,因现在处于浏览器大战时期,而各个浏览器的内核不同造成了一点点对CSS属性解释不同而造成兼容问题,这点是新手比较棘手的问题。相信浏览器 在遵循W3C标准下能很好的统一其解释。

 
No Comments

Posted in css

 

条件注释区分非IE浏览器

14

IE浏览器的条件注释虽不太常用,却异常强大,不仅可以用来区分IE浏览器版本

<!–[if IE]> Only IE <![endif]–>
所有的IE可识别
<!–[if IE 5.0]> Only IE 5.0 <![endif]–>
只有IE5.0可以识别
<!–[if gt IE 5.0]> Only IE 5.0+ <![endif]–>
高于IE5.0都可以识别
<!–[if lt IE 6]> Only IE 6- <![endif]–>
低于IE6可识别
<!–[if gte IE 6]> Only IE 6/+ <![endif]–>
IE6以及IE6以上都可识别
<!–[if lte IE 7]> Only IE 7/- <![endif]–>
IE7及ie7以下版本可识别

lte:就是Less than or equal to的简写,也就是小于或等于的意思。

lt :就是Less than的简写,也就是小于的意思。

gte:就是Greater than or equal to的简写,也就是大于或等于的意思。

gt :就是Greater than的简写,也就是大于的意思。

! :就是不等于的意思,跟javascript里的不等于判断符相同

看到这里只可能会觉得<!–[if !IE]> not IE<![endif]–>这样不就可以了吗?
如果你这样想就错了,因为非ie根本不会识别ie的条件注释,所以就直接全部是注释了,
ok,来看看正确的写法吧

<!–[if !IE]><–>
只有不是ie浏览器才能看到这里
<![endif]–>
本来准备到这里加点内容只有非ie能看到的,被编辑器编码了,^_^,现在试试吧,只有非ie能看到哦,
关键是条件注释后头的 <–> 在IE中被当作内部注释,而在非IE浏览器中会闭合之前的注释,从而起到区分非IE浏览器的作用,一般常用<!–>。

 
No Comments

Posted in css

 

用 CSS 实现 Firefox 和 IE 都支持的半透明效果

10
filter:alpha(opacity=50);       /* IE */
-moz-opacity:0.5;               /* Moz + FF */
opacity: 0.5;                      /* 支持CSS3的浏览器(FF 1.5也支持)*/
 
No Comments

Posted in css

 

编写高效整洁CSS代码原则

08

  CSS学起来并不难,但在大型项目中,就变得难以管理,特别是不同的人在CSS书写风格上稍有不同,团队上就更加难以沟通,为此总结了一些如何实现高效整洁的CSS代码原则:

1. 使用Reset但并非全局Reset
  不同浏览器元素的默认属性有所不同,使用Reset可重置浏览器元素的一些默认属性,以达到浏览器的兼容。但需要注意的是,请不要使用全局Reset:

*{ margin:0; padding:0; }

  这不仅仅因为它是缓慢和低效率的方法,而且还会导致一些不必要的元素也重置了外边距和内边距。在此建议参考YUI ResetEric Meyer的做法。我跟Eric Meyer的观点相同,Reset并不是一成不变的,具体还需要根据项目的不同需求做适当的修改,以达到浏览器的兼容和操作上的便利性。我使用的Reset如下:

/** 清除内外边距 **/
body, h1, h2, h3, h4, h5, h6, hr, p,
blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
th, td, /* table elements 表格元素 */
img/* img elements 图片元素 */{
  border:medium none;
  margin: 0;
  padding: 0;
}
/** 设置默认字体 **/
body,button, input, select, textarea {
  font: 12px/1.5 '宋体',tahoma, Srial, helvetica, sans-serif;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
em{font-style:normal;}
/** 重置列表元素 **/
ul, ol { list-style: none; }
/** 重置超链接元素 **/
a { text-decoration: none; color:#333;}
a:hover { text-decoration: underline; color:#F40; }
/** 重置图片元素 **/
img{ border:0px;}
/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }

2. 良好的命名习惯
  无疑乱七八糟或者无语义命名的代码,谁看了都会抓狂。就像这样的代码:

.aaabb{margin:2px;color:red;}

  我想即使是初学者,也不至于会在实际项目中如此命名一个class,但有没有想过这样的代码同样是很有问题的:

欢迎来到写代码

  问题在于如果你需要把所有原本红色的字体改成蓝色,那修改后就样式就会变成:

.red{color:bule;}

  这样的命名就会很让人费解,同样的命名为.leftBar的侧边栏如果需要修改成右侧边栏也会很麻烦。所以,请不要使用元素的特性(颜色,位置,大小等)来命名一个class或id,您可以选择意义的命名如:#navigation{…},.sidebar{…},.postwrap{…}
  这样,无论你如何修改定义这些class或id的样式,都不影响它跟HTML元素间的联系。
  另外还有一种情况,一些固定的样式,定义后就不会修改的了,那你命名时就不用担忧刚刚说的那种情况,如

.alignleft{float:left;margin-right:20px;}
.alignright{float:right;text-align:right;margin-left:20px;}
.clear{clear:both;text-indent:-9999px;}

  那么对于这样一个段落

我是一个段落!

  如果需要把这个段落由原先的左对齐修改为右对齐,那么只需要修改它的className就为alignright就可以了。

3. 代码缩写
  CSS代码缩写可以提高你写代码的速度,精简你的代码量。在CSS里面有不少可以缩写的属性,包括margin,padding,border,font,background和颜色值等,如果您学会了代码缩写,原本这样的代码:

li{
    font-family:Arial, Helvetica, sans-serif;
    font-size: 1.2em;
    line-height: 1.4em;
    padding-top:5px;
    padding-bottom:10px;
    padding-left:5px;
}

就可以缩写为:

li{
    font: 1.2em/1.4em Arial, Helvetica, sans-serif;
    padding:5px 0 10px 5px;
}

  如果您想更了解这些属性要怎么缩写,可以参考《常用CSS缩写语法总结》或者下载CSS-Shorthand-Cheat-Sheet.pdf

4. 利用CSS继承
  如果页面中父元素的多个子元素使用相同的样式,那最好把他们相同的样式定义在其父元素上,让它们继承这些CSS样式。这样你可以很好的维护你的代码,并且还可以减少代码量。那么本来这样的代码:

#container li{ font-family:Georgia, serif; }
#container p{ font-family:Georgia, serif; }
#container h1{font-family:Georgia, serif; }

就可以简写成:

#container{ font-family:Georgia, serif; }

5. 使用多重选择器
  你可以合并多个CSS选择器为一个,如果他们有共同的样式的话。这样做不但代码简洁且可为你节省时间和空间。如:

h1{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h2{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }

可以合并为

h1, h2, h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }

6. 适当的代码注释
代码注释可以让别人更容易读懂你的代码,且合理的组织代码注释,可使得结构更加清晰。你可以选择做的样式表的开始添加目录:

/*------------------------------------
    1. Reset
    2. Header
    3. Content
    4. SideBar
    5. Footer
  ----------------------------------- */

  如此你代码的结构就一目了然,你可以容易的查找和修改代码。
  而对于代码的主内容,也应适当的加以划分,甚至在有必要的地方在对代码加以注释说明,这样也有利于团队开发:

/***    Header  ***/
#header{ height:145px; position:relative; }
#header h1{ width:324px; margin:45px 0 0 20px; float:left;  height:72px;}

/***    Content ***/
#content{ background:#fff; width:650px; float:left; min-height:600px; overflow:hidden;}
#content h1{color:#F00}/* 设置字体颜色 */
#content .posts{ overflow:hidden; }
#content .recent{ margin-bottom:20px; border-bottom:1px solid #f3f3f3; position:relative; overflow:hidden; }

/***    Footer  ***/
#footer{ clear:both; padding:50px 5px 0; overflow:hidden;}
#footer h4{ color:#b99d7f; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; }

7. 给你的CSS代码排序
如果代码中的属性都能按照字母排序,那查找修改的时候就能更加快速:

/*** 样式属性按字母排序 ***/
div{
    background-color:#3399cc;
    color:#666;
    font:1.2em/1.4em Arial, Helvetica, sans-serif;
    height:300px;
    margin:10px 5px;
    padding:5px 0 10px 5px;
    width:30%;
    z-index:10;
}

8. 保持CSS的可读性
  书写可读的CSS将会使得更容易查找和修改样式。对于以下两种情况,哪种可读性更高,我想不言而明。

/*** 每个样式属性写一行 ***/
div{
    background-color:#3399cc;
    color:#666;
    font: 1.2em/1.4em Arial, Helvetica, sans-serif;
    height:300px;
    margin:10px 5px;
    padding:5px 0 10px 5px;
    width:30%;
    z-index:10;
}

/*** 所有的样式属性写在同一行 ***/
div{ background-color:#3399cc; color:#666; font: 1.2em/1.4em Arial, Helvetica, sans-serif;  height:300px; margin:10px 5px; padding:5px 0 10px 5px; width:30%; z-index:10; }

当对于一些样式属性较少的选择器,我会写到一行:

/*** 选择器属性少的写在同一行 ***/
div{ background-color:#3399cc; color:#666;}
 

对于这个规则并非硬性规定,但无论您采用哪种写法,我的建议是始终保持代码一致。属性多的分行写,属性少于3个可以写一行。

9. 选择更优的样式属性值
  CSS中有些属性采用不同的属性值,虽然达到的效果差不多,当性能上却存在着差异,如
  区别在于border:0把border设为0px,虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。
  而border:none把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。所以建议使用border:none;
  同样的,display:none隐藏对象浏览器不作渲染,不占用内存。而visibility:hidden则会。

10. 使用 代替@import
首先,@import不属于XHTML标签,也不是Web标准的一部分,它对于较早期的浏览器兼容也不高,并且对于网站的性能有某些负面的影响。具体可以参考《高性能网站设计:不要使用@import》。所以,请避免使用@import

11. 使用外部样式表
  这个原则始终是一个很好的设计实践。不单可以更易于维护修改,更重要的是使用外部文件可以提高页面速度,因为CSS文件都能在浏览器中产生缓存。内置在HTML文档中的CSS则会在每次请求中随HTML文档重新下载。所以,在实际应用中,没有必要把CSS代码内置在HTML文档中:


  • 而是使用 导入外部样式表:

    
    

    12. 避免使用CSS表达式(Expression)
      CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

    background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
    

      如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。
      表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。
      如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。所以,在非不得已,请避免使用CSS表达式。

    13. 代码压缩
      当你决定把网站项目部署到网络上,那你就要考虑对CSS进行压缩,出去注释和空格,以使得网页加载得更快。压缩您的代码,可以采用一些工具,如YUI Compressor
    利用它可精简CSS代码,减少文件大小,以获得更高的加载速度。

    4. 总结
      在本文中,我力图更详尽的总结书写更高效的CSS代码的原则,但鉴于本人见识和精力有限,我还是希望这些原则能帮助您更好的书写和管理您的CSS代码,不知您又是如何书写CSS的,是否也有一些想要分享的技巧?给我留言吧谢谢~

     
    No Comments

    Posted in css

     

    常用CSS缩写语法总结

    07

    使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则如下:

    颜色
    16进制的色彩值,如果每两位的值相同,可以缩写一半,例如:
    #000000可以缩写为#000;
    #336699可以缩写为#369;

    盒尺寸
    通常有下面四种书写方法:

    property:value1; 表示所有边都是一个值value1;
    property:value1 value2; 表示top和bottom的值是value1,right和left的值是value2
    property:value1 value2 value3; 表示top的值是value1,right和left的值是value2,bottom的值是value3
    property:value1 value2 value3 value4; 四个值依次表示top,right,bottom,left

    方便的记忆方法是顺时针,上右下左。具体应用在margin和padding的例子如下:
    margin:1em 0 2em 0.5em;

    边框(border)
    边框的属性如下:
    border-width:1px;
    border-style:solid;
    border-color:#000;

    可以缩写为一句:
    border:1px solid #000;

    语法是border:width style color;

    背景(Backgrounds)
    背景的属性如下:
    background-color:#f00;
    background-image:url(background.gif);
    background-repeat:no-repeat;
    background-attachment:fixed;
    background-position:0 0;

    可以缩写为一句:
    background:#f00 url(background.gif) no-repeat fixed 0 0;

    语法是background:color image repeat attachment position;

    你可以省略其中一个或多个属性值,如果省略,该属性值将用浏览器默认值,默认值为:
    color: transparent
    image: none
    repeat: repeat
    attachment: scroll
    position: 0% 0%

    字体(fonts)
    字体的属性如下:
    font-style:italic;
    font-variant:small-caps;
    font-weight:bold;
    font-size:1em;
    line-height:140%;
    font-family:”Lucida Grande”,sans-serif;

    可以缩写为一句:
    font:italic small-caps bold 1em/140% “Lucida Grande”,sans-serif;

    注意,如果你缩写字体定义,至少要定义font-size和font-family两个值。

    列表(lists)
    取消默认的圆点和序号可以这样写list-style:none;,

    list的属性如下:
    list-style-type:square;
    list-style-position:inside;
    list-style-image:url(image.gif);

    可以缩写为一句:
    list-style:square inside url(image.gif);

     
    1 Comment

    Posted in css