当前位置:首页 > JavaScript

原声js实现响应式布局

2026-04-04 22:34:41JavaScript

使用媒体查询(Media Queries)

通过CSS的@media规则实现响应式布局是最常见的方法。虽然CSS是核心,但可以通过JavaScript动态添加或修改媒体查询。

// 动态创建style元素并插入媒体查询
const style = document.createElement('style');
style.innerHTML = `
  @media (max-width: 600px) {
    body { background-color: lightblue; }
  }
`;
document.head.appendChild(style);

监听窗口大小变化

通过window.addEventListener监听resize事件,实时调整布局或样式。

function handleResize() {
  if (window.innerWidth < 768) {
    document.body.style.fontSize = '14px';
  } else {
    document.body.style.fontSize = '16px';
  }
}

window.addEventListener('resize', handleResize);
// 初始化时执行一次
handleResize();

动态加载资源

根据屏幕尺寸或设备特性,动态加载不同的JavaScript或CSS文件。

function loadResponsiveResource() {
  const screenWidth = window.innerWidth;
  const script = document.createElement('script');

  if (screenWidth < 768) {
    script.src = 'mobile.js';
  } else {
    script.src = 'desktop.js';
  }

  document.body.appendChild(script);
}

loadResponsiveResource();

使用matchMedia API

window.matchMedia提供更灵活的媒体查询检测,可监听条件变化。

const mediaQuery = window.matchMedia('(max-width: 600px)');

function handleTabletChange(e) {
  if (e.matches) {
    console.log('屏幕宽度小于600px');
  } else {
    console.log('屏幕宽度大于600px');
  }
}

// 添加监听
mediaQuery.addListener(handleTabletChange);
// 初始检查
handleTabletChange(mediaQuery);

元素尺寸监控

通过ResizeObserver监听DOM元素尺寸变化,实现局部响应式。

const observer = new ResizeObserver(entries => {
  for (let entry of entries) {
    const width = entry.contentRect.width;
    if (width < 300) {
      entry.target.style.flexDirection = 'column';
    } else {
      entry.target.style.flexDirection = 'row';
    }
  }
});

observer.observe(document.getElementById('responsive-container'));

计算并应用比例

通过计算窗口与设计稿的比例,动态调整元素尺寸。

原声js实现响应式布局

function scaleElements() {
  const baseWidth = 1920; // 设计稿基准宽度
  const currentWidth = window.innerWidth;
  const scale = currentWidth / baseWidth;

  document.querySelector('.scalable-element').style.transform = `scale(${scale})`;
}

window.addEventListener('resize', scaleElements);
scaleElements();

标签: 原声布局
分享给朋友:

相关文章

vue如何实现页面布局

vue如何实现页面布局

Vue 页面布局实现方法 Vue 提供了多种方式实现页面布局,以下是一些常见方法: 使用组件化布局 将页面拆分为多个组件,例如头部、侧边栏、内容区和底部。通过组合这些组件实现布局。 <tem…

vue-router实现布局

vue-router实现布局

vue-router 实现布局的方法 使用 vue-router 可以实现多种布局方式,例如根据路由动态切换布局、嵌套布局或基于权限的布局。以下是几种常见的实现方法: 动态布局组件 在路由配置中定义…

React如何实现多页面布局

React如何实现多页面布局

实现多页面布局的方法 在React中实现多页面布局通常涉及路由配置和布局组件嵌套。以下是几种常见方法: 使用React Router配置嵌套路由 通过react-router-dom的Outlet组…

react如何在背景图上布局

react如何在背景图上布局

在背景图上布局的方法 使用CSS绝对定位 将背景图设置为父容器的背景,子元素使用绝对定位进行布局。父容器需要设置为相对定位,以便子元素相对于父容器定位。 .parent-container {…

react怎么实现菜单布局

react怎么实现菜单布局

React 实现菜单布局的方法 React 中实现菜单布局通常需要结合组件化设计和状态管理。以下是几种常见的实现方式: 使用状态管理控制菜单显隐 通过 React 的 useState 钩子管理菜单…

vue实现商品布局

vue实现商品布局

Vue实现商品布局的方法 使用Grid布局 通过CSS Grid可以快速实现商品网格布局。在Vue组件中,结合v-for循环渲染商品列表,利用Grid控制行列间距。 <template>…