Итак, моя функция:

function onClickChange(props) {
  let MyDiv = document.getElementById('myDIV')
  let InterfaceDesign = document.getElementById('interfaceDesign')
  if (MyDiv.style.display === 'none') {
    MyDiv.style.display = ''
    InterfaceDesign.classList.add('active')
  } else {
    MyDiv.style.display = 'none'
    InterfaceDesign.classList.remove('active')
  }
}

Из этой функции в DOM я вижу, что она получает активный класс. Но из моего стилизованного компонента:

const FirstDivElement = styled.div`
  position: relative;
  overflow: hidden;
  width: 100%;
  background-color: #000;
  &:hover {
    background-color: #e6007e;
    transform: scale(1.05);
  }
  &:active{
    background-color: #e6007e;
  }
`

Не получается стиль &: active

Мой элемент div:

<div id="interfaceDesign">
            <div onClick={onClickChange}>
              <ListItems
                headingText="Interface Design"
                backgroundImage={props.secondBackgroundImage}
              >
                <Img
                  style={{
                    height: '50px',
                    width: '50px',
                  }}
                  sizes={props.interfacedesign}
                />
              </ListItems>
            </div>
          </div>
          <div id="myDIV" style={{ display: 'none' }}>
            <InterfaceDesign
              secondBackgroundImage={props.secondBackgroundImage}
              interfacedesignMagenta={props.interfacedesignMagenta}
            />
          </div>
          </div>

Кто-нибудь может помочь? Заранее благодарю

1
Jahid Jony 23 Окт 2018 в 17:35

2 ответа

Лучший ответ

Вы предоставляете стили для : active псевдокласса , который используется только тогда, когда элемент активируется (например, во время щелчка мышью). Вероятно, вы захотите изменить с &:active на &.active в CSS вашего стилизованного компонента.

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

0
coreyward 23 Окт 2018 в 18:21

Вы можете сделать это, передав опору active в свой FirstDivElement и обновив метод onClick.

Вот пример:

const FirstDivElement = styled.div`
    position: relative;
    overflow: hidden;
    width: 100%;
    background-color: ({ active }) => active ? #e6007e :#000;
    &:hover {
        background-color: #e6007e;
        transform: scale(1.05);
    }
    &:active{
        background-color: #e6007e;
    }
` 


onClickChange = () => {
    let MyDiv = document.getElementById('myDIV')
    this.setState({
       active: MyDiv.style.display === 'none' 
    })
}


render(){
    const { active } = this.state
    return(
        <div>
            <div onClick={onClickChange}>
                {/* content */}
            </div>
            <FirstDivElement active={active}>
                {/* content */}
                 <div id="myDIV" style={{ display: 'none' }}/>
            </FirstDivElement>
            <button onClick={this.onClickChange}> Click </button>
        </div> 
    )
} 
0
Deve 23 Окт 2018 в 17:43
52951709