在Next.js中修改Swiper8分页器样式

最近遇到一个需求:要把swiper的pagination分页器调整到右下角,同时修改分页器颜色。
被这个很简单的需求困了好久,所以本文就讲一下如何实现这个需求,给后面遇到同样问题的朋友排排坑。

运行环境

    "next": "12.1.6",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "swiper": "^8.2.4"

Swiper8基本使用

总所周知,Next.js是基于React的SSR框架。
在官网可以看到Swiper团队针对React专门封装了对应的组件。
英文官方文档:https://swiperjs.com/react
(建议直接看英文文档,中文文档更新不及时,甚至现在还没有出Swiper8的)

  1. 安装
    yarn add swiper
    目前我安装的最新版本为"swiper": “^8.2.4”
  2. 基本使用
    封装轮播图组件
// components/Carousel/index.tsx
import { Pagination } from "swiper";
import { Swiper, SwiperSlide } from "swiper/react";

// 引入基础样式
import "swiper/css";
// 进入分页器相关样式
import "swiper/css/pagination";
const Carousel = () => {
  return (
    <Swiper
      // 使用分页器模块
      modules={[Pagination]}
      spaceBetween={0}
      slidesPerView={1}
      pagination={{ clickable: true }}
      onSlideChange={() => console.log("slide change")}
      onSwiper={(swiper) => console.log(swiper)}
    >
      <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
        Slide 1
      </SwiperSlide>
      <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
        Slide 2
      </SwiperSlide>
      <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
        Slide 3
      </SwiperSlide>
      <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
        Slide 4
      </SwiperSlide>
    </Swiper>
  );
};
export default Carousel;

在页面中引入组件

import Carousel from "../components/Carousel";
const Home = () => {
  return (
    <>
      <Carousel></Carousel>
    </>
  );
};

export default Home;
  1. 基本效果展示
    输入yarn dev启动项目后在http://localhost:3000 访问到如下页面
    在这里插入图片描述

修改样式

因为Next.js不支持直接导入你自己写的外部样式(只有在globals.css中才能导入),而需要使用module模块化的样式才能导入。模块化的样式隔离了作用域,导致我编写的样式无法穿透到swiper组件。

如果在globals.css中直接导入样式是可以修改的,但会在不需要此样式的页面中会出现不必要的加载。

最后在官方文档中发现可以在js中通过styled-jsx直接编写css:CSS-in-JS
使用global关键字可设置样式的作用域

全局样式

export default () => (
  <div>
    // 整个style标签里的样式作用域都变为全局
    <style jsx global>{`
      body {
        background: red;
      }
    `}</style>
  </div>
)

某一个样式全局化

使用:global()包裹选择器

import Select from 'react-select'
export default () => (
  <div>
    <Select optionClassName="react-select" />

    <style jsx>{`
      /* "div" will be prefixed, but ".react-select" won't */

      div :global(.react-select) {
        color: red;
      }
    `}</style>
  </div>
)

修改分页器样式

import { Pagination } from "swiper";
import { Swiper, SwiperSlide } from "swiper/react";

// 引入基础样式
import "swiper/css";
// 进入分页器相关样式
import "swiper/css/pagination";
const Carousel = () => {
  return (
    <>
      <Swiper
        // 使用分页器模块
        modules={[Pagination]}
        spaceBetween={0}
        slidesPerView={1}
        pagination={{ clickable: true }}
        onSlideChange={() => console.log("slide change")}
        onSwiper={(swiper) => console.log(swiper)}
      >
        <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
          Slide 1
        </SwiperSlide>
        <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
          Slide 2
        </SwiperSlide>
        <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
          Slide 3
        </SwiperSlide>
        <SwiperSlide style={{ background: "lightblue", height: "200px" }}>
          Slide 4
        </SwiperSlide>
      </Swiper>
      <style jsx global>
        {`
          .swiper-pagination {
            text-align: right;
            padding-right: 10px;
          }
          .swiper-pagination-bullet {
            border-radius: 0;
          }
          .swiper-pagination-bullet-active {
            background: green;
          }
        `}
      </style>
    </>
  );
};
export default Carousel;

修改后的样式如下:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swiper.js 是一个流行的轮播图插件,可以实现多种效果,如滑动、淡入淡出等。以下是使用 Swiper.js 的基本步骤: 1. 引入 Swiper.js 库 在 HTML 引入 Swiper.js 库,可以使用 CDN 或下载到本地。例如: ```html <!-- CDN 引入 --> <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" /> <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script> <!-- 本地引入 --> <link rel="stylesheet" href="path/to/swiper-bundle.min.css" /> <script src="path/to/swiper-bundle.min.js"></script> ``` 2. 创建 HTML 结构 在 HTML 创建轮播图的结构,例如: ```html <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> </div> <div class="swiper-pagination"></div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> ``` 其,`.swiper-container` 是容,`.swiper-wrapper` 是轮播图的包裹元素,`.swiper-slide` 是每个轮播图的元素,`.swiper-pagination` 是轮播图的分页,`.swiper-button-prev` 和 `.swiper-button-next` 是轮播图的前后按钮。 3. 初始化 SwiperJavaScript 初始化 Swiper,例如: ```js var mySwiper = new Swiper('.swiper-container', { // 选项 loop: true, pagination: { el: '.swiper-pagination', }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, }); ``` 其,`.swiper-container` 是轮播图容的选择,`loop` 表示是否循环播放轮播图,`pagination` 表示分页的选项,`navigation` 表示前后按钮的选项。 以上是使用 Swiper.js 的基本步骤,可以根据需要设置更多选项和样式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值