Bardzo prosta a zarazem ciekawa sztuczka, która zamienia znak plusa na znak zamykania (X) przy użyciu jednej ikony lub znaku + oraz transform rotate o 45 stopni. Genialne w swojej prostocie.

Nasz HTML, z podpiętymi stylami, skryptem JS oraz guzikiem posiadającym znak plusa. Tutaj zamiast ikony znak unicode, choć w prawdziwym projekcie powinna być ikona (znak po rotacji może się odrobinę rozjeżdżać ze środkiem, jako że to jest tekst):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./test6.css">
</head>
<body>
    <button id="btn">✚</button>
    <script src="./test6.js"></script>
</body>
</html>

Teraz CSS – reset stylów, wycentrowanie elementów w body i ostylowanie przycisku:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    height: 100vh;
    background-color: grey;
    display: flex;
    justify-content: center;
    align-items: center;
}

button {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    border: none;
    background-color: bisque;
    font-size: 32px;
    text-align: center;
}

Łapiemy nasz guzik w JavaScript i ustawiamy mu toggle na klasę active (guzik służy do pokazywania i zamykania):

window.addEventListener("DOMContentLoaded", function(){
    let btn = this.document.querySelector("#btn");
    btn.addEventListener("click", function(){
        this.classList.toggle('active');
    })
})

Teraz nasza klasa active, która jest banalnie prosta – obracamy o 45 stopni znak plusa i mamy X, znak zamykania:

button.active {
    transform: rotate(45deg);
}

Użyliśmy unicode i elementu tekstowego, więc idealnie w centrum leżeć nie będzie. Można jednak użyć ikony i wtedy już będzie wyglądać porządnie. Choć jeśli chcemy się bawić – przy pomocy paddingu i znak tekstowy możemy wycentrować idealnie.

Na upartego możemy i bez ikony uzyskać idealne wycentrowanie, musimy tylko wstawić nasz znak unicode w span, odpowiednio go wycentrować:

<button id="btn"><span id="btn-plus">✚</span></button>

Teraz style:

button {
    (...)
    position: relative;
}
button span {
    display: inline-block;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

Teraz trzeba metodą prób i błędów znaleźć odpowiednie proporcje aby przekrzywiony o 45 stopni span znajdował się idealnie w środku:

button.active span {
    transform: rotate(45deg) translate(-85%, -15%);
}

Oczywiście pamiętać należy, aby nie nadpisać transform więc te funkcje używamy w jednej linii.

Ja ustawiłem pierwotnie na -70% oba, odpaliłem devtoolsy na Chrome i jak już miałem klasę active włączoną to zaznaczałem style i strzałkami (tak można na Chrome) zwiększałem i zmniejszałem wartości, aż uzyskałem idealne wycentrowanie – warto te sztuczki znać i z nich korzystać bo bardzo ułatwiają pracę.