0

0

使用Flexbox与JavaScript实现响应式两列布局的等高堆叠

霞舞

霞舞

发布时间:2025-11-08 10:40:11

|

936人浏览过

|

来源于php中文网

原创

使用flexbox与javascript实现响应式两列布局的等高堆叠

本文探讨如何在响应式设计中实现两列布局的等宽等高堆叠。利用CSS Flexbox构建基础布局和媒体查询实现垂直堆叠,并通过JavaScript动态获取并同步列的尺寸,确保在不同屏幕尺寸下,包含视频和文本的两列始终保持宽度一致且高度相等,提供无缝的用户体验。

在现代网页设计中,响应式布局是不可或缺的一部分。当我们需要在不同屏幕尺寸下展示两列内容(例如,一列包含视频,另一列包含文本)时,一个常见的挑战是如何确保它们在横向排列时等高,以及在小屏幕上堆叠成一列时,依然保持等宽且等高。单纯依靠CSS Flexbox在某些复杂场景下(特别是当内容高度不确定,如嵌入式视频)可能无法完美实现等高效果。本教程将介绍一种结合Flexbox、媒体查询和JavaScript的综合解决方案,以实现精确的响应式两列等高堆叠。

基础布局:Flexbox与媒体查询

首先,我们使用CSS Flexbox来构建基础的两列布局。Flexbox提供了一个强大且灵活的方式来排列、对齐和分配容器内的空间。通过媒体查询,我们可以在特定屏幕尺寸下改变布局方向,实现列的垂直堆叠。

HTML 结构: 我们使用一个 page-wrapper2 作为最外层容器,内部包含一个 row 类作为 Flex 容器,再由两个 column 类包裹实际内容(blue-column 和 red-column)。为了方便JavaScript操作,我们为内部内容块添加了 id 属性。

<div class="page-wrapper2">
  <div class="row">
    <div class="column">
      <div class="blue-column" id="blue-column">
        <iframe width="100%" height="315" src="https://www.youtube.com/embed/YIOb5_WCsOY" title="YouTube video player"
          frameborder="0"
          allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
          allowfullscreen></iframe>
      </div>
    </div>
    <div class="column">
      <div class="red-column" id="red-column">
        <h2>Red Column</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
        <button>Watch today</button>
      </div>
    </div>
  </div>
</div>

CSS 样式:row 类被设置为 display: flex,使其子元素 column 横向排列。column 类则被赋予 flex: 1,确保它们平分可用空间并保持等宽。媒体查询 @media screen and (max-width: 800px) 在屏幕宽度小于等于800px时,将 row 的 flex-direction 从 row 切换到 column,从而实现两列的垂直堆叠。height: 100% 被应用于内部内容块,以确保它们填充父容器的高度。

立即学习Java免费学习笔记(深入)”;

琅琅配音
琅琅配音

全能AI配音神器

下载
.page-wrapper2 {
  margin: 0px;
  border: 2px solid black; /* 仅为演示边框 */
}

.row {
  display: flex;
  flex-direction: row; /* 默认横向排列 */
  flex-wrap: wrap; /* 允许换行 */
  width: 100%;
}

.column {
  display: flex;
  flex-direction: column;
  flex-basis: 100%; /* 初始基准宽度100% */
  flex: 1; /* 平分可用空间 */
}

.blue-column {
  background-color: blue; /* 仅为演示背景色 */
  height: 100%; /* 填充父容器高度 */
  padding: 40px;
  color: white; /* 文本颜色 */
}

.red-column {
  background-color: red; /* 仅为演示背景色 */
  height: 100%; /* 填充父容器高度 */
  padding: 40px;
  color: white; /* 文本颜色 */
}

/* 确保iframe响应式,移除底部空白 */
.blue-column iframe {
    display: block;
}

@media screen and (max-width: 800px) {
  .row {
    flex-direction: column; /* 小屏幕下垂直堆叠 */
  }
}

动态高度与宽度同步:JavaScript解决方案

尽管Flexbox可以帮助我们实现等宽布局和在小屏幕上的堆叠,但当内容(尤其是嵌入式视频)的高度不固定时,要使堆叠后的两列保持完全等高且等宽,纯CSS会变得复杂。这时,JavaScript就派上用场了。我们可以利用JavaScript在窗口大小变化时,动态地获取一列的计算样式,并将其应用到另一列上,从而实现高度和宽度的同步。

JavaScript 代码: 我们监听 window 对象的 resize 事件。当窗口大小发生变化时,会触发一个函数。在这个函数中:

  1. 我们通过 document.querySelector('#blue-column') 和 document.querySelector('#red-column') 获取到需要同步的两个内容块。
  2. 使用 window.getComputedStyle(bluecolumn) 获取 blue-column 的当前计算样式,包括其渲染后的高度和宽度。
  3. 将获取到的 height 和 width 值赋给 red-column 的 style 属性,从而使其与 blue-column 保持一致。
// 页面加载时执行一次,确保初始状态正确
window.onload = () => {
  syncColumnSizes();
};

// 窗口大小改变时执行
window.onresize = () => {
  syncColumnSizes();
};

function syncColumnSizes() {
  const bluecolumn = document.querySelector('#blue-column');
  const redcolumn = document.querySelector('#red-column');

  // 确保元素存在,避免脚本错误
  if (!bluecolumn || !redcolumn) {
    console.warn('One or both columns not found for synchronization.');
    return;
  }

  const elementComputedStyle = window.getComputedStyle(bluecolumn);
  redcolumn.style.height = elementComputedStyle.height;
  redcolumn.style.width = elementComputedStyle.width;
}

注意: getComputedStyle() 方法返回的是一个只读的 CSSStyleDeclaration 对象,包含了元素的所有最终计算样式。这对于获取元素在浏览器中实际渲染后的尺寸非常有用。

完整示例代码

将上述HTML、CSS和JavaScript代码整合,即可得到一个完整的响应式两列等高堆叠解决方案。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>响应式两列等高堆叠教程</title>
  <style>
    /* CSS 样式 */
    .page-wrapper2 {
      margin: 0px;
      border: 2px solid black;
    }

    .row {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      width: 100%;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

451

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

flex教程
flex教程

php中文网为大家带来了flex教程合集,Flex是采用Flex布局的元素,称为Flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,有三个核心概念: flex项,需要布局的元素;flex容器,其包含flex项;排列方向,这决定了flex项的布局方向。php中文网还为大家带来flex的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

373

2023.06.14

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

5

2026.03.18

Java Spring Security权限控制与认证机制实战
Java Spring Security权限控制与认证机制实战

本专题围绕 Java 后端安全体系建设展开,重点讲解 Spring Security 在权限控制与认证机制中的应用实践。内容涵盖用户认证流程、权限模型设计、JWT 鉴权方案、OAuth2 集成以及接口安全防护策略。通过实际项目案例,帮助开发者构建安全可靠的后端认证体系,提升系统安全性与可扩展能力。

21

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

137

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

14

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

14

2026.03.17

Nginx 基础架构:从安装配置到系统化管理
Nginx 基础架构:从安装配置到系统化管理

本专题深入解析Nginx基础架构,涵盖从源码编译与包管理安装,到核心配置文件优化及虚拟主机部署。进一步探讨日志轮转、性能调优、高可用集群构建及自动化运维策略,助力管理员实现从单一服务搭建到企业级系统化管理的全面升级,确保Web服务高效、稳定运行。

7

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.0万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.7万人学习

CSS教程
CSS教程

共754课时 | 44.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号