如何使用 Next.js 设置 VideoJS 的样式

How to style VideoJS with Next.js

我正在构建一个基于 VideoJS 的 React 视频组件,我曾经使用我的样式表来设置 VideoJS 播放器的样式,但是因为我按照 的建议导入了它Next.js 文档,一些 class 定位似乎无法正常工作,我的自定义 CSS 不适用于 .video-js css 组件。

这个有效

.video {
    font-family: 'Inter', -apple-system, Helvetica;
    font-weight: bold;
}

.video *:before {
    text-shadow:  1px 1px 7px rgba(10, 10, 10, 0.5);
}

这个不起作用:

/* Big play button */
.video .vjs-big-play-button {
    height: 2em;
    width: 2em;
    font-size: 5em;
    line-height: 2em;
    border: none !important;
    border-radius: 9999px;
}

我的 VideoPlayer 组件:

import { useCallback, useEffect, useState } from 'react';
import videojs from 'video.js';
import 'video.js/dist/video-js.css'
import styles from '../styles/video-player.module.css';

function VideoPlayer(props) {
    const [videoEl, setVideoEl] = useState(null);
    const onVideo = useCallback((el) => {
        setVideoEl(el)
    }, [])

    useEffect(() => {
        if (videoEl == null) return
        const player = videojs(videoEl, props)
        return () => {
            player.dispose()
        }
    }, [props, videoEl])

    return (
        <div data-vjs-player>
            <video className={`video-js ${styles.video} vjs-big-play-centered`} ref={onVideo}/>
        </div>
    )
}

export default VideoPlayer;

正如我所提到的,我曾经以这种方式设置 video.js 播放器的样式,并且在我切换到 Next.js 之前它一直运行良好。更奇怪的是,检查页面时 .video class 没有出现在浏览器的开发人员工具中。

有什么方法可以让我使用 Next.js 正确应用我的自定义样式?

因此,在寻找解决方法后,我发现在 global.scss 文件中设置自定义视频组件的样式确实可行。我不是特别清楚具体原因,但你可以这样做:

这是我的global.scss文件:

/* Base styling */
/* .class { ... } */

/* VideoJS styling -> */
.video-js.video {

    * {
        & :before {
            text-shadow:  1px 1px 7px rgba(10, 10, 10, 0.5);
        }
    }

    &:hover {
        .vjs-big-play-button {
            background-color: rgba(255, 255, 255, 1);
        }
    }

    .vjs-big-play-button {
        height: initial;
        width: initial;
        font-size: 5em;
        line-height: 6.15rem;
        padding: 1em;
        border: none;
        border-radius: 9999px;
        background-color: rgba(255, 255, 255, 0.8);

        & :before {
            margin: 0;
            padding: 0;
        }

    }

    .vjs-control-bar {
        width: 90%;
        min-height: 5em;
        margin: 2rem auto;
        padding: 0 1em;
        border-radius: 1em;
    }
}

因此您不必在 VideoPlayer React 组件中导入“../styles/video-player/module.scss”