Стиль неправильно применяется к компоненту Navbar React

Я изучаю Next.js — сейчас на версии 10.0.3. Я использую react-bootstrap версию 1.4.0 и classnames версию 2.2.6.

Я использую один компонент (Navbar), к которому пытаюсь применить определенные стили, но пока это не работает. Это то, что у меня есть до сих пор:

// ~/project-name/components/Header.tsx
import classnames from "classnames";
import Link from "next/link";
import React from "react";
import { Container, Nav, Navbar } from "react-bootstrap";

import styles from "./Header.module.css";

const Header: React.FC = () => {
  return (
    <>
      <Navbar className = {classnames(styles.borderBottom, styles.boxShadow)} bg = "dark" expand = "lg" variant = "dark">
        <Container>
          <Link href = "/" passHref>
            <Navbar.Brand><span className = "font-weight-bold">./shīdo.io</span></Navbar.Brand>
          </Link>
          <Navbar.Toggle aria-controls = "id-navbar-nav" />
          <Navbar.Collapse id = "id-navbar-nav">
            <Nav className = "ml-5 mr-auto">
              <Link href = "/" passHref>
                <Nav.Link active>Home</Nav.Link>
              </Link>
              <Link href = "/features" passHref>
                <Nav.Link>Features</Nav.Link>
              </Link>
            </Nav>
            <Nav>
              <Link href = "/login" passHref>
                <Nav.Link>Login</Nav.Link>
              </Link>
            </Nav>
          </Navbar.Collapse>
        </Container>
      </Navbar>
    </>
  );
};

export default Header;
# ~/project-name/components/Header.module.css
@charset "UTF-8";

.border-bottom {
  border-bottom: 5px solid #e5e5e5;
}

.box-shadow {
  box-shadow: 0 .5rem .75rem rgba(0, 0, 0, .05);
}

Проблема в том, что border-bottom и box-shadow не применяются к результирующему HTML-тегу nav в конечном документе. Любая помощь будет оценена.

Я также пытался использовать <style jsx>{``}</style> (с теми же стилями) в одном и том же компоненте Header.tsx, но это тоже ничего не дает.

Что произойдет, если вы передадите стили в виде обычной строки, например className='border-bottom box-shadow' в компоненте Navbar?

jean182 16.12.2020 20:08

Затем стили эффективно применяются к HTML-элементу nav, но я не вижу, что это что-то меняет. По сути, таким образом я вижу, что классы применяются правильно, но не то, что я ожидал бы от них.

x80486 16.12.2020 22:47
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
2
644
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Имена классов CSS не подбираются. вы можете попробовать дать, как показано ниже:

className = {classnames(styles['border-bottom'], styles['box-shadow'])}>

React обновляет предоставленные имена классов пользовательских таблиц стилей их обновленными именами, если они отображаются в консоли разработчика.

Не уверен, что это ответит на ваши сомнения, но вы можете попробовать что-то вроде этого для выбора этого элемента через имя класса:

[class^ = "Header_border-bottom"] or [class* = "Header_border-bottom"]

Это работает, и стили применяются правильно. Единственным недостатком является то, что имена классов немного искажены: Header_border-bottom__3fKl3 navbar navbar-expand-lg navbar-dark bg-dark. Если вы знаете способ получить такие, какими они должны быть, не могли бы вы обновить ответ, если есть способ?

x80486 16.12.2020 20:39

Другие вопросы по теме