博客列表 >定位布局与浮动塌陷处理的实战

定位布局与浮动塌陷处理的实战

北纬38
北纬38原创
2020年06月21日 23:14:54684浏览

1.懒加载

利用HTML和JavaScript简单实现懒加载:

  1. <body>
  2. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  3. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  4. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  5. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  6. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  7. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  8. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  9. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  10. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  11. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  12. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  13. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  14. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  15. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  16. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  17. <img src="头像.jpg" alt="" data-src="逃跑.jpg">
  18. </body>
  19. <script>
  20. // 视口大小: 窗口大小
  21. const viewHeight = document.documentElement.clientHeight;
  22. // 监听文档对象的滚动事件
  23. document.addEventListener("scroll", showImg);
  24. // 初始化
  25. window.addEventListener("load", showImg);
  26. // 回调
  27. function showImg() {
  28. // 获取所有图片
  29. let imgs = document.querySelectorAll("img");
  30. // 遍历每一张图片,判断当前的图片是否进入到入用户的可视区域
  31. imgs.forEach(function (img) {
  32. let imgTop = img.offsetTop;
  33. // 滚动高度 = 视口高度 + 滚动距离
  34. let scrTop = viewHeight + document.documentElement.scrollTop;
  35. // 图片已进入可视区
  36. if (imgTop < scrTop) {
  37. img.src = img.dataset.src;
  38. }
  39. });
  40. }
  41. </script>

例图:

2.浮动元素高度塌陷产生的原因与解决方案

  • 浮动float:浮动框不在文档的普通流中,所以普通流中的块级框变现的就像浮动框不存在一样,但是块级的文本内容会受到浮动元素的影响。
  • 使用浮动元素或者元素定位后,会产生一个块级框,不论它本身是何种元素
  • 浮动元素浮动之后,它后面的元素会自动填充它出让出来的空间大小
  • 浮动元素只会影响到它后面的元素布局,对前面没有影响
    基本浮动方式:

    1. <style>
    2. body{border: 5px solid blue;padding: 300px;}
    3. div{border: 1px solid black;
    4. width: 500px;height: 500px;
    5. margin: auto;
    6. }
    7. /* box1左浮动 */
    8. .box1{background-color: chartreuse;float: left;}
    9. /* box2右浮动 */
    10. .box2{background-color: chocolate;float: right;}
    11. /* box3不变 */
    12. .box3{background-color: cyan;clear: left;clear: right;clear: both;}
    13. a,span{background-color: darkorange;
    14. width: 300px ;height: 300px;
    15. float:right;}
    16. </style>
    17. </head>
    18. <body>
    19. <div class="box1">box1</div>
    20. <div class="box2">box2</div>
    21. <div class="box3">box3</div>
    22. <hr>
    23. <a href="">php.cn</a>
    24. <span>PHP中文网欢迎您!</span>
    25. </body>

    例图:
    浮动塌陷和解决方法:

  • 解决方案1:给父元素添加一个高度,但是此方法无法自适应.
  • 解决方案2:把父元素浮动起来 ,会产生传导效应,级数越多很麻烦.
  • 解决方案3: 添加一个专用元素用于清浮动 ,但依赖DOM结构
  • 解决方案4: 添加一个伪元素来解决,也可以
  • 解决方案5: 最简单的解决方案,加overflow属性(hidden/auto)
  1. <style>
  2. .container{
  3. border: 10px dashed black;}
  4. .item{width: 150px; height: 150px;}
  5. .item:first-of-type{background-color: chartreuse;}
  6. .item:nth-last-of-type(2){background-color: coral;}
  7. .item:last-of-type{background-color: cyan;}
  8. /* 浮动 */
  9. .item{float: left;}
  10. /* 解决方案1:给父元素添加一个高度,但是此方法无法自适应 */
  11. /* .container{height: 180px;} */
  12. /* 解决方案2: 把父元素浮动起来 ,会产生传导效应,级数越多很麻烦*/
  13. /* .container {float: left;}
  14. .box {float: left;} */
  15. /* 解决方案3: 添加一个专用元素用于清浮动 ,但依赖DOM结构*/
  16. /* div.clear {clear: both;} */
  17. /* 解决方案4: 添加一个伪元素来解决,也可以 */
  18. /* .container::after {content: "";display: block;clear: both;} */
  19. /* 解决方案5: 最简单的解决方案,加overflow属性(hidden/auto) */
  20. .container {overflow: hidden;overflow: auto;}
  21. </style>
  22. </head>
  23. <body>
  24. <!-- <div class="box"> -->
  25. <div class="container">
  26. <div class="item">1</div>
  27. <div class="item">2</div>
  28. <div class="item">3</div>
  29. <!-- <div class="clear"></div> -->
  30. </div>
  31. <!-- </div> -->
  32. </body>

例图:

3.三种方法实现三列布局

浮动实现三列布局:

  1. <style>
  2. /* 初始化 */
  3. body{margin: 0;padding: 0;box-sizing: border-box;}
  4. li{list-style: none;}
  5. a{text-decoration: none;color: teal;}
  6. /* 页眉与页脚 */
  7. .header,
  8. .footer{height: 100px;background-color: tomato;color: white;}
  9. /* 页眉与页脚内容区 */
  10. .content{width: 1500px;margin: auto;}
  11. .content ul li {float: left;line-height: 100px;padding: 0 25px;}
  12. .content ul li :hover{background-color: turquoise;}
  13. /* 页脚样式: */
  14. .content p{text-align: center;line-height: 50px;}
  15. /* 主体样式用定位 */
  16. .container{width: 960px;margin:10px auto;height: 1210px;
  17. /* 用定位元素做定位父级 */
  18. position: relative;}
  19. .container > .left{width: 200px;background-color: violet;height: 1210px;
  20. position: absolute;
  21. top: 0;left:0;}
  22. .container>.right{width: 200px;background-color: yellowgreen;height:1210px;
  23. position: absolute;
  24. top: 0;
  25. right: 0;}
  26. .container>.main{width: 560px;background-color: aqua;min-height: 1210px;
  27. position: absolute;
  28. top: 0;left: 200px;}
  29. </style>
  30. </head>
  31. <body>
  32. <!-- 页眉 -->
  33. <div class="header">
  34. <div class="content">
  35. <ul>
  36. <li><a href="">首页</a></li>
  37. <li><a href="">产品介绍</a></li>
  38. <li><a href="">排行板</a></li>
  39. <li><a href="">联系我们</a></li>
  40. </ul>
  41. </div>
  42. </div>
  43. <!-- 主体 -->
  44. <div class="container">
  45. <div class="left">产品分类</div>
  46. <div class="main">轮播图</div>
  47. <div class="right">其他样式</div>
  48. </div>
  49. <!-- 页脚 -->
  50. <div class="footer">
  51. <div class="content">
  52. <p>xxxxx科技有限公司;|备案号:ICP*********</p>
  53. </div>
  54. </div>
  55. </body>

例图:

4.总结

  • 设置相对定位的元素框会偏移某个距离,元素仍然保持其未定位前的形状,它原本所占的空间仍保留。
  • 要掌握元素的偏移。
  • 熟练掌握浮动元素的应用。
  • 掌握定位的使用。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议