Задать вопрос
@dmitriu256

Как обратиться к статическому изображению в папке public из css файла компонента React?

Есть компонент Header
import React from "react";
import './Header.css';



export default class Header extends React.Component{

    render() {
        return (
            <header className="header" id="header">
                <div className="container">
                    <div className="row align-items-center">

                        <div className="col-2 offset-1 col-sm-2 offset-sm-1  col-md-4 offset-md-0 ">
                            <div className="header-logo"></div>
                        </div>

                        <div className="col-9 col-sm-9 col-md-8">
                            <div className="header-contacts">
                                <div className="header-contacts__phones">
                                    <a href="tel:+380981234567" className="header-contacts__phone">38 (098)123-45-67</a>
                                    <a href="tel:+380971234567" className="header-contacts__phone">38 (097)123-45-67</a>
                                </div>

                                <a className="button header-contacts__button button__cta" href="#popup">
                                    <img src="/img/header/header-btn-icon.png" alt="phone-icon-btn"/>
                                    <span className="hidden-mobile hidden-sm">Заказать звонок</span>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </header>
        );
    }
}


В JSX в теге img обращаемся к изображению, которое храниться в папке public - все отлично изображение видно.
Если обращаемся к изображению из css файла, который подключен к компоненту Header
.header-logo{
    width: 191px;
    height: 61px;
    background: url('/img/header/header-logo.png') 0 center; // ошибка !!!
    background-size: cover;
}


Получаю ошибку

./src/components/Header/Header.css (./node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!./node_modules/postcss-loader/src??postcss!./src/components/Header/Header.css)
Error: Can't resolve '/img/header/header-logo.png' in


1) Вопрос почему я не могу достучаться к изображению которое лежит в папке public из css?
Изображение необходимо подключить именно через css - использую для фона секции и не только

2) Если изображение лежит в папке компонента Header - все отлично - логотип отображается

3) Как лучше хранить картинки в общем?
- все изображения в папке (public/img/header)
- в конкретном компоненте, к которому относятся изображения? (Header/img)

Вариант в котором отдельно импортируем картинку в Header.js и подключаем в нем же через инлайн-стили не подходит, хочется именно чтобы было прописано в отдельном файле стилей.
Буду благодарен за ответы!
Логотип задан в css
5fa16cfe87c3d560072998.png
  • Вопрос задан
  • 2032 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
GreyCrew
@GreyCrew
Full-stack developer
У вас путь не правишьный к каринке в стилях.
Возможно настройки вебпака не настроены, либо env.

Можно абсолютный путь к изображению прописать, через ../../ и т.д.
Либо создайте .env файл, в котором укажите родительский путь. "NODE_PATH=src/"
Ответ написан
@prosto_paren
react intern developer
Так как вы используете webpack необходимо импортировать картинку как модуль, а потом уже использовать

import React from 'react'
import Logo from 'путь_к_картинке'

...... 
<img src={Logo} />
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы