如何用CSS编写高效率的CSS代码

html-css022

如何用CSS编写高效率的CSS代码,第1张

一:如果你仅是指可以高效率的写出相应的css代码,那么你只需要一个css插件,Emmet(原名:Zen Coding)是前端开发快速输入代码一种方式,作为文本编辑器的插件存在,可以帮助您快速编写HTML和CSS代码。

二:如果你想要用更少量的代码量来达到更多的功能和效果,那么

Less , CSS 预处理语言,可以达到目的。

首先我们需要清楚,浏览器是如何读取选择器,以识别样式,并将相应的样式附于对应的HTML元素,达到美化页面的效果。Chris

Coyier曾在《Efficiently Rendering

CSS》一文中说过“浏览器读取你的选择器,遵循的原则是从选择器的右边到左边读取。换句话说,浏览器读取选择器的顺序是由右到左进行”。比如说:

div.nav >ul li a

上面的实例来说,浏览器首先会尝试在你的HTML标签中寻找“a”元素,接着在匹配“li和ul”,最后在去匹配“div.nav”。这就是前成所主的“选择器从右到左的原则”。

选择器的最后一部分,也就是选择器的最右边(在这个例子中就是a[title]部分)部分被称为“关键选择器”,它将决定你的选择器的效率如何?是高还是低。

老版本的浏览器可以过滤掉不匹配的选择器,而直接匹配更高效的选择器。记得David Hyatt在《Writing efficient

CSS for use in the Mozilla

UI》说过:“这个关键选择器可以大大提高选择器的性能,少检查一个给定的元素规则,就可以更有效的将样式匹配给对应的HTML元素。”那么如何让关键选

择器更有效,性能化更高呢?其实很简单,主要把握一点“越具体的关键选择器,其性能越高”

那么什么样类型的选择器,其性能高?什么样的类型的选择器性能低呢?下面我们就针对两个问题来展开具体的学习。

CSS选择器的效率

如果你阅读了本站的有关于选择器类型的介绍的话,你对选择器并不会感到陌生。就算你没读过,我想CSS选择器不会让我们觉得是新东西,比如我们

常用的基本选择器“元素标签选择器div”、“id选择器#header”、“类选择器.class”,或者说我们很少见的伪类选择器“:focus”以

及更复杂的css3选择器“:nth-child”等等。

选择器有一个固有的效率,我们来看Steve Souders给排的一个顺序:

id选择器(#myid)

类选择器(.myclassname)

标签选择器(div,h1,p)

相邻选择器(h1+p)

子选择器(ul >li)

后代选择器(li a)

通配符选择器(*)

属性选择器(a[rel="external"])

伪类选择器(a:hover,li:nth-child)

上面九种选择器的效率是从高到低排下来的,基中ID选择器的效率是最高,而伪类选择器的效率则是最底。详细的介绍大家还可以点击Writing efficient CSS selectors。

综合上面的顺序,我们清楚的知道,id和类名用于关键选择器上效率是最高的,而CSS3的仿伪类和属性选择器,虽然使用方便,但其效率却是最低的。我们下面一起来看几个实例的对比:

div #myid

效率要比下面的高:

#myid div

第一种选择器比第二种选择器效率高,大家或许会问为什么?其实根据前面所介绍的我们就不难理解了,因为第一个选择器的“关键选择器”使用了

“ID选择器”,而第二个选择器的“关键选择器”使用的是“标签选择器”,对比下来,“ID选择器”效率高过“标签选择器”,所以说第一个选择器的效率要

高于第二个选择器。

在类名或ID名前面加上标签也会致使选择器效率变低的,比如说:

div

#myid

上面两个选择的效率要高于下面的选择器:

p#mydiv

p.myclassname

来自Mozilla的几点建议

David在《Use efficient CSS selectors》中介绍了几种书写高效率的CSS选择器的方法,下面我将他们移到这里来让大家参考:

写道

1 避免普遍规则

2 不要在ID选择器前加标签名或类名

3 不要在类名选择器前加标签名

4 尽可能使用具体的类别

5 避免使用后代选择器

6 标签分类规则中不应该包含一个子选择器

7 子选择器的问题

8 借助相关继承关系

9 使用范围内的样式表

如果你不够清楚上面所讲的是什么,你可以点击这里,他会让你更容易了解这些规则。

我们应该怎么做

前面说“ID选择器”的效率是最高的,那么今天我们写样式,为了提高选择器的效率,是不是我们要在每一个文档的HTML元素中都加入ID名呢?

我想这样的做法是没有的。对于一个有语义的代码编写和如何提高性能,以前他们之间如何的平衡?其实这个选择器的效率低一点,对于大多数网站来说并不会有太

大的影响,但对于一个大型的网站,产生大量的流量这就会有差别了,也就很值得我们去对他进行优化。那么我们就很有必要的去了解他们是如何工作,比如说,一

般情况下哪些选择器的使用效率更高。来看两个简单的例子:

#myid

上面的选择器高于下面的:

p#myid

后者的写法我发现还是有很多朋友这样写,但我不知道你为什么需要在ID前面加一个标签?难道你同一个页面会有多个相同的ID不成?

我们接下来在来看一个实例,用于列表上的,比如说我们制作导航菜单的:

#nav a

高效于:

#nav li a

上面只是介绍了两个常碰到的实例,在这里说这两个实例,主要目的是让你在今后的编写样式时,能注意这方面的的细节,从而加快你的代码效率。

CSS是Cascading style Sheets的简称,中文译作“层叠样式表单”,我把它叫作“层叠样式表”,我感到这样顺口一

点,没别的意思。实际上它是一组样式。你可能对CSS这个名词比较陌生,实际上无论你用Internet Explorer还是

Netscape Navigator在网上冲浪,几乎随时都在与CSS打交道,在网上没有使用过CSS的网页可能不好找。不管你用什么工

具软件制作网页,都有在有意无意地使用CSS。用好CSS能使你的网页更加简炼,为什么同样内容的网页,有的人做出来有

几十KB,而高手做出来只有十几KB,CSS在其中的作用是不言而喻的.

1、CSS在网页制作中一般有三种方式的用法,那么具体在使用时该采用哪种用法?

当有多个网页要用到的CSS,采用外连CSS文件的方式,这样网页的代码大大减少,修改起来非常方便只在单个网页

中使用的CSS,采用文档头部方式只有在一个网页一、两个地方才用到的CSS,采用行内插入方式。

2、CSS的三种用法在一个网页中要以混用吗?

三种用法可以混用,且不会造成混乱。这就是它为什么称之为“层叠样式表”的原因,浏览器在显示网页时是这样处

理的:先检查有没有行内插入式CSS,有就执行了,针对本句的其它CSS就不去管它了其次检查头部方式的CSS,有就执行

了在前两者都没有的情况下再检查外连文件方式的CSS。因此可看出,三种CSS的执行优先级是:行内插入式、头部方

式、外连文件方式。

3、在Dreamweaver3中如何使外部文件式CSS?

在Dreamweaver3中使用外连文件式CSS并没有特殊要求,同样是用记事本创建一个*.css文件,在网页的<head>与

</head>之间加上一句这样的代码:<link rel="stylesheet" href="在这里填上你的CSS文件地址(相对路径+文件

名)" type="text/css">就行了。

4、如何用Dreamweaver3快速创建CSS外连式文件?

对于一个初接触CSS的网页设计人员来讲,要用记事之类的编辑器,去创建一个CSS外连式文件是相当困难的。由于

Dreamweaver3对CSS支持的很好,用它来帮助就轻松多了。具体可以这样操作:

1)先在纸上写好在网站的网页中可能要用到的格名称,然后在Dreamweaver3的编辑窗中调出CSS面板,一个一个地定

义,并在一个空白页上适当地写一点相关内容,边定义边试用,效果不满意,立即修改

2)全部定义好后,再用记事本创建一个空的CSS外连式文件,把在<head>与</head>之间的那段定义好的CSS复制

到CSS文件中去,就大功告成了。整个过程就是点鼠标,方便吧?

5、在Dreamweaver3中采用行内插入式CSS要手动写代码吗?

不用!先用CSS面板定义好要用的CSS,然后,在要插入CSS的标记插入:style="",再把你刚才定义的CSS从<head>

后面拖到这个双引号中来,把花括号以外的部分删去就行了。

6、在方档头部方式和外连文件方式的CSS中都有“<!--”和“-->”,好象没什么用,不要可以吗?

这一对东东的作用是为了不引起低版本浏览器的错误。如果某个执行此页面的浏览器不支持CSS,它将忽略其中的内

容。虽然现在使用不支持CSS浏览器的人已很少了,由于互联网上几乎什么可能都会发生,所以还是留着为妙。

7、如何给一部分文字加背景色?

给文字加上不同颜色,在DW3中只要在属性面板上选取文字的颜色就行了,非常方便,但要给部分文字加不同的背景色

却没有相应的功能,我们可以先做一个定义背景色的CSS(如:bgstyle),在DW3中点几下鼠就完成了。如一个定义淡黄色

背景的CSS是这样的:

<style type="text/css">

<!--

.bgstyle { background: #FFFFCC}

-->

</style>

在要用时选取那段文字,再在CSS面板上点一下“bgstyle”就行了。

8、如何给部分文字加背景图像?

与加背景色操作类似,中是在背景在选择加载图象就是了,一个定义好的加背景图象的CSS例子的代码是这样的:

<style type="text/css">

<!--

.imgbgstyle { background-image: url(/logo.gif)}

-->

</style>

在要用时选取那段文字,再在CSS面板上点一下“imgbgstyle”就行了。

9、如何使页面的背景在文字“滚动”时背景图案静止不动?

要使背景图案不随文字“滚动”的CSS是这样的:

<style type="text/css">

<!--

BODY { background: purple url(/bg.jpg)

background-repeat:repeat-y

background-attachment:fixed

}

-->

</style>

10、如何定义字间距?

在DW3中CSS的属性定义对话框(style Definition for .style1)的“Block”上的“letter spaceing”属性定义的就

是字间距,它指的是每一个字符之间的额外间距,经长度为单位,正负值均可,当取负值时产生字符挤在一起的效果。下

面代码是一个定义好的字间距CSS例子:

<style type="text/css">

<!--

.style1 { letter-spacing: 3px}

-->

</style>

11、如何给文字加上划线、下划线、删除线和闪烁?

在DW3中CSS的属性定义对话框(style Definition for .style1)的“Type”上的“decoration”属性定义的就是这些

内容,要注意的是闪烁属性有些版本的浏览器不支持,少用为好。下面是一个定义好上述效果的CSS例子:

<style type="text/css">

<!--

.style1 { text-decoration: underline overline line-through blink}

-->

</style>

其中: “underline”是定义下划线“overline ”是定义上划线“ line-through”定义的是删除线“blink”

定义的是文字闪烁。

12、如何使网页具有“首行缩进”功能?

由于DW3输入空格不方便,利用“首行缩进”将弥补这个不足。在DW3中CSS的属性定义对话框(style Definition

for .style1)的“Block”上的“text-indent”属性定义的就是“首行缩进”,所谓“首行”是指每段内容的第一行,也

就是直接按回车键就形成了一个新的段落。缩进最好以“em”(字符)为单位,比如:汉字编排要求每段开始缩进两个汉

字,设置好的CSS如下所示:

<style type="text/css">

<!--

.style1 { text-indent: 2em}

-->

</style>

在DW3要注意:在DW3中CSS的属性定义对话框(style Definition for .style1)的“Block”上的“text-indent”右

面的缩进单位选择框中“ems”指的就是“em”。

13、在用表格进行排版时,能使某一方向上的内容离开表格线一点吗?

可以!在DW3中CSS的属性定义对话框(style Definition for .style1)的“Box”上的“margin”定义的就是内容离

开边缘的距离,分别可定义四个方向:“top”“bottom”“left”“right”。下面就是定义在左边离开“10px”的CSS例

子代码:

<style type="text/css">

<!--

.style1 { margin: 0px 0px 0px 10px}

-->

</style>

14、能给某部分内容加边框吗?

用CSS可以给某部分内容加边框,在DW3中CSS的属性定义对话框(style Definition for .style1)的“Border”定义

的就是边框线,“top”“bottom”“left”“right”四边可分别定义线的粗细和颜色,这些定义好后不要忘记在下面的

“style”中定义线型,否则将看不边框线,因为默认的线型是“none”。下面是一个定义了上边框为:蓝色细线左边框

为:绿色中粗线的CSS例子:

<style type="text/css">

<!--

.style1 { border: solidborder-width: thin 0px 0px mediumborder-color: #0000FF black black #00FF00}

-->