HTML,子元素使用float后,导致父元素高度塌陷

HTML学习中遇到的一个任务:header 标签有两个元素 div(标题) 和 nav(导航),希望实现的效果是标题在左侧,导航在右侧。
基础代码如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>float导致父元素塌陷</title>
    <style>
        header {
            background-color: rgb(32, 86, 156);
            color: #fff;
            border: 5px solid rgb(15, 38, 138);
        }

        header ul {
            list-style: none;
            margin: 0;
            padding: 0;
        }

        header a {
            color: #fff;
            text-decoration: none;
            display: block;
            padding: 0.5em 1em;
        }

        header .title {
            font-style: italic;
            font-weight: bold;
            padding: 1em;
        }
    </style>
</head>

<body>
    <header>
        <div class="title">页面标题</div>
        <nav>
            <ul>
                <li><a href="">主页</a></li>
                <li><a href="">子页面1</a></li>
                <li><a href="">子页面2</a></li>
            </ul>
        </nav>
    </header>
</body>

</html>

初始状态

简单的以为设置float就可以达到效果,于是在CSS代码底部加入:

header .title {
 float: left;
 }

header nav {
 float: right;
}

变成一条线:
在这里插入图片描述
这个时候使用百度AI对话进行搜素(没有广告,可以使用其他搜索工具,现在AI搜索在查技术问题的解决方案上确实比以前准确很多了)给我的结果:
在HTML中,float属性用于创建浮动元素,使得元素向左或向右浮动,并且其周围的内容会环绕它。使用float可以实现文本或图片环绕效果,但需要注意的是,使用float后,如果不进行清除浮动,则可能导致父元素高度塌陷的问题。
给了我四个解决方案,我分别实验下,header元素都正常显示了:

  1. 在浮动元素之后添加一个清除浮动的元素,并为其设置clear属性。
<header>
        <div class="title">页面标题</div>
        <nav>
            <ul>
                <li><a href="">主页</a></li>
                <li><a href="">子页面1</a></li>
                <li><a href="">子页面2</a></li>
            </ul>
        </nav>
        <div style="clear: both;"></div>
    </header>
  1. 使用伪元素方式清除浮动。
    在变成线的代码上,CSS底部加入:
header::after {
  content: "";
  display: table;
  clear: both;
}
  1. 使用overflow属性。
    在变成线的代码上,CSS底部加入:
header {
 overflow: auto;
}

上面3种方法修改后的效果如下图:
在这里插入图片描述

  1. 使用flex或grid布局代替float。
    删除 float 相关css代码,加入:
header {
  display: flex;
}

在这里插入图片描述
稍微修改下,实现标题在左边,导航在右边的布局:

header {
  display: flex;
}

header .title {
  flex: 1;
}

header nav {
  flex: none;
}

在这里插入图片描述
右边的导航还不是很好看,再稍微修改下,修改以后flex相关代码如下:

header {
  display: flex;
}
header .title {
  flex: 1;
}
header nav {
  flex: none;
  display: flex;
  align-items: center;
}
header nav ul {
  display: flex;
}

在这里插入图片描述
一边学习一边完成任务是个不错的学习方式,分享遇到的问题和解决方案给需要的人。

相关推荐

  1. html元素基本使用

    2024-03-20 21:24:03       51 阅读
  2. 怎么解决元素引起的高度坍塌?

    2024-03-20 21:24:03       39 阅读
  3. UGUI对象自适应元素布局解决方案

    2024-03-20 21:24:03       30 阅读
  4. 解决元素的click事件会触发元素的dbclick事件

    2024-03-20 21:24:03       57 阅读
  5. css设置元素元素中水平垂直居中

    2024-03-20 21:24:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 21:24:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 21:24:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 21:24:03       87 阅读
  4. Python语言-面向对象

    2024-03-20 21:24:03       96 阅读

热门阅读

  1. 【前端】国际化实现过程

    2024-03-20 21:24:03       46 阅读
  2. 使用map优化双层for循环

    2024-03-20 21:24:03       40 阅读
  3. Spring容器(ApplicationContext)刷新过程

    2024-03-20 21:24:03       37 阅读
  4. Spring底层核心原理解析

    2024-03-20 21:24:03       43 阅读
  5. CSDN 新手markdown模板,画图用

    2024-03-20 21:24:03       40 阅读
  6. 13 新型网络应用(3)

    2024-03-20 21:24:03       41 阅读
  7. Rust 中Self 关键字的两种不同用法

    2024-03-20 21:24:03       45 阅读
  8. Cuckoo沙箱环境使用介绍

    2024-03-20 21:24:03       39 阅读
  9. computed

    2024-03-20 21:24:03       40 阅读
  10. 3月20日:子集Ⅱ、非递减子序列

    2024-03-20 21:24:03       46 阅读