CSS 的inhert 与auto
见好就收^^
⼀ 个很显浅的寓⾔,千年⽼树,电打雷劈,屹⽴不倒,却毁于蝼蚁的侵袭之下。⾃以为精通CSS 的⼈,常常被⼀些⼩问题搞到头晕脑胀。通常是⼀个很⼩的数值,经 过层层放⼤歪曲后,整个布局就⾛形了。CSS 是⼀门很简单的语⾔,易学易⽤,但也最容易出垃圾代码。这是没有深⼊研究这门语⾔所致。本⼈认为,CSS 是由 以下三⼤块构成的:默认值,继承系统与加权系统。默认值,也就是浏览器在⽤户没有设置属性的情况下,默认指定的属性。CSS 框架基本都有⼀个叫reset.css 的⽂件,就是对其进⾏重设,消除各浏览器的差异的。继承系统就是下⾯要重点讨论的东西。加权系统,也就是优先级的问题,不在本⽂的讨论范畴,不说了。另,这三个东西都⾯临着IE Bug 的侵袭,危害甚⼤,⾃⼰另⾏了断吧(笑)。
在CSS 中,许多属性都是可以继承的,如某个段落的字体设置为⽩⾊,其元素的字体不⽤设置或设置为inhert ,它就是⽩⾊。这些属性被称之为inherited property ,它会从⽗元素获取对应属性的经过计算 与转换 的值( ),如果⽗元素和它的情形⼀样,它就继续往上,最后没有就使⽤浏览器的默认值。
下⾯是 inherited properties 的⼀览表:border-collapse border-spacing caption-side color cursor direction empty-cells font font-family font-stretch font-size font-size-adjust font-style font-variant font-weight letter-spacing line-height list-style opacity list-style-image list-style-type quotes text-align text-indent text-transf
orm white-space
word-spacing
<script type="text/javascript">
function getStyle(el, style){                if(!+"/v1"){
style = place(//-(/w)/g, function(all, letter){                        return
我们给⽗元素设置了字体的样式,没有设置⼦元素的,当取出⼦元素的时,发现其值转换为rgb 格式(当然IE 除外啦!)不过,在IE7及其之前的版本,是不⽀持⽤inhert 来设置direction 与visibility 以外的样式属性。具体可参见 与
在IE8中,原本是inherited property 的text-align 在th 中失效。01. < table  >02.    < tr  >03.      < th  >Ruby</ th  >
04.      < th  >Rouvre</ th  >
05.    </ tr  >
06.    < tr  >
07.      < td  >By</ td  >
08.      < td  >司徒正美</ td  >
09.    </ tr  >
10. </ table  >
01. table, tr, td, th {
02.    border-collapse  : collapse  ;
03.    border  : 1px  solid  #000 ;
04. }
05. table {
06.    text-align  : right  ;
07. }
08. td, th {
09.    width  : 100px  ;
10. }
本来th 应该会从table 中继承⽂本向右对齐的设置,但失效了
border-collapse: collapse;
border: 1px solid #000;            }            table {                text-align: right;            }            td, th {                width: 100px;            }        </style>        <title>CSS</title>    </head>    <body>
解决IE8这个Bug 也很容易,就是显式地设置inhert 。01. table, tr, td, th {
02.    border-collapse  : collapse  ;
03.    border  : 1px  solid  #000 ;
04. }
05. table {
06.    text-align  : right  ;
07. }
08. td, th {
09.    width  : 100px  ;
10. }
11. th {
12.    text-align  : inherit;
13. }
border-collapse: collapse;                border: 1px
solid #000;            }            table {
text-align: right;
此外还有⼀些CSS 属性是不能继承的,最经典如border 系列。它被称之为non-inherited property ,如果我们不为它设置,我们只能取得浏览器的默认值,默认值在⽕狐中被称之为 initial value 。⼀个相关的好消息是,默认值在⽕狐也可以指定了,这样我们就不⽤reset 样式了!下⾯是non-inherited property 的⼀览表:
background
border bottom clear display float height left margin outline overflow padding position right top visibility width
z-index
<script type="text/javascript">            function
getStyle(el, style){                if(!+"/v1"){                    style = place(//-(/w)/g, function(all, letter){                        UpperCase();                    });                    return el.currentStyle[style];                }else{                    return tComputedStyle(el, null).getPropertyValue(st yle)                }            }            var _ = function(id){                return
};
function(){
alert(getStyle(_("text2"),"
background-color"))
}
</script>
<title>CSS</title>
</head>
<body>
<div id ="text" 我们给⽗元素设置了背景颜⾊,没有设置⼦元素的,这时会取得浏览器的默认值transparent (W3C 那⼀⽅好像只要是颜⾊都会转换为rgb 格式,多出的a 为Alpha )接着我们来看auto ,这是⼀个含糊不清但是有长度概念的值。应⽤于以下属性:
css样式表优先级最高overflow cursor height width marker-offset margin margin-* (left|bottom|top|right|start|end)top bottom left right table-layout z-index -moz-column-width languages
在块级元素的可度量的属性中(如width ,height ),如果不设置值,其默认值是auto ,但它很容易会被⽗级元素的值覆盖,也就是隐式地成为了inhert 了。在内联元素中,由于不具备盒⼦模型,如果不设置,就算是⽕狐也原本奉还它,这对于精确计算元素的宽度与⾼度是⾮常不利的。auto 还 有对称性,这个在居中布局我们常常运⽤到它。在⾮度量的属性中,如overflow ,就要具体情况具体分析了。PS :此⽂为另⼀篇⽂章准备,敬请期待…………………………

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。