как изменить текст кнопки на основе медиа-запроса

#css #reactjs #sass #styled-components

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

Вопрос:

Я хочу изменить текст «перейти к оплате» на «Купить сейчас», если медиа-запрос 767px

 const CheckoutButton = styled(GreenButton)
    text-transform: none;
    font-family: 'Poppins', Arial, Helvetica, sans-serif;
    font-weight: 500;
    height: 40px ;
    font-size: 1rem;
    padding: 6px 20px !important;
    margin-left: 100px;
 

<CheckoutButton disabled={isSubmitting || disabled} onClick={handleSubmit} type="submit">Proceed to Payment</CheckoutButton>

Ответ №1:

В чистом CSS вы можете добавить метку кнопки с помощью псевдоэлемента:

 .testbutton::before {
  content: 'buy now';
}

@media (min-width: 767px) {
  .testbutton::before {
    content: 'proceed to payment';
  }
} 
 <button class='testbutton'></button> 

При этом я не в восторге от наличия метки кнопки в CSS. В React у меня всегда есть «uiStore», который позволяет компонентам отслеживать размер экрана и точки торможения, если они должны. Тогда у вас может быть что-то вроде:

 const CheckoutButton = props => {
  const { layout } = uiStore
  return (
    <button>
      {layout === 'mobile' ? 'Buy now' : 'Proceed to payment'}
    </button>
  )
}
 

Ответ №2:

Возможное решение

Добавление / удаление встроенных текстовых элементов в соответствии с медиа-запросом

Решение

Реагировать

<CheckoutButton disabled={isSubmitting || disabled} onClick={handleSubmit} type="submit"><span className="desktop-text">Proceed to Payment</span><span className="mobile-text"></span></CheckoutButton>

CSS

.mobile-text {display: none;} @media screen and (max-width: 767px) {.desktop-text {display: none;}.mobile-text {display: inline-block;}