文章标签 ‘css’

等了2天还没有结果,估计够呛了,怨天尤人也没有用,还是要让自己变的更加强大。碰到的一些问题和一些个人理解,会陆续在BLOG上公布出来。

题目:

.a .c{ color:blue; }
.b .c{ color:red; }

<div class=”a”>
    <div class=”b”>
        <div class=”c”>
        just a test!
        </div>
    </div>
</div>

just a test! 文字部分显示何种颜色?
———————————————————————————
当时由于从来没有考虑过这样的情况存在,便根据我对CSS的了解猜了red,
理由是,后定义的样式应该覆盖先定义的样式。
———————————————————————————
回来的时候,查询了一下CSS对样式特异性的一些规则

CSS2.1 中规定了关于 CSS 规则 Specificity(特异性)的计算方式,用一个四位的数字串(注:CSS2 中是用三位)来表示,最后以 Specificity 的高低判断 CSS 的优先权。

Specificity 具体的计算规则:
  1. 元素的 style 样式属性,加 1,0,0,0。
  2. 每个 ID 选择符(#id),加 0,1,0,0。
  3. 每个 class 选择符(.class)、每个属性选择符(例 [attr=”"] )、每个伪类(例 :hover),加 0,0,1,0。
  4. 每个元素或伪元素(例 :firstchild)等,加 0,0,0,1。
  5. 其他选择符(例 全局选择符 *,子选择符 >),加 0,0,0,0。
最后逐位相加数字串,得到最终的 Specificity 值,按照从左到右的顺序逐位比较。
  
除了 Specificity 还有一些其他规则:
  1. !important 声明的规则高于一切,如果 !important 声明冲突,则比较优先权。
  2. 如果优先权一样,则按源码中“后来者居上”的原则。
  3. 由继承而得到的样式属性不参与 specificity 的计算,低于一切其他规则(例 全局选择符 * )。

如下表:

选择符

特性值

h1 {color:blue;} 1
p em {color:purple;} 1+1=2
.apple {color:red;} 10
p.bright {color:yellow;} 1+10=11
p.bright em.dark {color:brown;} 1+10+1+10=22
#id316 {color:yellow} 100

通过上面,就可以很简单的看出,HTML标记的权重是1,CLASS的权重是10,ID的权重是100,继承的权重为0。
———————————————————————————
解释:

我认为题目中应该这样理解,根据Specificity计算.a .c的特性值为20,而.b .c的特性值也为20,那么根据“后来者居上”的原则原则,文字部分的颜色应该为 red。

全是个人理解,如有更好的解释请告诉我,谢谢了。
———————————————————————————
参考资料:
http://www.blueidea.com/tech/web/2009/6801.asp
http://www.planabc.net/2008/05/06/css_specificity/

2010年7月9日19:55 | 7 条评论
分类: 前端开发
标签:

和程序员探讨了一整个下午,其实有些事情是不容置疑的,但是我却也解释不出来,乘着周末,适当的总结一下:

程序员的观点更偏向于程序,要求把所有的样式写到一个文件中,以便于使用统一的MasterPage,方便以后程序代码的管理,殊不知,样式写在同一个文件中,会有这样的问题:

1。样式表里的代码混乱,随着项目的进展,前面写的样式不敢有任何改变,几百个页面的的网站,谁知道改动一些会造成什么样的后果,而且在项目进行中的时候,也要每修改一个地方,整个全部的项目页面都要重新测试过,IE6、IE7、FF等等等等,非常耽误时间。

2。样式表的文件体积越来越大,一个页面即使没有用到大多数的样式,但仍然只能引用所有的样式,在没有缓存的情况下,加载页面有延时。

3。样式表里的代码过多,维护极度不易,所有的选择器,类型全部混在一起,可能会上下重复或不一致。

4。其他一些未被发现的问题。

我更偏向于这样的样式管理:

分开模板级的和应用级的。使用:

common.css 管理基础的,整站都必须使用的样式,例如:css reset等

layout.css 布局的,框架布局的样式,不需要改变布局的情况下,这个文件就始终不用动

global.css 颜色,边框等样式

forms.css 表单级的样式,一些常用表单的布局和样式,以方便修改表单的展示风格

index.css 主页的样式,一般大型的网站首页都拥有着和其他内容不同风格的样式,可能会覆盖上面global.css里面的一些样式

print.css 打印样式

突然想到曾经送给原公司一位新来同事的一本书: 《CSS Mastery》,好像其中也有一章介绍如何组织CSS的,如果你想研究请步移: http://www.cnblogs.com/JustinYoung/articles/763052.html

再谈一下我的个人想法,算是抛砖引玉:

1。权威的理论支持,好处不言而喻

2。低耦合,方便分离和组合

3。修改方便,很容易找到你想修改的部分

4。最坏的是就算修改错了某一部分,只要不修改框架布局,整体页面布局也不会变的一塌糊涂。

谁有更好的组织方式,请赐教。

2010年5月30日14:28 | 2 条评论
分类: 前端开发
标签: , ,

巧用负margin实现导航菜单分割符 一文中,也提到过会有这个技巧,现在文章送上!

rankingshow0

通常在制作积分排行的时候,都是会把排名的图片切成一张一张的,然后通过程序判断顺序,以实现在不同的名次前面显示不同的排名图片!这里介绍的是,通过CSS的方式简化程序的判断,让程序员把更多时间留给业务逻辑!

本方法的核心思路就是,利用一张已经写好序列的背景图作为背景实现的,如下:

rankingshow1

演示: 排名的另外一中展示形式 

代码如下:

.paihang {
    background:#000;
    width:178px;
    background:url(images/no_list_bg_1.gif) 8px 1px repeat-y;
}
.paihang dl {
    width:190px;
    background:url(images/no_list_1.gif) 8px 0px no-repeat;
    display:block;
    clear:both;
}
.paihang dl dd {
    height:23px;
    width:190px;
    display:block;
    clear:both;
    padding-top:7px;
    margin:0px 4px 0px 4px;
    background: url(images/hr_1.gif) center bottom repeat-x;
}
.paihang dl dd .name {
    float:left;
    margin-left:28px;
}
.paihang dl dd .jifen {
    float:right;
    width:60px;
    text-align:left;
    font-size:10px;
    color:#339933;
}

<div class="paihang">
<dl>
    <dd><span class="name"> <a href="#">admin</a></span><span class="jifen"><img src="images/ico_23.gif" /> 10000</span></dd>
    <dd><span class="name"> <a href="#">user1</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
    <dd><span class="name"> <a href="#">user2</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
    <dd><span class="name"> <a href="#">user3</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
    <dd><span class="name"> <a href="#">user4</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
    <dd><span class="name"> <a href="#">user5</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
    <dd><span class="name"> <a href="#">user6</a></span><span class="jifen"><img src="images/ico_23.gif" /> 100</span></dd>
</dl>
</div>

2009年7月29日13:52 | 1 条评论
分类: 前端开发
标签: , ,

最近比较忙,一直在处理某医院CMS整站的布局问题,多而繁杂,确实没有实际操作过大站CSS+DIV的经验,由于每个页面均不同,目前我是这样操作的:

1. reset.css 这个不用解释

2. global.css 全局样式,其中包括字体,颜色,以及LayOut中的共同部分,如:header,footer,sidebar等等

3. 独立样式文件 所有页面中不同的部分被放到这个文件里,并且样式文件名和页面文件相同

这是我能想到最好的处理方式了,如果哪位大人有更好的建议,请赐教!

某CMS里面能安装许多插件,为了让程序少写点代码,决定研究之,页面代码部分尽量和原插件提供的一样,这样程序员就可以直接CTRL+C了!也顺便学习一下高人的代码嘛!目前工作部分已经完成,总结学习结果如下:

1. 巧用负margin实现导航菜单分割符
2. 排名的另外一种展示形式

这里先说”巧用负margin实现导航菜单分割符”,先看效果:

negativemarginmethod0

我的处理方式,一般会在最后一个链接作文章,例如:

<div id=”menu”>
<a href=”#">栏目1</a>
<a href=”#">栏目2</a>
<a href=”#">栏目3</a>
<a href=”#">栏目4</a><a href=”#">栏目5</a>
<a href=”#" class=”last”>栏目6</a>
</div>

让.last不显示背景或者不显示边框来实现最后一个栏目没有分割符号,而看到的方法是用了负margin来实现,大致思路如下图:

negativemarginmethod1

代码如下:

.sitenav {
	height:29px;
	overflow:hidden;
}
.sitenav ul {
	overflow:hidden;
	float:left;
	margin:8px 10px auto;
	display:inline;
	list-style:none;
}
.sitenav ul li {
	float:left;
	margin-left:-1px;
	border-left:1px solid #E3E3E3;
}
.sitenav ul li a {
	float:left;
	padding-left:10px;
	padding-right:10px;
	display:block;
	color:#666666;
	height:13px;
	text-decoration:none;
	white-space:nowrap;
}
.sitenav ul li a:hover {
	color:#FF3300;
}
2009年7月22日16:51 | 8 条评论
分类: 前端开发
标签: ,

本来不习惯在上班的时候写Blog的,只是今天看到我们的一个设计师制作出来的的CSS文档例如:

.ben1{ width:700px; padding:10px 0 0 0; text-align:left;}
.compay_ind{ background:#282828; padding:15px; }
.online1{ background:#282828; float:left; }
.img2{ padding:5px 0 0 0;}
.font1{ color:#f1b603; font-weight:bold; font-size:13px;}
.img3{ float:left; padding:0 10px 0 0;}
.more{ display:block; float:right;}
.pro_tit{ margin:10px auto 0; }
.pro_ben{ width:950px; margin:5px auto;}
.pro_img1,.pro_img2,.pro_img3,.pro_img4{ float:left; text-align:center; }
.pro_img1{background:#282828; margin:2px; display:inline; }
.pro_img3{background:#1c1c1c; margin:10px 10px 0 10px;  display:inline;}
.pro_img4{background:#000; margin:10px 10px 0 10px; display:inline;}
.font2{ line-height:24px; color:#cbcbcb;}
.font3{ line-height:24px; color:#ffea00; font-weight:bold;}
.ben2{ margin:10px 0 0 0; height:50px; background:#fff; }
.img4{ margin:10px 0 0 20px;}

看的我头相当的大,这样就不得不让我想起重新提一下CSS中的命名.

软件工程的命名法通常有下面三种,这是多年来专业人士的实践经验累积,CSS虽然不是编程语言,但是足可以借鉴其中的命名法:

1. 匈牙利命名法

听说是MS的程序员Charles Simonyi(查尔斯西蒙尼)最新提出来的,并广泛应用在MS WIN编程中…

写法: 它是通过在变量名前加上相应的小写字母符号作为前缀,标识出变量的作用域,类型等!

例如: pfnSmartDog, pfn类型描述,表示指向函数的指针,SmartDog对变量的描述,所以它表示指向SmartDog函数的函数指针变量.

2. 骆驼式命名法

在很多新的语言环境下用的比较多,但是历史无法追溯了.

写法: 规定每一个单词首字母应使用大写字母来标记,但名称的首字母要小写.

例如: myFunction

还有一种下划线的衍生: my_Function

3. 帕斯卡命名法

写法: 和骆驼式命名法类似,只是第一个单子字母为大写.

例如: MyFunction

其实本人习惯于几种情况的结合,变量使用: strTempalte, GetCommInfo等等

正所谓没有规矩不成方圆,CSS命名规则应该遵循一定的规则,所以团队合作,修改,维护通通会碰到问题!

1. 要区分大小写,尽量使用小写,特殊单词首字母可以大写!

2. 要注意命名合法性,字母开头,后面可以接数字,字母,下划线等等!

3. 要反映出用途和相关信息,绝对不能使用上文中的XX1,XX2,XX3!

说了这么多,那么CSS命名有几种方法呢?据我所知,以下二种比较常用:

1. 语义化

id=”left-side”

id=”center-column”

.red{ color:red; }
.f12{ font-size:12px; }
.left{ float:left; }

2. 结构化

id=”navbar”

id=”sidebar”

id=”sub_nav”

下面提供几个常用的布局名称:

wrap/wrapper            container            site            nav            columns

layout            sidebar            logo            banner            toolbar

header             footer            homepage            title            current

summary            msg            textbox            tips            btn

arr/arrow           

文件类型:

master.css 主布局文件            themes.css 主题文件            layout.css 布局和版式文件

base.css 基本公共文件            font.css 字体文件            forms.css 表单文件

print.css 打印样式文件            mend.css 补丁文件

其实,上面的一些名称提示,不单纯的可以用在布局上,如果你用它来命名图片的话,也不错的!

#header{ background:#474747; height:147px; width:100%; }
#top{ padding:18px 0 0 0 ; }
#top img{ margin:0; padding:0; border:0;}
#headerpanel{ width:940px; height:95px; }
#headerpanel img{ margin:0 0 0 40px;padding:0; }
#menu{ padding-top:37px; }
#menu ul{ text-align:center; list-style:none; margin:0; padding:0 0 0 124px; }
#menu ul li{ display:inline; margin:0; padding:0; }
#menu ul li a{ display:block; float:left; width:98px; }
#menu ul li .menulast{ width:97px; }
#menu ul #active a{ background:url(../../images/menubgactive.gif) no-repeat; }

上面是我的一些写法,可能也不完全按照所介绍的规则来的,还请高手指正一二!

2009年6月11日17:09 | 9 条评论
分类: 前端开发
第 1 页,共 2 页12