AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 76936328
Accepted
Sougata Mukherjee
Sougata Mukherjee
Asked: 2023-08-20 01:35:45 +0800 CST2023-08-20 01:35:45 +0800 CST 2023-08-20 01:35:45 +0800 CST

Como criar um controle deslizante de alternância apenas com alterações de fundo usando CSS

  • 772

Aqui, quero criar um botão deslizante de alternância. Eu o criei, mas quando clico nele, "seu plano de fundo será azul e, quando eu clicar", seu plano de fundo será azul, mas aqui o texto está ficando oculto e desativado e é mostrado. Eu quero como nesta foto:

Toda vez que alterno apenas a cor de fundo para azul, quero mostrar os botões liga e desliga em sequência, como nesta imagem:

Então, quando clico para alternar a cor de fundo, de uma cor para outra com alguma transição, como fazer isso usando o código é fornecido abaixo.

import React, { useState } from 'react';
import './styles.css'; 

const App = () => {
  const [isOn, setIsOn] = useState(false);

  const toggleSwitch = () => {
    setIsOn(!isOn);
  };

  return (<>
    <div className="toggle-container">
      <button
        className={`toggle-button ${isOn ? 'on' : 'off'}`}
        onClick={toggleSwitch}
        style={{color:isOn?'blue':'white',textAlign:isOn?'left':'right'}}
      >
        {isOn ? 'On' : 'Off'}
      </button>
    </div>
    
    </>
  );
};

export default App;

e o css está abaixo

.toggle-button {
  border:2px solid blue;
  outline: none;
  cursor: pointer;
  width: 100px;
  padding: 10px 20px;
  border-radius: 25px;
  font-weight: bold;
  font-size: 16px;
  transition: background-color 0.3s;
  position: relative;
  overflow: hidden;
}

.toggle-button:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 50%;
  height: 100%;
  background-color: blue;
  transition: left 0.3s, background-color 0.3s;
}

.toggle-button.on:before {
  left: 50%;
  background-color: white;
}

.toggle-button.off {
  background-color: blue;
}

.toggle-button.on {
  background-color: white;
}

.toggle-button.on.off:before {
  background-color: blue;
}

.toggle-button.off.on:before {
  background-color: white;
}
html
  • 1 1 respostas
  • 41 Views

1 respostas

  • Voted
  1. Best Answer
    Cristóbal Díaz Álvarez
    2023-08-20T04:23:50+08:002023-08-20T04:23:50+08:00

    Acho que entendi o que você está tentando fazer, mas acho que isso deveria ser feito com uma abordagem diferente, que tal algo assim, é um div na parte inferior que indica a opção selecionada.

    Este é apenas um exemplo, você terá que aplicar lógica e eventos externos.

    Boa sorte!

    https://codesandbox.io/s/weathered-brook-yzkv2n?file=/src/App.js Código de reação:

    CSS:

    .btn__container {
      display: inline-flex;
      justify-content: center;
      align-items: center;
      border: 2px solid gray;
      border-radius: 3px;
      position: relative;
    }
    
    .btn__option {
      border-radius: 3px;
      padding: 8px;
      position: relative;
      z-index: 2;
      transition: all 0.3s linear;
      cursor: pointer;
    }
    
    .btn__option:hover {
      background-color: rgba(0, 0, 0, 0.2);
    }
    
    .btn__container.btn__container--left .btn__option--left {
      color: white;
    }
    
    .btn__container.btn__container--right .btn__option--right {
      color: white;
    }
    
    .btn__option--selection {
      padding: 8px;
      border-radius: 3px;
      position: absolute;
      top: 0;
      bottom: 0;
      background-color: purple;
      color: purple;
      z-index: 1;
    }
    

    JSX:

    import "./styles.css";
    import { useState, useRef } from "react";
    
    export default function App() {
      const [selected, setSelected] = useState("Text");
    
      const leftDiv = useRef(null);
    
      const rightDiv = useRef(null);
    
      const left = "Text";
    
      const right = "File";
    
      const getContainerClass = () => {
        if (selected === left) {
          return "btn__container btn__container--left";
        }
        return "btn__container btn__container--right";
      };
    
      const getSelectionStyle = () => {
        if (leftDiv && leftDiv.current && rightDiv && rightDiv.current) {
          if (selected === left) {
            return {
              left: "0",
              width: `${leftDiv.current.clientWidth}px`,
              padding: "0"
            };
          } else {
            return {
              left: `${leftDiv.current.clientWidth}px`,
              width: `${rightDiv.current.clientWidth}px`,
              padding: "0"
            };
          }
        }
        return { left: "0" };
      };
    
      return (
        <div className={getContainerClass()}>
          <div
            className="btn__option btn__option--selection"
            style={getSelectionStyle()}
          >
            {left}
          </div>
          <div
            ref={leftDiv}
            className="btn__option btn__option--left"
            onClick={() => setSelected(left)}
          >
            {left}
          </div>
          <div
            ref={rightDiv}
            className="btn__option btn__option--right"
            onClick={() => setSelected(right)}
          >
            {right}
          </div>
        </div>
      );
    }
    
    • 1

relate perguntas

  • Usando o ponto de código para renderizar o ícone delineado em vez de preenchido no Material Design Google Fonts

  • Como fazer tab como uma forma de seta usando css

  • Desenhando linhas inclinadas dentro da tabela em html e css

  • Tabela HTML com 2 linhas de células seguidas

  • Como criar material angular mat-grid-list

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve