css 布局学习之底部弹窗切换示

分享下个人平时练习前端的代码。支付h5和pc端,直接上代码看效果。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
    <title>底部弹窗切换示例</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }
        body {
            font-family: Arial, sans-serif;
            overflow: hidden; /* 禁用默认滚动 */
        }
        .content {
            width: 100%;
            height: 100vh;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            align-items: center;
            background-color: #ccc;
            position: relative;
        }
        .nav {
            width: 100%;
            height: 50px;
            background-color: #f00;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 18px;
            color: white;
        }
        .main {
            width: 100%;
            flex: 1;
            background-color: #0f0;
            display: flex;
            flex-direction: column;
            overflow-y: auto; /* 允许垂直滚动 */
            padding: 10px;
        }
        .tab {
            width: 100%;
            height: 50px;
            background-color: #00f;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 18px;
            color: white;
            cursor: pointer;
        }
        .item {
            height: 100px;
            background-color: rgba(255, 255, 255, 0.8);
            margin: 5px 0;
            display: flex;
            justify-content: center;
            align-items: center;
            border-radius: 5px;
        }
        .modal {
            display: none; /* 默认隐藏弹窗 */
            width: 100%;
            background-color: white;
            box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.2); /* 边框阴影效果 */
            padding: 20px;
            transition: transform 0.3s ease; /* 添加过渡效果 */
        }
        .modal.active {
            display: block; /* 显示弹窗 */
        }
        .main.active {
            /*transform: translateY(-100px); !* 向上移动主内容 *!*/
            /*padding-bottom: 100px;*/
        }
        .modal-header, .modal-footer {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .modal-header {
            font-weight: bold;
        }
        .close-button {
            cursor: pointer;
            color: #f00;
        }
    </style>
</head>
<body>
<div id="app" class="content">
    <div class="nav">导航栏</div>
    <div class="main"  ref="mainContent">
        <div class="item">内容 1</div>
        <div class="item">内容 2</div>
        <div class="item">内容 3</div>
        <div class="item">内容 4</div>
        <div class="item">内容 5</div>
        <div class="item">内容 6</div>
        <div class="item">内容 7</div>
        <div class="item">内容 8</div>
        <div class="item">内容 9</div>
        <div class="item">内容 10</div>
        <div class="item">内容 11</div>
        <div class="item">内容 12</div>
        <div class="item">内容 13</div>
        <div class="item">内容 14</div>
        <div class="item">内容 15</div>
        <div class="item">内容 16</div>
        <div class="item">内容 17</div>
        <div class="item">内容 18</div>
        <div class="item">内容 19</div>
        <div class="item">内容 20</div>
        <div class="item">内容 21</div>
        <div class="item">内容 22</div>
        <div class="item">内容 23</div>
        <div class="item">内容 24</div>
        <div class="item">内容 25</div>
        <div class="item">内容 26</div>
        <div class="item">内容 27</div>
        <div class="item">内容 28</div>
        <div class="item">内容 29</div>
        <div class="item">内容 30</div>
    </div>
    <div class="tab" @click="toggleModal">底部栏</div>

    <!-- 弹窗 -->
    <div class="modal" :class="{ active: showModal }">
        <div class="modal-header">
            <span>弹窗标题</span>
            <span class="close-button" @click="toggleModal">关闭</span>
        </div>
        <div class="modal-body">
            <p>这是底部弹窗的内容。</p>
        </div>
        <div class="modal-footer">
            <button @click="toggleModal">确认</button>
        </div>
    </div>
</div>

<script>
    const { createApp, ref } = Vue;

    createApp({
        setup() {
            const showModal = ref(false); // 控制弹窗显示状态
            const mainContent = ref(null); // 引用 main 内容区域

            const toggleModal = () => {
                showModal.value = !showModal.value; // 切换弹窗显示状态
                // 在弹窗打开时滚动到最底部
                if (showModal.value && mainContent.value) {
                    mainContent.value.scrollTop = mainContent.value.scrollHeight;
                }
            };

            return { showModal, mainContent, toggleModal };
        }
    }).mount('#app');
</script>
</body>
</html>
相关推荐
艾莉丝努力练剑14 分钟前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
77238918 分钟前
解决 Microsoft Edge 显示“由你的组织管理”问题
前端·microsoft·edge
烛阴33 分钟前
前端必会:如何创建一个可随时取消的定时器
前端·javascript·typescript
JarvanMo1 小时前
Swift 应用在安卓系统上会怎么样?
前端
LinXunFeng1 小时前
Flutter - 详情页 TabBar 与模块联动?秒了!
前端·flutter·开源
萌萌哒草头将军1 小时前
Oxc 最新 Transformer Alpha 功能速览! 🚀🚀🚀
前端·javascript·vue.js
武昌库里写JAVA1 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.2 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
Justinc.2 小时前
HTML5新增属性
前端·html·html5
小幽余生不加糖2 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频