CSS:相同元素不同结构重复定义的问题

2016-02-19 23:29 5 1 收藏

下面是个超简单的CSS:相同元素不同结构重复定义的问题教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - Web开发 】

CSS选择器是构建CSS的基础.在为大型,复杂嵌套的(x)HTML文档进行样式定义时,很有可能会遇上针对相同元素在不同结构下的重复定义的问题,这个问题也是前端开发人员相对头痛的问题.

在这种情况 发生的前提下,浏览器在渲染页面文件时,会按照一定规则进行优先级排列,然后根据这个优先级权重对发生状况的元素进行处理.

而这个浏览器遵循的规则是什么呢?

让我们来看一段简单的HTML代码:

body =
        div =
                p =/p
                em ="em" "wrap"/em
        /div
/body

 这是段相当简单的HTML代码,但是具有相当的代表性.我们慢慢就能发现它为什么具有代表性了.

首先我们来加上一点简单的CSS声明:

{
        ;
}
{ /* 11 */
        ;
}
{ /* 12 */
        ;
}
{ /* 2 */
        ;
}
{ /* 102 */
        ;
}
{
        ;
}
{ /* 3 */
       ;
}
{  /* 13 */
        ;
}

大家来猜猜看结果中的"For Testing2"是什么颜色的呢?嗯...不浪费大家眼神了,结果是的,奇怪吗?有疑问吗?大家有没有注意到我在CSS中加入的注释中的数字?这是什么呢?这是CSS选择器特性权重值.

id选择器,class类选择器,HTML标签选择器,这3种选择器就是构成CSS继承的组件,浏览器在渲染它们的时候是有优先权的.而这个优先权在一定情况下是可以计算出来的.

统计在这个选择器里面ID选择器的数目为a 统计在这个选择器里面类的选择器,属性选择器和伪类为b 统计在这个选择器里面的元素名称数目为c,其中要忽略伪元素.串联三个数字为a-b-c,得到特征值.

串连这3个数字就可以得到特征值.

*                              /* a=0 b=0 c=0 - 特征值 =   0 */
li                             /* a=0 b=0 c=1 - 特征值 =   1 */
ul li                         /* a=0 b=0 c=2 - 特征值 =   2 */
ul ol+li                   /* a=0 b=0 c=3 - 特征值 =   3 */
h1 + *[rel=up]       /* a=0 b=1 c=1 - 特征值 =  11 */
ul ol li.red              /* a=0 b=1 c=3 - 特征值 =  13 */
li.red.level             /* a=0 b=2 c=1 - 特征值 =  21 */
#x34y                     /* a=1 b=0 c=0 - 特征值 = 100 */
#s12:not(FOO)    /* a=1 b=0 c=1 - 特征值 = 101 */

这样就能明白上面代码中的数字的含义了.

是不是就这么简单呢?

应该还有耐人寻味的地方.

比如说我给出这样一组CSS来定义上面的HTML:

{
        ;
}

{ /* 11 */
        ;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

{ /* 11 */
 ;
}

{

}

{ /* 111*/
        red
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

{ /* 111 */
green
}


       gray
}

这里的前3条权重值都是11,后4条声明的权重值都是111,那我们应该怎么判断呢?

首先,我们看这条声明最终定义的是哪个元素.前3条都是定义这个元素的,不难从中总结出一条规律:在声明中声明了元素的HTML标签的,权重又可以增加0.5,那么根据上面的例子,权重值就会变成:

{
        ;
}

{ /* 11 */
        ;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

{ /* 11.5 */
       ;
}

可以发现第1条和第3条的权重值还是一样的,我们试着交换一下他们的位置,天哪,它们之间是可以相互覆盖的.对,那就证明它们是真正的同层(level)声明.

那同样的后4条声明也可以这样分析了:

{

}

{ /* 111*/
        red
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

{ /* 111 */
green
}


        gray
}

在这里的第1条和第4条权重值相同,第2条和第3条权重值相同.经交换实验也能发现这个数值的正确性.之前的权重计算公式曾经出现在Eric的书中以及W3的CSS3规范草稿中[].这个半点权重法可以说是我创造的呦~啊哈哈哈.

来源:https://www.tulaoshi.com/n/20160219/1630038.html

延伸阅读
标签: Web开发
块元素(block element)一般是其他元素的容器元素,块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P"。“form"这个块元素比较特殊,它只能用来容纳其他块元素。 如果没有css的作用,块元素会顺序以每次另起一行的方式一直往下排。而有了css以后,我们可以改变这种html的默认布局模式,把块元素摆...
微量元素不要一缺就补 给宝宝补充微量元素一直是各位家长关心的话题,尤其是给宝宝补钙、补铁和补锌,其实,只要微量元素缺得不多,家长就不用过于担心。因为孩子在快速发育的某个阶段,出现某种微量元素略低的情况是正常的。对微量元素略低,日常生活中又没有明显缺乏症状的孩子来说,食补是最重要的。 常见的微量元素都是二价离子,若...
标签: Web开发
首先讲两个概念,一个是行内元素,一个是块级元素。行业元素是指该元素标记的内容不不会对现在的结构造成影响,属于应用样式,辅助应用样式表等作 用;而块级元素为一个块状,单独占据一行,相当于在一个该元素前后各加一个换行。 两者最明显的区别是:DIV(division)是一个块级元素,可以包含段 落、标题、表格,乃至诸如章节、摘要和备注...
标签: Web开发
CSS通过与(X)HTML的文档结构相对应的选择器(selector)来达到控制页面表现的目的,而文档结构不仅仅在CSS的应用上非常重要,对于行为层(例如使用JavaScript控制元素的行为)同样也非常重要。 文档结构(X)HTML文档可以看作一个家族树,这个树有1个祖先根元素,然后各元素依次向下排列,例如有XHTML代码如下,其文档树如图4-1所示...
标签: Web开发
继承样式定义方法,这样写的好处可以节省网页的代码容易真正的代码与内容相分离,对seo优化也有很大的帮助,下面我们来看一个简单的实例. style .nav ul li a:hover{ background:url(imgs/hover.gif) left top no-repeat; } .nav ul li{  height:28px;  width:100%; } .nav ul li a{ display:block; height:28px; width:100%; margin...

经验教程

809

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部