vue布局

给于2个div块状元素的布局

方案1:横向并排(Flex Row)

<template><div class="container"><div class="background">背景</div><div class="panel">内容</div></div>
</template><script>
export default { name: 'FlexRowLayout' };
</script><style scoped>
.container {display: flex;height: 100vh;
}
.background {flex: 1;background: #74ebd5;
}
.panel {flex: 1;background: #fff;display: flex;justify-content: center;align-items: center;
}
</style>

方案2:纵向堆叠(Flex Column)

<template><div class="container"><div class="background">背景</div><div class="panel">内容</div></div>
</template><script>
export default { name: 'FlexColumnLayout' };
</script><style scoped>
.container {display: flex;flex-direction: column;height: 100vh;
}
.background {flex: 1;background: #9face6;
}
.panel {flex: 1;background: #fff;display: flex;justify-content: center;align-items: center;
}
</style>

方案3:层叠覆盖(绝对定位)

<template><div class="container"><div class="background"></div><div class="panel">内容</div></div>
</template><script>
export default { name: 'OverlayLayout' };
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.background {position: absolute;width: 100%;height: 100%;background: #74ebd5;z-index: 0;
}
.panel {position: absolute;width: 400px;height: 300px;background: white;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 1;box-shadow: 0 0 20px rgba(0,0,0,0.2);
}
</style>

方案4:左右对齐(float)

<template><div class="container"><div class="background">背景</div><div class="panel">内容</div></div>
</template><script>
export default { name: 'FloatLayout' };
</script><style scoped>
.container {height: 100vh;
}
.background {float: left;width: 50%;height: 100%;background: #74ebd5;
}
.panel {float: right;width: 50%;height: 100%;background: #fff;display: flex;justify-content: center;align-items: center;
}
</style>

方案5:Grid 网格布局

<template><div class="container"><div class="background">背景</div><div class="panel">内容</div></div>
</template><script>
export default { name: 'GridLayout' };
</script><style scoped>
.container {display: grid;grid-template-columns: 1fr 1fr;height: 100vh;
}
.background {background: #74ebd5;
}
.panel {background: #fff;display: flex;justify-content: center;align-items: center;
}
</style>

方案6:固定浮动按钮 + 居中内容

<template><div class="container"><div class="background"></div><div class="panel">内容</div><button class="float-btn" @click="toggle">切换</button></div>
</template><script>
export default {name: 'FloatingButtonLayout',data() {return { center: true };},methods: {toggle() {this.center = !this.center;}}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.background {position: absolute;width: 100%;height: 100%;background: #9face6;z-index: 0;
}
.panel {position: absolute;width: 400px;height: 300px;background: white;z-index: 1;transition: all 0.3s ease;top: 50%;left: 50%;transform: translate(-50%, -50%);
}
.container:not(.center) .panel {left: 60px;top: 50%;transform: translateY(-50%);
}
.float-btn {position: fixed;top: 20px;right: 20px;z-index: 999;
}
</style>

方案 7:卡片悬浮 + 背景渐变

效果:背景是渐变色,内容块居中悬浮,带阴影和圆角。

<template><div class="container"><div class="background"></div><div class="card">欢迎回来!</div></div>
</template><script>
export default { name: 'CardFloatLayout' };
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.background {position: absolute;width: 100%;height: 100%;background: linear-gradient(135deg, #667eea, #764ba2);
}
.card {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 360px;padding: 40px;background: white;border-radius: 12px;box-shadow: 0 20px 40px rgba(0,0,0,0.3);
}
</style>

方案 8:背景视频 + 登录框

效果:背景是自动播放的视频,登录框居中覆盖。

<template><div class="container"><video class="background" autoplay muted loop><source src="your-video.mp4" type="video/mp4" /></video><div class="panel">登录</div></div>
</template><script>
export default { name: 'VideoBackgroundLayout' };
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;overflow: hidden;
}
.background {position: absolute;width: 100%;height: 100%;object-fit: cover;
}
.panel {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background: rgba(255,255,255,0.9);padding: 30px;border-radius: 10px;box-shadow: 0 0 20px rgba(0,0,0,0.3);
}
</style>

方案 9:左右滑动切换布局(登录/注册)

效果:两个块分别是登录和注册界面,通过按钮滑动切换。

<template><div class="container"><div class="slider" :class="{ active: isRegister }"><div class="panel login">登录</div><div class="panel register">注册</div></div><button class="toggle-btn" @click="isRegister = !isRegister">{{ isRegister ? '去登录' : '去注册' }}</button></div>
</template><script>
export default {name: 'SlideSwitchLayout',data() {return { isRegister: false };}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;overflow: hidden;
}
.slider {display: flex;width: 200%;height: 100%;transition: transform 0.5s ease;
}
.slider.active {transform: translateX(-50%);
}
.panel {width: 50%;display: flex;justify-content: center;align-items: center;font-size: 24px;background: #f0f0f0;
}
.login {background: #74ebd5;
}
.register {background: #9face6;
}
.toggle-btn {position: fixed;bottom: 30px;right: 30px;padding: 10px 20px;
}
</style>

点击右下按钮会转到去注册

方案 10:响应式折叠布局(移动端优化)

效果:大屏幕左右并排,小屏幕上下堆叠。

<template><div class="container"><div class="background">背景</div><div class="panel">内容</div></div>
</template><script>
export default { name: 'ResponsiveLayout' };
</script><style scoped>
.container {display: flex;flex-direction: row;height: 100vh;
}
.background, .panel {flex: 1;display: flex;justify-content: center;align-items: center;
}
.background {background: #74ebd5;
}
.panel {background: #fff;
}
@media (max-width: 768px) {.container {flex-direction: column;}
}
</style>

方案 11:分屏滑动布局(左右滑入)

效果:两个块初始隐藏,页面加载时从左右滑入,制造动态分屏感。

<template><div class="container"><div class="left" :class="{ active: show }">左侧内容</div><div class="right" :class="{ active: show }">右侧内容</div></div>
</template><script>
export default {name: 'SplitSlideLayout',data() {return { show: false };},mounted() {setTimeout(() => (this.show = true), 300);}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;overflow: hidden;
}
.left, .right {position: absolute;width: 50%;height: 100%;top: 0;transition: transform 0.6s ease;display: flex;justify-content: center;align-items: center;font-size: 24px;color: white;
}
.left {left: 0;background: #667eea;transform: translateX(-100%);
}
.right {right: 0;background: #764ba2;transform: translateX(100%);
}
.left.active {transform: translateX(0);
}
.right.active {transform: translateX(0);
}
</style>

方案 12:登录框拖拽布局

效果:用户可以拖动登录框在页面任意位置,增强交互性。

<template><div class="container"><div class="background"></div><divclass="panel":style="{ top: y + 'px', left: x + 'px' }"@mousedown="startDrag">拖我试试</div></div>
</template><script>
export default {name: 'DraggableLogin',data() {return { x: 200, y: 200, dragging: false, offsetX: 0, offsetY: 0 };},methods: {startDrag(e) {this.dragging = true;this.offsetX = e.clientX - this.x;this.offsetY = e.clientY - this.y;document.addEventListener('mousemove', this.onDrag);document.addEventListener('mouseup', this.stopDrag);},onDrag(e) {if (this.dragging) {this.x = e.clientX - this.offsetX;this.y = e.clientY - this.offsetY;}},stopDrag() {this.dragging = false;document.removeEventListener('mousemove', this.onDrag);document.removeEventListener('mouseup', this.stopDrag);}}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.background {position: absolute;width: 100%;height: 100%;background: #9face6;
}
.panel {position: absolute;width: 300px;height: 200px;background: white;border-radius: 8px;box-shadow: 0 0 20px rgba(0,0,0,0.3);cursor: move;display: flex;justify-content: center;align-items: center;
}
</style>

方案 13:背景渐变切换 + 登录框淡入

效果:背景颜色渐变切换,登录框淡入,适合欢迎页或品牌展示。

<template><div class="container" :class="bgClass"><div class="panel">欢迎回来</div></div>
</template><script>
export default {name: 'GradientSwitchLayout',data() {return { bgClass: 'bg1' };},mounted() {setInterval(() => {this.bgClass = this.bgClass === 'bg1' ? 'bg2' : 'bg1';}, 3000);}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;transition: background 1s ease;
}
.bg1 {background: linear-gradient(to right, #ff9a9e, #fad0c4);
}
.bg2 {background: linear-gradient(to right, #a1c4fd, #c2e9fb);
}
.panel {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background: white;padding: 40px;border-radius: 10px;box-shadow: 0 0 30px rgba(0,0,0,0.2);animation: fadeIn 1s ease;
}
@keyframes fadeIn {from { opacity: 0; transform: translate(-50%, -60%); }to { opacity: 1; transform: translate(-50%, -50%); }
}
</style>

方案 14:左右互换布局方案(Float 或 Flex)

✅ 效果说明

  • 两个块并排显示:左边是 A,右边是 B。

  • 点击按钮后,A 和 B 互换位置。

  • 可用于登录页、信息展示页、对比页等场景。

💡 Vue 2 示例代码

左右宽度一致
<template><div class="container"><div :class="leftClass">左侧内容</div><div :class="rightClass">右侧内容</div><button class="switch-btn" @click="swap">切换位置</button></div>
</template><script>
export default {name: 'SwapLayout',data() {return {swapped: false};},computed: {leftClass() {return this.swapped ? 'block right' : 'block left';},rightClass() {return this.swapped ? 'block left' : 'block right';}},methods: {swap() {this.swapped = !this.swapped;}}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.block {position: absolute;width: 50%;height: 100%;display: flex;justify-content: center;align-items: center;font-size: 24px;transition: all 0.4s ease;
}
.left {left: 0;background: #74ebd5;
}
.right {right: 0;background: #9face6;
}
.switch-btn {position: fixed;bottom: 30px;right: 30px;padding: 10px 20px;z-index: 999;
}
</style>
左右宽度不一致
<template><div class="container"><div :class="leftClass">左侧内容</div><div :class="rightClass">右侧内容</div><button class="switch-btn" @click="swap">切换位置</button></div>
</template><script>
export default {name: 'SwapLayout',data() {return {swapped: false};},computed: {leftClass() {return this.swapped ? 'block right2' : 'block left';},rightClass() {return this.swapped ? 'block left2' : 'block right';}},methods: {swap() {this.swapped = !this.swapped;}}
};
</script><style scoped>
.container {position: relative;width: 100vw;height: 100vh;
}
.block {position: absolute;height: 100%;display: flex;justify-content: center;align-items: center;font-size: 24px;transition: all 0.4s ease;
}
.left {width: 66%;left: 0;background: #74ebd5;
}
.right {width: 34%;right: 0;background: #9face6;
}
.left2 {width: 34%;left: 0;background: #74ebd5;
}
.right2 {width: 66%;right: 0;background: #9face6;
}
.switch-btn {position: fixed;bottom: 30px;right: 30px;padding: 10px 20px;z-index: 999;
}
</style>

🧠 技术要点

  • 使用 position: absolute + left/right 控制位置。

  • computed 动态切换类名实现互换。

  • 加上 transition 实现平滑过渡。

🚀 可扩展方向

  • 加入动画:滑动、淡入淡出、翻转。

  • 内容块支持 slot 或组件嵌套。

  • 响应式适配:小屏幕下上下堆叠。

  • 多种布局模式切换:并排、覆盖、居中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95193.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hysplit大气传输和污染扩散-轨迹聚合标准20%30%用途

1、HYSPLIT轨迹聚合中的百分比标准在HYSPLIT模型中&#xff0c;轨迹聚合&#xff08;Trajectory Clustering&#xff09;用于将大量轨迹按相似性分组&#xff0c;20%和30%是常见的聚合阈值标准&#xff0c;反映轨迹间的空间相似度要求。2、20%和30%的具体含义这两个百分比代表轨…

Linux shell 脚本基础 003

目录 Linux shell 脚本语句 1. for 循环流程控制 1.1 基本语法格式 1.2 常见用法示例 1.3生产案例示例 2. while 循环 2.1 基本语法格式 2.2 常见用法示例 3. case 语句 3.1 基本语法格式 3.2 常见用法示例 3.3生产案例示例 4. shell 函数 4.1 函数的定义 4.2 函…

7.1elementplus的表单

Element Plus 表单由以下几个关键部分构成&#xff1a;<el-form>: 表单容器。它是整个表单的根组件&#xff0c;负责管理表单数据、校验规则、布局方式等。<el-form-item>: 表单项容器。用于包裹一个具体的表单控件&#xff08;如输入框、选择器等&#xff09;及其…

TF-IDF:文本分析的“火眼金睛”

TF-IDF&#xff1a;文本分析的“火眼金睛” 在信息爆炸的时代&#xff0c;我们每天都会接触到海量的文本数据。如何从这些数据中快速找出最重要的信息&#xff1f;TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;算法就是一种非常实用的工具&#xf…

传统星型拓扑结构的5G,WiFi无线通信网络与替代拓扑结构自组网

一、个人理解 区别自组网&#xff0c;5G和WiFi三者要抓住两个关键点&#xff1a;移动、组网。 5G通信是移动通信的最新一代&#xff1b;1940年代美军的手持对讲机虽然可以移动&#xff0c;但是算不上网络&#xff0c;后面的第一代移动通信蜂窝网络才能算上网络。 WiFi通信虽…

REST API 是无状态的吗,如何保障 API 的安全调用?

当然&#xff0c;这是一个非常核心的API设计和安全领域的问题。我们来详细拆解一下。1. REST API 是无状态的吗&#xff1f;​是的&#xff0c;REST API 的核心原则之一就是“无状态”&#xff08;Statelessness&#xff09;。​​这意味着&#xff1a;​服务器不保存客户端的会…

Machine Learning HW3 report:图像分类(Hongyi Lee)

任务&#xff1a;使用CNN把食物图片分为11类&#xff08;不能使用预训练的模型&#xff09;。此任务很耗时&#xff0c;一次训练至少1h&#xff0c;所以要利用好Kaggle notebook中Save Version功能&#xff0c;并行训练节省时间。 基准 Simple : 0.50099Medium : 0.73207 Train…

Element整体操作样式

Element: 给表格整体设置斑马纹 在main.js中 ElementUI.Table.props.stripe {type: Boolean,default: true }在element-ui.scss中 // // 为所有 el-table 设置默认斑马纹 // .el-table { // &.el-table--enable-row-hover .el-table__body tr:hover > td { // ba…

谷歌官宣组建“网络攻击部门”,美国网络安全战略转向“以攻代防”

谷歌宣布将组建网络攻击部门8月27日&#xff0c;谷歌宣布将组建网络攻击部门&#xff08;disruption unit&#xff09;。谷歌威胁情报集团副总裁Sandra Joyce在本周二的网络安全政策会议上表示&#xff0c;谷歌正在寻找“合法且符合道德规范的干扰方案”&#xff0c;通过情报主…

Rust Tokio异步任务实战教程(高级功能)

1. 强大的异步 I/O 多路复用Tokio 的核心竞争力之一是对操作系统原生异步 I/O 机制的封装&#xff08;如 Linux 的 epoll、Windows 的 IOCP、macOS 的 kqueue&#xff09;&#xff0c;这是异步非阻塞的底层基石。作用&#xff1a;允许单线程同时监听成百上千个 I/O 事件&#x…

8.1【Q】VMware相关

在图四中&#xff0c;Interface Layer是用来干什么的&#xff1f;IOBus是什么我正在使用VMware虚拟机&#xff0c;但是没有网络&#xff08;宿主机有网&#xff09;&#xff0c;我该如何配置网络&#xff1f;网络连接模式​​&#xff1a;​​NAT模式​​&#xff08;推荐&…

从卡顿到丝滑:大型前端项目 CSS 优化全攻略

摘要 页面样式变重是大前端项目常见的后遗症&#xff1a;CSS 体积越来越大、首屏卡、切页抖、首包飙。核心问题其实就三件事&#xff1a;把首屏必须的样式尽快给到浏览器、把非首屏的样式晚点再说、把多余的样式坚决清理掉。本文用可运行的 Demo 和工程化流程&#xff0c;带你…

CSS基础学习第二天

1.emmet语法1&#xff09;快速生成HTML结构语法---标签名tab键即可生成标签---标签*数量即可生成多个标签---如果有父子级关系的标签&#xff0c;用>&#xff0c;比如ul>litab键---如果有兄弟级的标签&#xff0c;用tab键---如果生成带有类名或者id名字的&#xff0c;直接…

【自记】 Python 中函数参数前加 *(单星号)的解包可迭代对象写法说明

在 Python 中&#xff0c;函数参数前加 *&#xff08;单星号&#xff09;是一种解包可迭代对象的写法&#xff0c;用于将可迭代对象&#xff08;如元组、列表等&#xff09;中的元素逐个传递给函数的参数。具体说明当有一个可迭代对象&#xff08;比如元组 temp (1, 2, 3)&…

C语言————深入理解指针1(通俗易懂)

C语言越学到后面&#xff0c;越会感到恐慌&#xff0c;听到指针、结构体等等这些&#xff0c;想必很多人不自觉的就会感觉很难&#xff0c;就想打退堂鼓了。哈哈哈哈&#xff0c;被小博猜到了吧&#xff01;&#xff01;悄悄告诉你们&#xff0c;小博刚开始学习的时候也是。但是…

香港电讯为知名投资公司搭建高效、安全IT管理服务体系

客户背景 客户为一家世界知名的能源投资公司在中国设立的子公司&#xff0c;在中国拥有涵盖煤炭开采、火力发电、新能源以及能源贸易等贯穿整个能源供应链的业务体系&#xff0c;投资共计2个煤矿、4个电厂&#xff0c;以及7个光伏电站。 客户需求 客户希望通过位于北京的总部…

紧急安全通告:多款 OpenSSH 与 glibc 高危漏洞曝光,CVE-2023-38408 等须立即修复

概述&#xff1a;OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现&#xff0c;支持对所有的传输进行加密&#xff0c;可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH …

随时随地开发:通过 FRP 搭建从 Ubuntu 到 Windows 的远程 Android 调试环境

你是否曾梦想过这样的工作流:在咖啡馆里,你只带着一台轻薄的 Surface Pro,而代码的编译、运行和调试,全部交由家里那台性能强劲的 Ubuntu 台式机来完成?更酷的是,你甚至想将手机直接插在 Surface 上,让远端的 Ubuntu 无缝识别并进行开发。 今天,我们就将这个梦想变为现…

异步编程与面向对象知识总结

文章目录原型链关键字总结原型对象:prototype对象原型:__ proto__面向对象编程封装抽象多态总结异步编程基础循环宏任务嵌套微任务原型链关键字总结 原型对象:prototype 函数的属性,指向一个对象&#xff0c;这个对象是通过该函数作为构造函数创建的所有实例的原型 修改原型会…

Spring Boot + KingbaseES 连接池实战

文章目录一、前言二、什么是数据库连接池&#xff1f;三、SpringBoot KingbaseES 环境准备3.1 加依赖&#xff08;pom.xml&#xff09;3.2 基础连接信息&#xff08;application.yml&#xff09;四、四类主流连接池实战4.1 DBCP&#xff08;迁移型 / 传统项目友好&#xff09;…