CSS的七大知识点,菜鸟必看

2018-11-25 SKY 互联网
浏览


1、width是个雷

  很多页面要求宽度自适应,那么width设百分比吧,否则块元素很容易变成粘着不走的狗皮膏药
  当没有定义元素宽度时,浏览器撑满整行,实际上执行的是width:auto,宽度自适应。

2、IE6不认识min-height

  解决办法就是_height,有时候明明不需要可变高度,如果喜欢没原则的min-height,那么记得用_height对付下IE6这个屌丝。

3、float和clear

  float和绝对定位都会破坏正常的文档流,正常流自上而下,而float是一个自左而右或者自右而左的流。

  clear仅仅是针对上一个浮动元素而言,如果上面没有元素浮动,那么你要清除啥呢?

  所谓清除浮动,个人认为就是相对于上一个浮动元素,另起一行。

4、position的relative和static的区别

  relative是相对于自己普通流所在位置的定位,而static是文档普通流,即文档流的默认情况。

  一般情况,relative跟随top和left两个值,当然也可以用right和bottom,但切记,一切都是相对于自己的普通流。

  如果将 position 设为 relative , absolute 或 fixed,那么元素会覆盖没有设置 position 属性的元素,姑且把static当没设position吧。

  这说明层级关系中position的权重是较高的。当然如果position有z-index,z-index高的优先,否则,设置了position的比没设的高,

  再然后,如果没设position,则按文档流顺序,位于后面位置的元素会覆盖前面的元素。

5、z-index和overflow

  用z-index 属性设置元素的堆叠顺序。那么拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

  不过z-index 属性仅在节点的 position 属性为 relative, absolute 或者 fixed 时有用哦。

  当正常流溢出时,可以选择overflow的scroll或者hidden属性。

  什么是溢出?比如父级元素定义的高度是100,子级元素定义的高度是150,这撑不住的50就是溢出。

  所以溢出只出现在子级元素溢出父级元素的情况。一般想解决溢出问题 就只要在父级元素上加一个overflow属性。

  兄弟元素之间按照正常的普通的流走不会出现溢出的情况,但当子级元素relative时候,也会出现覆盖,但这已经脱离了溢出的管辖范围。

      当然父级的overflow对因relative而溢出的子级元素同样有效。

6、IE有bug就找haslayout
  haslayout是IE特有的属性,很多IE神奇的BUG都和haslayout有关,要记住,有些样式会触发haslayout,最常用的是zoom:1

  下列元素默认 hasLayout=true
    <table> <td> <body> <img> <hr> <input> <select> <textarea> <button> <iframe> <embed> <object> <applet> <marquee>

  有些属性可以触发hasLayout
  -------------------------------------
  display
  启动haslayout的值:inline-block
  取消hasLayout的值:其他值
  --------------------------------------
  width/height
  启动hasLayout的值:除了auto以外的值
  取消hasLayout的值:auto
  ---------------------------------------
  position
  启动hasLayout的值:absolute
  取消hasLayout的值:static
  ----------------------------------------
  float
  启动hasLayout的值:left或right
  取消hasLayout的值:none
  ---------------------------------------
  zoom(IE专有属性)
  启动hasLayout的值:有值
  取消hasLayout的值:narmal或者空值
  ----------------------------------------
  ie7还有一些额外的属性可以触发该属性:
  min-height: (任何值)
  max-height: (任何值除了none)
  min-width: (任何值)
  max-width: (任何值除了none)
  overflow: (任何值除了visible)
  overflow-x: (任何值除了visible)
  overflow-y: (任何值除了visible)5
  position: fixed

 

7、神奇的w3c塌陷
  什么都不说,先看看效果吧

<style>
#a{
background-color: red;
height:130px;
width:200px;
margin-bottom: 20px;
}
#sub_a{
margin-top:30px;
background-color: blue;
height:100px;
width:150px;
}
</style>
<div id="a">
<div id="sub_a"></div>
</div>

  这是外边距叠加collapsing-margin问题,collapsing不是浏览器bug而是W3C标准哦。请看如下这段:

In CSS, the adjoining margins of two or more boxes (which might or might not be siblings) can combine to form a single margin. Margins that combine this way are said to collapse, and the resulting combined margin is called a collapsed margin.

  在CSS中,两个或多个毗邻(父子元素或兄弟元素)的普通流中的块元素垂直方向上的 margin 会发生叠加。这种方式形成的外边距即可称为外边距叠加(collapsed margin)。