首页 > 解决方案 > 使用css在react中单击时如何更改按钮的样式?

问题描述

基本上,目前我的卡片在悬停时会改变样式,但我希望在单击时执行相同的样式。我尝试过使用 :active 和 :focus ,但这似乎只会改变样式,直到单击该卡为止。

这是悬停时应用的样式类型

这是我的仓库的链接:https ://github.com/abhudaym/soundboard

这是我的 App.js

import React from 'react';
import useSound from 'use-sound';
import Slider from 'react-slick';
import logo from './logo.svg';
import snare from './sounds/snare.mp3';
import './App.css';

import 'slick-carousel/slick/slick.css';
import 'slick-carousel/slick/slick-theme.css';

import 'bootstrap/dist/css/bootstrap.css';
import rollingChair from './sounds/rolling-office-chair.wav';
import quietOffice from './sounds/office-quiet.mp3';
import busyOffice from './sounds/busy-office.wav';
import officeTyping from './sounds/office-typing.wav';
import phone from './sounds/phone.wav';
import ac from './sounds/ac.wav';
import coffeeMachine from './sounds/coffeeMachine.wav';
import photocopier from './sounds/photocopier.wav';
import rainOnWindows from './sounds/rainOnWindows.wav';

function App() {
  const [play1, { stop1 }] = useSound(rollingChair);
  const [play2, { stop2 }] = useSound(quietOffice);
  const [play3, { stop3 }] = useSound(busyOffice);
  const [play4, { stop4 }] = useSound(officeTyping);
  const [play5, { stop5 }] = useSound(phone);
  const [play6, { stop6 }] = useSound(ac);
  const [play7, { stop7 }] = useSound(coffeeMachine);
  const [play8, { stop8 }] = useSound(photocopier);
  const [play9, { stop9 }] = useSound(rainOnWindows);
  const [playSnare, { stopSnare }] = useSound(snare);

  const settings = {
    dots: true,
    infinite: true,
    speed: 500,
    autoplay: true,
    slidesToShow: 3,
    slidesToScroll: 1,
    arrows: false,
  };

  return (
    <section id='services' className='services'>
      <div className='container text-center my-auto'>
        <Slider {...settings}>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
          <div className='mb-5 mb-lg-0 row'>
            <button onClick={play1} onMouseLeave={stop1}>
              <div className='icon-box' data-aos='fade-up' data-aos-delay='100'>
                <div className='icon'>
                  <i className='fas fa-robot'></i>
                </div>
                Sound-1
              </div>
            </button>
          </div>
        </Slider>
      </div>
    </section>
  );
}

export default App;

这是我的 App.css

body{
  background-image: linear-gradient(to right, #ffecd2 0%, #fcb69f 100%);
}

.services .icon-box {
  padding: 30px;
  margin-bottom: 30px;
  position: relative;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 0 29px 0 rgba(68, 88, 144, 0.12);
  transition: all 0.3s ease-in-out;
  border-radius: 8px;
  z-index: 1;
}

.services .icon-box::before {
  content: '';
  position: absolute;
  background: #e1f0fa;
  right: -60px;
  top: -40px;
  width: 100px;
  height: 100px;
  border-radius: 50px;
  transition: all 0.3s;
  z-index: -1;
}

.services .icon-box:hover::before {
  background: #3498db;
  right: 0;
  top: 0;
  width: 100%;
  height: 100%;
  border-radius: 0px;
}

.services .icon {
  margin: 0 auto 20px auto;
  padding-top: 10px;
  display: inline-block;
  text-align: center;
  border-radius: 50%;
  width: 60px;
  height: 60px;
  background: #3498db;
  transition: all 0.3s ease-in-out;
}

.services .icon i {
  font-size: 36px;
  line-height: 1;
  color: #fff;
}

.services .title {
  font-weight: 700;
  margin-bottom: 15px;
  font-size: 18px;
}

.services .title a {
  color: #111;
}

.services .description {
  font-size: 15px;
  line-height: 28px;
  margin-bottom: 0;
}

.services .icon-box:active .title a, .services .icon-box:active .description {
  color: #fff;
}

.services .icon-box:active .icon {
  background: #fff;
}

.services .icon-box:active .icon i {
  color: #3498db;
}

.row{
  padding: 50px 20px 20px 0px;
}

.r2{
  padding-top: 0px !important;
}

标签: cssreactjstwitter-bootstraphovervisited

解决方案


完成你想要的最好的方法是当你点击它时添加一个“活动”类到卡片,它包含与:hover. 这样,您可以随时保持风格


推荐阅读