当前位置: 首页 > article >正文

前端学习之Flex布局

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flex布局示例</title>
    <style>
        .container {
            /* Flex布局 ,父盒子设置为flex布局后,子元素的float/clear/position/vertical-align属性无效 */
            display: flex;
            /* 水平居中 */
            justify-content:space-around;
            /* 垂直居中 */
            align-items: center;
            /* 容器高度 */
            height: 300px;
            /* 容器宽度 */
            border: 2px solid #333;
            flex-direction:row;
            flex-wrap: nowrap;
        }
        .item {
            /* 子元素宽度 */
            width: 200px;
            /* 子元素高度 */
            height: 100px;
            /* 子元素背景颜色 */
            background-color: #f0f0f0;
            border: 1px solid #ccc;
            /* 子元素居中 */
            display: flex;
            justify-content:center;
            align-items: center;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <section class="container-section">
        <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
        <h2>Flex布局应用场景</h2>
        <p>Flex布局适用于需要在不同屏幕尺寸上保持良好布局的场景,例如:</p>
        <ul>
            <li>响应式设计:在不同设备上自动调整元素的排列方式。</li>
            <li>导航栏:创建水平或垂直的导航菜单。</li>
            <li>卡片布局:在页面上均匀分布卡片元素。</li>
        </ul>
        <h2>Flex布局优缺点</h2>
        <h3>优点</h3>
        <ul>
            <li>简化布局代码:无需使用浮动或定位来实现复杂的布局。</li>
            <li>自动调整大小:子元素可以根据容器大小自动调整。</li>
            <li>对齐方式灵活:可以轻松控制子元素的对齐方式。</li>
        </ul>
        <h3>缺点</h3>
        <ul>
            <li>浏览器兼容性:虽然现代浏览器普遍支持Flexbox,但旧版浏览器可能存在兼容性问题。</li>
            <li>学习曲线:对于不熟悉Flexbox的开发者,需要一些时间来掌握其工作原理。</li>
            <li>复杂布局限制:对于非常复杂的布局,Flexbox可能不如Grid布局灵活。</li>
        </ul>
    </section>
    <h1>响应式布局demo如下</h1>
    <section class="container-responsive">
        <style>
            .responsive-container {
                display: flex;
                flex-wrap: wrap; /* 允许子元素换行 */
                justify-content: space-around;
                border: 2px solid #333;
                padding: 10px;
            }

            .responsive-item {
                width: calc(25% - 40px); /* 每个子元素占据1/3宽度,减去间距 */
                margin: 10px;
                background-color: #f0f0f0;
                border: 1px solid #ccc;
                display: flex;
                justify-content: center;
                align-items: center;
                font-size: 20px;
            }

            @media (max-width: 960px) {
                .responsive-item {
                    width: calc(50% - 40px); /* 在较小屏幕上,每个子元素占据1/2宽度 */
                }
            }

            @media (max-width: 480px) {
                .responsive-item {
                    width: 100%; /* 在非常小的屏幕上,每个子元素占据100%宽度 */
                }
            }
        </style>
        <div class="responsive-container">
            <div class="responsive-item">responsive Item 1</div>
            <div class="responsive-item">responsive Item 2</div>
            <div class="responsive-item">responsive Item 3</div>
            <div class="responsive-item">responsive Item 4</div>
        </div>
    </section>
    <h1>导航栏demo如下</h1>
    <selection class="nav">
        <style>
            .navbar {
                display: flex;
                justify-content: space-around;
                background-color: #333;
                padding: 10px;
            }

            .nav-item {
                color: white;
                font-size: 18px;
                cursor: pointer;
            }

            .nav-item:hover {
                color: #ffcc00;
            }
        </style>
        <nav class="navbar">
            <div class="nav-item">Home</div>
            <div class="nav-item">About</div>
            <div class="nav-item">Services</div>
            <div class="nav-item">Contact</div>
        </nav>
    </selection>
    <h1>卡片布局demo如下</h1>
    <section class="card">
        <style>
            .card-container {
                display: flex;
                justify-content: space-around;
                flex-wrap: wrap;
                padding: 10px;
            }

            .card {
                width: calc(33.333% - 20px);
                margin: 10px;
                background-color: #f0f0f0;
                border: 1px solid #ccc;
                padding: 20px;
                box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.1);
            }

            .card h3 {
                margin-top: 0;
            }

            .card p {
                margin-bottom: 0;
            }
        </style>
        <div class="card-container">
            <div class="card">
                <h3>Card 1</h3>
                <p>This is the content of card 1.</p>
            </div>
            <div class="card">
                <h3>Card 2</h3>
                <p>This is the content of card 2.</p>
            </div>
            <div class="card">
                <h3>Card 3</h3>
                <p>This is the content of card 3.</p>
            </div>
        </div>
    </section>
</body>
</html>

http://www.kler.cn/a/540540.html

相关文章:

  • 【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
  • 数据库高安全—数据保护:数据动态脱敏
  • kafka生产者之发送模式与ACK
  • 【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)
  • ESXi Host Client创建ubuntu虚拟机教程及NVIDIA显卡驱动安装
  • Java数据结构 | TreeMap 和 TreeSet
  • 【shellbash进阶系列】(四)SHELL脚本--变量(基础)
  • 用Python批量去除PDF文件的密码
  • AOSP 编译配置:深入解析 Android.mk 和 Android.bp
  • timescaladb时序数据库高可用docker镜像使用
  • 如何用WPF制作简单的加密解密
  • 设计方案主要做哪些事情?
  • Unity Dots理论学习-4.ECS有关的模块(3)
  • 125,【1】攻防世界unserialize3
  • JVM春招快速学习指南
  • 开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革
  • 详解java中的protected
  • 昇腾,Ascend,NPU,mindie,镜像,部署vllm:第4篇,尝试多模态大模型部署(Qwen2-vl)
  • 网络工程师 (30)以太网技术
  • kafka专栏解读
  • 【PCIE709-1】基于复旦微 JFM7VX690T80 FPGA 的 8 通道光纤双 FMC 接口数据处理平台
  • 内网穿透的应用-Ubuntu本地Docker搭建pichome文件管理系统打造个人云相册
  • Github 2025-02-08 Rust开源项目日报Top10
  • rtsp播放器如何回调rgb或yuv数据实现ai视觉算法对接?
  • 尚硅谷课程【笔记】——大数据之Linux【三】
  • 【C语言】#define和typedef的区别