目录

从 HTML 到 CSS:开启网页样式之旅(八)—— 解决浮动产生的影响与浮动例题(CSS基础完结篇)

从 HTML 到 CSS:开启网页样式之旅(八)------ 解决浮动产生的影响与浮动例题


前言

  • 在之前的博客中,我们深入学习了 CSS 浮动的相关知识,包括它的概念、特点以及一些基础的应用和练习。
  • 然而,在实际使用浮动进行布局时,常常会产生一些意想不到的影响,比如父元素高度塌陷等问题。
  • 今天,我们就来着重探讨如何解决这些由浮动产生的影响,并通过一些实际的例题来加深对浮动的理解和运用,进一步提升我们的网页布局能力。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的HTML-CSS专栏
https://blog.csdn.net/2402_83322742/category_12834817.html?spm=1001.2014.3001.5482

HTML-CSS-JavaScript综合大项目专栏
https://blog.csdn.net/2402_83322742/category_12880492.html?spm=1001.2014.3001.5482


一、浮动产生的问题及解决办法

1. 父元素高度塌陷问题

当子元素设置了浮动后,由于它们脱离了正常文档流,父元素会感知不到子元素的高度,从而导致父元素的高度塌陷,影响整个页面的布局。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Problem</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
        }
        .child {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

</html>

在上述代码中,.child 元素设置了左浮动,导致 .parent 元素高度塌陷,显示效果中 .parent 的高度几乎为 0。

解决方法一:给父元素设置固定高度

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Problem</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
            height: 100px; /* 给父元素设置固定高度 */
        }
        .child {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

</html>

这种方法简单直接,但当子元素内容高度不确定时,可能会导致父元素高度设置不准确,影响布局美观。

解决方法二:使用 overflow: hidden

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Problem</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
            overflow: hidden; /* 触发 BFC,解决高度塌陷问题 */
        }
        .child {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

</html>

overflow: hidden 会触发块级格式化上下文(BFC),使得父元素能够包含浮动的子元素,从而解决高度塌陷问题。但如果子元素内容超出了父元素的范围,超出部分会被隐藏。

解决方法三:添加空的清除元素

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Problem</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
        }
        .child {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
        }
        .clear {
            clear: both; /* 清除浮动 */
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
        <div class="clear"></div> <!-- 添加空的清除元素 -->
    </div>
</body>

</html>

在父元素的最后添加一个空的元素,并设置 clear: both,可以清除浮动对父元素高度的影响,但会增加额外的 HTML 结构。

2. 元素重叠问题

当多个浮动元素的宽度之和超过父元素的宽度时,可能会导致元素重叠。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Overlap</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
        }
        .child {
            float: left;
            width: 200px;
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>

</html>

上述代码中,两个 .child 元素的宽度之和为 400px,超过了父元素的 300px 宽度,导致第二个 .child 元素与第一个重叠。

解决方法:合理调整元素宽度

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Float Overlap</title>
    <style>
        .parent {
            border: 1px solid black;
            width: 300px;
        }
        .child {
            float: left;
            width: 140px; /* 调整元素宽度,使它们能在一行显示 */
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>

</html>

通过合理计算和调整浮动元素的宽度,确保它们的总宽度不超过父元素的宽度,从而避免元素重叠问题。

二、浮动例题

例题 1:三栏布局

实现一个三栏布局,左右两栏宽度固定,中间栏自适应宽度。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Three Column Layout</title>
    <style>
        .left {
            float: left;
            width: 200px;
            height: 300px;
            background-color: lightcoral;
        }
        .right {
            float: right;
            width: 200px;
            height: 300px;
            background-color: lightgreen;
        }
        .middle {
            margin: 0 210px; /* 留出左右两栏的宽度和间距 */
            height: 300px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="left"></div>
    <div class="right"></div>
    <div class="middle"></div>
</body>

</html>

在这个布局中,.left 元素左浮动,.right 元素右浮动,.middle 元素通过设置左右 margin 来适应中间的宽度,实现了三栏布局。

例题 2:图片文字环绕布局优化

在之前的图片文字环绕布局基础上,添加一些样式优化,使布局更加美观。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Image Text Wrap</title>
    <style>
        img {
            float: left;
            width: 150px;
            height: 150px;
            margin-right: 20px;
            border-radius: 10px; /* 给图片添加圆角 */
            box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); /* 添加阴影效果 */
        }
        p {
            line-height: 1.6; /* 调整行高 */
            font-size: 16px;
        }
    </style>
</head>

<body>
    <img src="./TvzVABfVpn.jpg" alt="示例图片">
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat, asperiores? Autem, molestiae. Nisi, ad!
        Voluptate itaque facere molestiae ratione quibusdam, doloribus voluptas sit asperiores incidunt aliquid
        architecto, ex praesentium beatae?</p>
</body>

</html>

通过给图片添加圆角和阴影效果,以及调整文字的行高和字体大小,使图片文字环绕布局更加美观和舒适。

希望大家通过这篇博客,对 CSS 浮动有了更深入的认识,也期待大家在实践中不断探索和应用,提升自己的网页开发技能。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的HTML-CSS专栏
https://blog.csdn.net/2402_83322742/category_12834817.html?spm=1001.2014.3001.5482

HTML-CSS-JavaScript综合大项目专栏
https://blog.csdn.net/2402_83322742/category_12880492.html?spm=1001.2014.3001.5482

|--------------------|
| 非常感谢您的阅读,喜欢的话记得三连哦 |

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
日记成书15 分钟前
【HTML 基础教程】HTML 属性
前端·html
Justin3go19 分钟前
我开发了一个Hacker News上的每日产品精选
前端·后端·hacker news
爱爬山的老虎20 分钟前
CSS之盒子模型
前端·css·css3
果冻kk29 分钟前
【HTML5游戏开发教程】零基础入门合成大西瓜游戏实战 | JS物理引擎+Canvas动画+完整源码详解
前端·javascript·html5·小游戏·合成大西瓜
戒不掉的伤怀1 小时前
electron打包vue2项目流程
前端·javascript·electron
CreatorRay1 小时前
前端面经分享(25/03/26)
前端·javascript·面试
假装我不帅1 小时前
C# 操作html下的css样式
css·c#·html
YiHanXii1 小时前
使用glb作为react的3D组件
javascript·react.js·3d
掘金安东尼1 小时前
推荐!高效灵活的、可集成的、文本化绘图工具 —— PlantUML
前端·javascript·github
哀木1 小时前
哈哈,commit + push 发布之后看见忘了 add 🤡
前端