5.5 CSS 和 JavaScript 的协作

5.5 CSS 和 JavaScript 的协作

CSS 和 JavaScript 是构建现代网页的核心技术之一,二者在网页开发中各司其职:CSS 负责样式和布局,而 JavaScript 负责交互和动态行为。在实际开发中,它们的协作能够实现更复杂的效果,如动态主题切换、动画效果、响应式设计等。


5.5.1 CSS 和 JavaScript 的基本交互方式

JavaScript 可以通过多种方式与 CSS 协作,以下是最常见的方法:

1. 操控 CSS 类名

JavaScript 可以使用 DOM 操作来添加、移除或切换 HTML 元素的类名,从而改变元素的样式。

示例:

<div id="box" class="box"></div>
<button id="toggle">切换样式</button>

<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: blue;
  }
  .active {
    background-color: red;
  }
</style>

<script>
  const box = document.getElementById('box');
  const button = document.getElementById('toggle');

  button.addEventListener('click', () => {
    box.classList.toggle('active'); // 切换 active 类
  });
</script>
2. 修改行内样式

JavaScript 可以直接修改元素的 style 属性,动态地改变元素的样式。

示例:

<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div>
<button id="change">改变颜色</button>

<script>
  const box = document.getElementById('box');
  const button = document.getElementById('change');

  button.addEventListener('click', () => {
    box.style.backgroundColor = 'red'; // 修改背景色
  });
</script>
3. 动态创建和修改样式表

JavaScript 可以动态创建 <style> 标签或修改现有样式表,适合全局样式的动态调整。

示例:

<button id="add-style">添加样式</button>

<script>
  const button = document.getElementById('add-style');

  button.addEventListener('click', () => {
    const style = document.createElement('style');
    style.textContent = `
      body {
        background-color: lightgray;
      }
    `;
    document.head.appendChild(style);
  });
</script>

5.5.2 CSS 变量(Custom Properties)与 JavaScript

CSS 变量为 JavaScript 和 CSS 的协作提供了更灵活的方式。通过 JavaScript 动态修改 CSS 变量,可以实现全局样式的实时调整。

示例:主题切换

<div class="container">
  <button id="theme-toggle">切换主题</button>
</div>

<style>
  :root {
    --bg-color: white;
    --text-color: black;
  }

  body {
    background-color: var(--bg-color);
    color: var(--text-color);
  }
</style>

<script>
  const button = document.getElementById('theme-toggle');
  let isDarkMode = false;

  button.addEventListener('click', () => {
    if (isDarkMode) {
      document.documentElement.style.setProperty('--bg-color', 'white');
      document.documentElement.style.setProperty('--text-color', 'black');
    } else {
      document.documentElement.style.setProperty('--bg-color', 'black');
      document.documentElement.style.setProperty('--text-color', 'white');
    }
    isDarkMode = !isDarkMode;
  });
</script>

5.5.3 动画与过渡效果

CSS 的动画和过渡可以通过 JavaScript 控制启动、暂停或重置,从而实现更复杂的交互效果。

1. 启用和切换 CSS 动画

通过 JavaScript 添加或移除特定的类,可以动态启用 CSS 动画。

示例:点击触发动画

<div id="box" class="box"></div>
<button id="animate">开始动画</button>

<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: blue;
    transition: transform 0.5s ease;
  }
  .animated {
    transform: rotate(45deg);
  }
</style>

<script>
  const box = document.getElementById('box');
  const button = document.getElementById('animate');

  button.addEventListener('click', () => {
    box.classList.toggle('animated');
  });
</script>
2. 控制 CSS 动画的状态

通过 JavaScript 调整 CSS 的 animation-play-state 属性,可以暂停或恢复动画。

示例:控制动画

<div id="circle" class="circle"></div>
<button id="pause">暂停</button>
<button id="resume">继续</button>

<style>
  .circle {
    width: 50px;
    height: 50px;
    background-color: red;
    border-radius: 50%;
    animation: bounce 2s infinite;
  }

  @keyframes bounce {
    0%, 100% {
      transform: translateY(0);
    }
    50% {
      transform: translateY(-50px);
    }
  }
</style>

<script>
  const circle = document.getElementById('circle');
  const pause = document.getElementById('pause');
  const resume = document.getElementById('resume');

  pause.addEventListener('click', () => {
    circle.style.animationPlayState = 'paused';
  });

  resume.addEventListener('click', () => {
    circle.style.animationPlayState = 'running';
  });
</script>

5.5.4 响应式设计中的协作

JavaScript 可以配合 CSS 媒体查询动态调整页面样式和内容布局。例如,通过监听窗口尺寸变化来调整页面的布局。

示例:窗口宽度调整

<div id="message"></div>

<style>
  #message {
    font-size: 20px;
    margin: 20px;
  }
</style>

<script>
  const message = document.getElementById('message');

  function updateMessage() {
    const width = window.innerWidth;
    if (width < 600) {
      message.textContent = '这是小屏幕';
    } else if (width < 1024) {
      message.textContent = '这是中屏幕';
    } else {
      message.textContent = '这是大屏幕';
    }
  }

  window.addEventListener('resize', updateMessage);
  updateMessage(); // 初始化调用
</script>

5.5.5 动态加载样式文件

在复杂的项目中,可以使用 JavaScript 动态加载 CSS 文件以减少初始加载时间,或根据用户操作加载特定的样式。

示例:动态加载主题

<button id="load-dark-theme">加载深色主题</button>

<script>
  const button = document.getElementById('load-dark-theme');

  button.addEventListener('click', () => {
    const link = document.createElement('link');
    link.rel = 'stylesheet';
    link.href = 'dark-theme.css';
    document.head.appendChild(link);
  });
</script>

总结

CSS 和 JavaScript 的协作为网页开发带来了强大的灵活性和动态交互能力。通过类名操作、CSS 变量、动画控制和响应式设计,开发者可以实现丰富的用户体验效果。在实际项目中,应根据具体需求选择最适合的协作方式,同时注重代码的性能和可维护性。

#前端开发 分享于 2025-03-11

【 内容由 AI 共享,不代表本站观点,请谨慎参考 】