Visualizzazione dei risultati da 1 a 10 su 20

Visualizzazione discussione

  1. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,776
    Quote Originariamente inviata da ivanisevic82
    In entrata tuttavia, la dissolvenza non funziona, in quanto gli elementi appaiono tutti in una volta.
    Ciao, la dissolvenza in entrata non avviene per via del CSS applicato per lo stato normale di quell'elemento.

    Non c'è infatti alcuna proprietà che indichi di nasconderlo inizialmente; perciò, nel momento in cui viene creato, questo appare già con opacity:1 (valore di default).

    La dissolvenza quindi non ha luogo perché andrebbe dal valore 1 allo stesso valore 1.

    Ovviamente mettere opacity:0 per lo stato normale, non risolverebbe se non viene riportato in qualche modo al valore 1.

    Questo potresti farlo in vari modi usando un minimo di JavaScript. Ad esempio potresti definire una classe CSS per lo stato "nascosto" degli elementi, quindi applicarla inizialmente e rimuoverla attraverso un setTimeout, per poi riapplicarla magari al click del pulsante "chiudi" (anziché usare un checkbox).

    Qui il tuo esempio rielaborato:
    codice:
    <div class='message-container nascosto'>
    <?php if ($result) { ?>  <div class='success-message'>Messaggio inviato con successo!</div>
    <?php } else { ?>  <div class='error-message'>Si è verificato un errore durante l'invio del messaggio. Riprova più tardi.</div>
    <?php } ?>  <button class='close-button'>Chiudi</button>
    </div>
    <div class='sfondo-message-container'></div>
    <script>
      (() => {
        const btnChiudi = document.querySelector('.close-button');
        const msg = document.querySelector('.message-container');
        setTimeout(() => {
          msg.classList.remove('nascosto');
        }, 1);
        btnChiudi.addEventListener('click', e => {
          msg.classList.add('nascosto');
        });
      })();
    </script>
    e relativo CSS:
    codice:
    .message-container {  position: fixed;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 400px;
      height: 300px;
      background-color: white;
      border: 1px solid #ccc;
      z-index: 999;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
    }
    .sfondo-message-container {
      width: 100%;
      height: 100%;
      z-index: 998;
      background-color: rgba(0, 0, 0, 0.5);
      position: absolute;
    }
    .success-message {
      color: green;
      font-size: 18px;
      text-align: center;
    }
    .error-message {
      color: red;
      font-size: 18px;
      text-align: center;
    }
    .close-button {
      background-color: #007bff;
      color: white;
      border: none;
      padding: 10px 20px;
      cursor: pointer;
      font-size: 16px;
      margin-top: 10px;
    }
    .message-container,
    .sfondo-message-container {
      transition: opacity 0.5s ease-in-out;
    }
    .message-container.nascosto,
    .message-container.nascosto + .sfondo-message-container {
      pointer-events: none;
      opacity: 0;
    }

    Quote Originariamente inviata da ivanisevic82
    volendo gestire tutto via CSS, senza JS
    Forse mi sbaglio ma percepisco un tuo timore (che in questo caso ritengo infondato) nell'usare JavaScript. In casi del genere penso sia la scelta più logica e semplice per ottenere ciò che ti serve, a meno che non ci sia qualche particolare ragione per cui pensi sia meglio evitarlo

    Ad ogni modo, per i puristi CSS si potrebbe risolvere facendo ricorso ad animation che, rispetto a transition, permette di definire le proprietà attraverso una timeline, così che sia possibile applicare una dissolvenza anche in apertura, cioè nel momento in cui gli elementi sono creati.

    Qui il solo CSS rielaborato, che potresti applicare al tuo esempio:
    codice:
    .message-container {  position: fixed;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 400px;
      height: 300px;
      background-color: white;
      border: 1px solid #ccc;
      z-index: 999;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
    }
    .sfondo-message-container {
      width: 100%;
      height: 100%;
      z-index: 998;
      background-color: rgba(0, 0, 0, 0.5);
      position: absolute;
    }
    .success-message {
      color: green;
      font-size: 18px;
      text-align: center;
    }
    .error-message {
      color: red;
      font-size: 18px;
      text-align: center;
    }
    .close-button {
      background-color: #007bff;
      color: white;
      border: none;
      padding: 10px 20px;
      cursor: pointer;
      font-size: 16px;
      margin-top: 10px;
    }
    .hidden-checkbox {
      display: none;
    }
    .message-container,
    .sfondo-message-container {
      animation: fade-in 0.5s ease-in-out;
    }
    .hidden-checkbox:checked ~ .sfondo-message-container,
    .hidden-checkbox:checked ~ .message-container {
      pointer-events: none;
      animation: fade-out 0.5s ease-in-out forwards;
    }
    @keyframes fade-in {
      from {
        opacity: 0;
      }
    }
    @keyframes fade-out {
      to {
        opacity: 0;
      }
    }
    Senza entrare nei dettagli, ho definito e applicato le due animazioni per la dissolvenza in entrata e in uscita.
    Quella in entrata verrà chiaramente eseguita nel momento che gli elementi vengono creati nella pagina, mentre quella in uscita è eseguita attraverso il tuo checkbox.

    Ritengo comunque che una soluzione JavaScript sia più adatta e facile da gestire in casi del genere, piuttosto che fossilizzarsi su "stratagemmi" CSS che a lungo andare possono risultare limitanti e inadeguati.

    Vedi tu cosa usare.
    Ultima modifica di KillerWorm; 20-07-2023 a 02:04
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.