Maison  >  Questions et réponses  >  le corps du texte

Comment animer l’expansion de la disposition de la grille ?

<p>J'aimerais savoir comment animer l'expansion d'une disposition en grille. Comme vous pouvez le voir dans le code, j'ai 4 divs. Deux d'entre eux seront affichés et les deux autres ne seront affichés que lorsque la case est cochée. </p> <p>Lorsque la case est cochée, une autre ligne sera ajoutée contenant div3 et div4. Comment animer l’extension ? Il est préférable de garder la taille de la grille petite. Je ne veux pas que l'animation affecte les marges (inexistantes). Je veux aussi le faire sans JavaScript. Est-il possible? </p> <pre class="brush:php;toolbar:false;"><!DOCTYPE html> <html> <tête> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="feuille de style" href="style.css"> <titre>Site Web</titre> ≪/tête> <corps> <classe d'entrée="bascule" type="case à cocher"> <div class="grille"> <div class="div1">Bonjour</div> <div class="div2">Bonjour2</div> <div class="div3">Hello3</div> <div class="div4">Bonjour4</div> </div> </corps> </html></pre> <pre class="brush:php;toolbar:false;">.toggle { largeur : 100 % ; } .grille { affichage : grille ; largeur : 20 % ; bordure : noir uni 2 px ; } .div1 { colonne de grille : 1 ; ligne de grille : 1 ; } .div2 { colonne de grille : 2 ; ligne de grille : 1 ; } .div3 { affichage : aucun ; } .div4 { affichage : aucun ; } .toggle : coché ~ .grid > bloc de visualisation; colonne de grille : 1 ; ligne de grille : 2 ; } .toggle : coché ~ .grid > bloc de visualisation; colonne de grille : 2 ; ligne de grille : 2 ; }</pré> <p>Je souhaite que le conteneur div glisse vers le bas pour faire de la place aux lignes ajoutées. Merci pour votre aide. </p>
P粉937382230P粉937382230435 Il y a quelques jours478

répondre à tous(1)je répondrai

  • P粉529581199

    P粉5295811992023-09-01 15:18:03

    La solution est très simple. J'ai mis ma grille dans une autre grille. Ensuite, j'ai simplement utilisé fr comme moyen de redimensionner les lignes du div où se trouve la grille principale. Cela se traduit par la possibilité de convertir des lignes de grille de 0fr à 1fr. C'est ça.

    .toggle {
        width: 100%;
    }
    
    .grid {
        display: grid;
        width: 20%;
        border: solid black 2px;
    }
    
    .div1 {
        grid-column: 1;
        grid-row: 1;
    }
    
    .div2 {
        grid-column: 2;
        grid-row: 1;
    }
    
    .wrapper {
        grid-column: 1 / 3;
        grid-row: 2;
        display: grid;
        grid-template-rows: 0fr;
        overflow: hidden;
        transition: grid-template-rows 200ms;
    }
    
    .div3 {
        grid-column: 1;
        grid-row: 1;
        min-height: 0;
    }
    
    .div4 {
        grid-column: 2;
        grid-row: 1;
        min-height: 0;
    }
    
    .toggle:checked ~ .grid > .wrapper {
        grid-template-rows: 1fr;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="style.css">
        <title>Website</title>
    </head>
    <body>
        <input class="toggle" type="checkbox">
        <div class="grid">
            <div class="div1">Hello</div>
            <div class="div2">Hello2</div>
            <div class="wrapper">
                <div class="div3">Hello3</div>
                <div class="div4">Hello4</div>
            </div>
        </div>
    </body>
    </html>

    Aussi, si vous avez différentes lignes de tailles différentes dans votre grille. Par exemple, une à 0,05fr et une à 1fr, l'animation deviendra "laggy". Ce que vous pouvez faire, c'est placer une grille wrapper dans une autre grille wrapper. Ensuite, au lieu d'utiliser la ligne réelle pour animer cette grille, vous utilisez la même méthode pour animer les enfants de la première grille ou le parent de la grille réelle.

    C'est une solution de contournement étrange, mais c'est un moyen de résoudre le problème sans trop en refaire.

    répondre
    0
  • Annulerrépondre