[关闭]
@zhouyy 2018-05-10T06:17:05.000000Z 字数 3563 阅读 500

Positioning elements

css


绝对定位position用于定位盒子对象,有时一个布局中几个小对象,不易用css padding、css margin进行相对定位,这个时候我们就可以使用绝对定位来轻松搞定。特别是一个盒子里几个小盒子不规律的布局,这个时候我们使用position绝对定位非常方便布局对象。

绝对定位position示范适用图、不规律布局,为即可利用position:absolute;position:relative进行绝对定位

绝对定位与float浮动不能同时使用,比如一个大盒子里有的是绝对定位,有的是使用css float浮动定位,这样IE6浏览器将不会显示改大对象里的这些绝对定位与相对定位,这也算是IE6 CSS HACK吧,注意不要混用即可。

文档流:文档内元素的流动方向
内联元素从左往右流动,如果遇到宽度不够另起一行继续从左向右流动。
块级元素从上到下流动

使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围;

而对于使用absolute、fixed的position脱离文档流的元素,其他盒子内的文本都会无视它。

绝对定位

static absolute relative

  1. <html>
  2. <head>
  3. <style>
  4. div#container{
  5. background-color:#00FFFF;
  6. }
  7. p{
  8. width:50px;
  9. height:50px;
  10. border:1px solid black;
  11. margin-bottom:15px;
  12. }
  13. section{
  14. }
  15. #p1{
  16. position:relative;
  17. top:65px;
  18. left:65px;
  19. }
  20. #p2{
  21. }
  22. *{
  23. box-sizing:border-box;
  24. margin:0px;
  25. padding:0px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div id="container">
  31. <p id="p1">1</p>
  32. <p id="p2">2</p>
  33. <p>3</p>
  34. <section>
  35. This is a paragraph.lalalallalalalal
  36. </section>
  37. </div>
  38. </body>
  39. </html>

浮动定位

Float are taken out of normal document flow, and don't have vertical margin collapse

In regular document flow, the margin between each element collapse. However, when it comes to floated elements, the margins never collapse.

to resume normal document flow,use clear:

  1. clear: left;//right ; both;

what this is doing is telling the browser that the section element is announcing that nothing should be allowed to be floating to the left of it.

Then the elememt will jump over the floating-left element.

  1. <html>
  2. <head>
  3. <style>
  4. div{
  5. background-color:#00FFFF;
  6. }
  7. p{
  8. width:50px;
  9. height:50px;
  10. border:1px solid black;
  11. float:left;
  12. margin-right:10px;
  13. }
  14. section{
  15. clear:left;
  16. }
  17. #p2{
  18. clear:left;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <div>
  24. <p>1</p>
  25. <p id="p2">2</p>
  26. <p>3</p>
  27. <section>
  28. This is a paragraph.lalalallalalalal
  29. </section>
  30. </div>
  31. </body>
  32. </html>

when we set the width 50% and the border 1px,the second element will float the next line as the whole width is a bit more then the screen size. To solve this problem, use * {box-sizing:border-box;}

inline-block 和 float

①inline-block: 是把一个元素的display设置为块状内联元素,意思就是说,让一个元素的容器inline展示,并且里面的内容block展示;inline属性使元素内联展示,内联元素设置宽度无效,相邻的inline元素会在一行显示不换行,直到本行排满为止。block的元素始终会独占一行,呈块状显示,可设置宽高。所以inline-block的元素就是宽高可设置,相邻的元素会在一行显示,直到本行排满,也就是让元素的容器属性为block,内容为inline。

②float: 设置元素的浮动为左或者右浮动,当设置元素浮动时,相邻元素会根据自身大小,排满一行,如果父容器宽度不够则会换行。当我们设置了元素的浮动时,这个元素就脱离了文档流,相邻元素会呈环绕装排列。

两者共同点是都可以实现元素在一行显示,并且可以自由设置元素大小。

区别:

①inline-block: 水平排列一行,即使元素高度不一,也会以高度最大的元素高度为行高,即使高度小的元素周围留空,也不回有第二行元素上浮补位。可以设置默认的垂直对齐基线。

②float: 让元素脱离当前文档流,呈环绕装排列,如遇上行有空白,而当前元素大小可以挤进去,这个元素会在上行补位排列。默认是顶部对齐。

场景:

①inline-block: 当我们要设置某些元素在一行显示,并且排列方向一致的情况下,我们尽可能去用inline-block。因为inline-block的元素仍然在当前文档流里面,这样就减少了程序对DOM的更改操作,因为DOM的每一次更改,浏览器会重绘DOM树。理论上会增加性能消耗。这样也不用像flaot那样麻烦,需要清除flaot.

②float: 即使inline-block为布局首选,但是也有inline-block所不能涉及的一些业务需求,比如:有两个元素,我们需要一个向左,一个向右排列,这时候我们就只能用float来实现,对于新手来说,会纠结float不好调,比较麻烦,想到达到预期效果,需要多次调整,有时候我们给元素设置了浮动,元素显示的顺序却变了,一时搞不清楚就改变HTML中元素的前后顺序等等。因为浏览器的解析顺序是逐行解析,当设置两个元素的右浮动时,顺序在前面的元素会先被解析,他是右浮动,那么在前边的元素就先往右浮动占位置,后边的元素依次被解析到以后,才往右排列,这样我们看到的顺序就是反的,当弄明白原因之后,调试就方便多了

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注