Псевдоэлемент с компонентами в стиле React

#css #reactjs #styled-components

#css #reactjs #styled-компоненты

Вопрос:

Я просмотрел несколько ответов и чувствую, что настраиваю это точно так же, но это не работает.

Index.css моего документа устанавливает градиентный фон, который отлично работает. Тогда у меня есть нижний колонтитул, и он тоже работает. Но проблема возникает там, где я хочу добавить SVG в качестве фона в нижний колонтитул и установить для него непрозрачность.

Если я это сделаю, появится фоновое изображение, но непрозрачность влияет на весь нижний колонтитул, что, конечно, является плохим результатом.

 const Foot = styled.footer `
    position: relative;
    margin: 0px;
    padding-top: 2em;
    padding-left: 0em;
    padding-right: 0em;
    padding-bottom: 2em;
    color: white;
    background-image: url('/logo.svg');
    opacity: 0.25;
}
`
  

Но если я сделаю это, что, похоже, так и должно работать, если я хочу, чтобы только фоновое изображение было полупрозрачным, а остальная часть нижнего колонтитула оставалась непрозрачной, тогда фоновое изображение вообще не отображается:

 const Foot = styled.footer `
    position: relative;
    margin: 0px;
    padding-top: 2em;
    padding-left: 0em;
    padding-right: 0em;
    padding-bottom: 2em;
    color: white;
    
     amp;::before {
    content: "";
    background-image: url('/logo.svg');
    position: absolute;
    opacity: 0.25;
    }
}
`
  

Как мне настроить это так, чтобы фоновое изображение было полупрозрачным, а остальная часть нижнего колонтитула — нет?

Вот мой нижний колонтитул JSX, если это поможет:

 <Foot id="footer-page">
                    <Div>
                        <div className="container">
                            <div className="row">
                                <div className="col-lg-4 col-sm-12 text-center">
                                    <p className="lead">HUMAN RESOURCES SOLUTIONS></p>
                                    <img className="img-fluid" src="/assets/images/wbe-seal.png" alt="certified women owned business seal" />
                                </div>

                                <div className="col-lg-4 col-sm-12 text-center"><p className="lead">FOLLOW US ON <Span orange>SOCIAL MEDIA</Span></p>
                                        <A href="https://www.facebook.com" target="_blank" rel="noopener noreferrer"><i className="fab fa-facebook-square fa-3x px-2"></i></A>
                                        <A href="https://www.instagram.com" target="_blank" rel="noopener noreferrer"><i className="fab fa-instagram fa-3x px-2"></i></A>
                                        <A href="https://www.linkedin.com/" target="_blank" rel="noopener noreferrer"><i className="fab fa-linkedin fa-3x px-2"></i></A>
                                        <A href="https://twitter.com" target="_blank" rel="noopener noreferrer"><i className="fab fa-twitter-square fa-3x px-2"></i></A>
                                </div>
                            </div>
                        </div>
                    </Div>
                </Foot>
  

Ответ №1:

Похоже, вам нужно использовать одно двоеточие (:) там, где вы используете amp;::before псевдоселектор.

Кроме того, если это не сработает, вы можете попробовать использовать after псевдоселектор.

 const Foot = styled.footer `
    position: relative;
    margin: 0px;
    padding-top: 2em;
    padding-left: 0em;
    padding-right: 0em;
    padding-bottom: 2em;
    color: white;
    
    amp;:before {
      content: "";
      background-image: url('/logo.svg');
      position: absolute;
      opacity: 0.25;
    }
}
  

Комментарии:

1. Спасибо за предложения, но я устал от обоих, и ни один из них тоже не работает.

2. @AdamNorton Хм, может быть, можно попробовать добавить background-size background-position атрибуты? Я не в том месте, где я могу легко отладить проблему.