当前位置:   article > 正文

css- 4

css- 4

1.浮动

1. 浮动最初用于实现文字环绕效果
2. 现在,浮动是主流的布局方式之一

1.1元素浮动之后的特点

元素浮动之后,称为浮动元素,具有如下特点:

1. 浮动元素脱离文档流
2. 多个浮动的元素会水平排列,一行放不下自动换行
3. 不论元素原来的显示模式是什么,设置成浮动之后,就是浮动元素,具有自己的显示特点:
   ① 水平排列,自动换行,不存在外边距的塌陷和合并,设置左右外边距auto不会居中(与块级区别)
   ② 设置宽高、内外边距都没有问题(与行内区别)
   ③ 不会被父元素作为文本去处理(与行内块和行内区别)

文档流: 文档流里的元素会按照顺序从上到小,从左到右排列。 

1.2浮动元素产生的影响

1.2.1 对后面的元素的影响

后面兄弟元素会占据浮动元素原来的位置,可能造成位置的重叠,浮动元素显示在上

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .me{
  9. margin-top: 20px;
  10. padding: 20px;
  11. border: 2px solid #eda;
  12. width: 600px;
  13. height: 400px;
  14. background: rgb(221, 240, 255);
  15. }
  16. .box{
  17. width: 150px;
  18. height: 120px;
  19. }
  20. .box1{
  21. background: #900;
  22. }
  23. .box2{
  24. background: #080;
  25. float: left;
  26. }
  27. .box3{
  28. width: 180px;
  29. background: #ff0;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div class="me">
  35. <div class="box box1">三才洪。</div>
  36. <div class="box box2">三才洪。</div>
  37. <div class="box box3">三才洪。</div>
  38. </div>
  39. </body>
  40. </html>

 

解决:

方案一: 给紧邻这浮动元素的后面的兄弟元素设置 clear:both
方案二: 兄弟元素要浮动都浮动,浮动元素不要跟不浮动的元素做兄弟

解决方案一:

  1. .box3{
  2. clear: both;
  3. width: 180px;
  4. background: #ff0;
  5. }

1.2.3对父元素的影响

子元素浮动之后,不能撑起父元素高度,造成高度塌陷

1.2.3.1解决对父元素的影响:

方案一: 父元素设置固定高度
方案二: 父元素设置浮动
方案三: 父元素设置 overflow, 值只要不是 visible 都可以
方案四: 给父元素添加个子元素,放在所有浮动元素的后面,该元素要求是块级元素,设置 clear:both
方案五: 原理同方案四相同,使用伪元素给父元素添加子元素,设置 clear:both (推挤)

  1. 父元素::after {
  2.     content: "";
  3.     display: block;
  4.     clear:both;
  5. }
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .me{
  9. margin-top: 20px;
  10. padding: 20px;
  11. border: 2px solid #eda;
  12. /* width: 600px;
  13. height: 400px; */
  14. background: rgb(221, 240, 255);
  15. }
  16. .me::after{
  17. content: "";
  18. display: block;
  19. clear: both;
  20. }
  21. /* 这种写法是为了兼容老版本的浏览器 */
  22. .me:after{
  23. content: "";
  24. display: block;
  25. clear: both;
  26. }
  27. .box{
  28. width: 150px;
  29. height: 120px;
  30. }
  31. .box1{
  32. background: #900;
  33. float: left;
  34. }
  35. .box2{
  36. background: #080;
  37. float: left;
  38. }
  39. .box3{
  40. clear: both;
  41. width: 180px;
  42. background: #ff0;
  43. float: left;
  44. }
  45. </style>
  46. </head>
  47. <body>
  48. <div class="me">
  49. <div class="box box1">三才洪。</div>
  50. <div class="box box2">三才洪。</div>
  51. <div class="box box3">三才洪。</div>
  52. </div>
  53. </body>
  54. </html>

1.3 浮动相关的 CSS 属性

CSS 属性功能属性值
float设置浮动left、right、none
clear清除浮动的影响left、right、both

 2.行内元素或行内块元素在布局中的特点

父元素设置的文本属性可以作用于行内元素和行内块元素

 2.1行内块居中

让行内块元素在父元素中水平居中

给父元素设置 text-align:center

让行内块元素在父元素中纵向居中

1. 给父元素设置行高
2. 给行内块元素设置 vertical-align:middle

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .me{
  9. width: 600px;
  10. height: 400px;
  11. border: 2px solid #a36060;
  12. text-align: center;
  13. line-height: 400px;
  14. }
  15. .box{
  16. display: inline-block;
  17. vertical-align: middle;
  18. /* 行高要与子元素一致才可以将文字居中 */
  19. line-height: 80px;
  20. width: 100px;
  21. height: 80px;
  22. background: #900;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="me">
  28. <div class="box box01">行内块</div>
  29. <!-- <div class="box box02"></div>
  30. <div class="box box03"></div> -->
  31. </div>
  32. </body>
  33. </html>

2.2 行内元素或行内块元素之间的空白问题

2.2.1元素之间的空白(左右)

产生原因:

代码中,元素之间的换行

2.2.2解决方案:

方案一: 代码中,元素之间不写换行(不推荐)
方案二: 父元素设置字体大小为0; 如果行内块元素中还有文字单独设置字体大小。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .me{
  9. width: 600px;
  10. height: 400px;
  11. border: 2px solid #a36060;
  12. font-size: 0;
  13. }
  14. .box{
  15. display: inline-block;
  16. vertical-align: middle;
  17. font-size: 16px;
  18. width: 100px;
  19. height: 80px;
  20. background: #900;
  21. }
  22. .boxx{
  23. display: inline;
  24. width: 100px;
  25. height: 80px;
  26. background: blue;
  27. font-size: 16px;
  28. }
  29. .boxxx{
  30. display: inline;
  31. width: 100px;
  32. height: 80px;
  33. background: palegreen;
  34. font-size: 16px;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="me">
  40. <div class="box box01">行内块</div>
  41. <div class="boxx box02">行内1</div>
  42. <div class="boxxx box03">行内2</div>
  43. </div>
  44. </body>
  45. </html>

2.2.3底部的空白(图片的幽灵空白)

产生原因:

行内块元素与文字基线对齐,底部的空白就是基线与底线的距离

解放方案:

方案一: 父元素设置字体大小 0
方案二: 给行内块元素设置 vertical-align:bottom (推荐)
方案三: 经典解决方案,针对图片,将图片设置成块级元素

2.2.4文字内容个数不同的行内块元素水平排列无法对齐

产生原因:

1. 如果行内块元素中没有文字,该元素的底部与基线对齐
2. 如果行内块元素中有一行文字,文字与外面的基线对齐,进而影响行内块元素的位置
3. 如果行内块元素中有多行文字,最后一行文字与外面的基线对齐,进而影响行内块元素的位置

解决方案

给行内块元素设置 vertical-align, 值不是 baseline 都可以解决问题

当出现为了换行导致元素掉下来时可以设置 

  1. .last{
  2. margin-right: 0;
  3. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/353495
推荐阅读
相关标签
  

闽ICP备14008679号