行内元素设置宽高

对行内元素如span设置宽高,可以通过css设置display:block或者设置为浮动float

  1. 块元素。 特性:有物理属性,width,height写值起作用,而且要占据一行。
  2. 内联元素。 特性:没有物理属性。但是margin,padding值有用。不占据一行,后边可以有兄弟元素。
  3. 即是块又是内联,根据兄弟兄弟元素决定。

为什么是float之后才会有物理属性,这就是块与内联元素相互转化的问题。
块元素 -> 内联元素: display:inline;
内联元素 -> 块元素: display:block;

float就是隐性的把内联元素转化为块元素,这是对内部的特性就是有物理特性,但是他不占据一行。对外是内联元素的属性。他有个坏处就是会影响兄弟元素。相当于:display:inline-block;
那为什么不直接display:inline-block;因为这个玩艺在ie6下有几个px的bug。

平时经常给这样的行内元素设置浮动float:left or float:right,浮动了之后还可以给它们设置高度啊宽度啊。这点大家都知道,但是为什么呢?为什么行内元素在浮动之后就可以设置高宽了呢。 引用下曹刘阳写的《编写高质量代码-web前端开发修炼之道》一书中看到的一句话:
position:absolute和float会隐式地改变display类型,不论之前什么类型的元素(display:none除外),只要设置了position:absolute 、 float中任意一个,都会让元素以display:inline-block的方式显示:可以设置长宽,默认宽度并不占满父元素。
这样似乎可以解释的通,元素都隐式地将display变为inline-block,但是ie6\7的css解析器并没有display:inline-block这个属性,只支持display:inline,这样就说不通了。 又想到了,float会触发haslayout,haslayout为true的情况下,元素可以控制自身的布局,但是haslayout是ie专有的,不管其它浏览器什么事情,这个想法应该也不成立。 和群友讨论了一下这个问题,他们平时也没去注意,经过一番激烈的“争论”,我们得出的结论是:行内标签在设置浮动后,会拥有块级元素的部分特性,比如可以设置高宽等,但它实质上还是行内元素,本质不会变。 最后,请教了林小志,翻了css文档,才发现:
当该属性不等于none引起对象浮动时,对象将被视作块对象(block-level),即display属性等于block。也就是说,浮动对象的display特性将被忽略。float在绝对定位和display为none时不会被应用。对应的脚本特性为stylefloat(ie)或cssfloat(非ie)。(注意这里为stylefloat或cssfloat,而不是float)
哎呀,我去,原来文档上有解释的,白忙活了半天。下次碰到问题要第一时间翻下文档。 附上飘零雾雨整理的中文版css文档:css中文版文档_飘零雾雨 不翻文档的程序员不是好厨子

作者:Number1020
链接:http://www.jianshu.com/p/acfe075269a7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/u014727260/article/details/76726370