IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

colspan et div table


Sujet :

Tableau en CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut colspan et div table
    Bonsoir,
    je souhaite faire de la mise en page tabulaire SANS utiliser la balise <table> sachant que le rôle de cette balise est plus d'apporter une sémantique que d'apporter une mise en page. Je me suis donc tourner vers le CSS display:table, table-row, table-cell...
    Par contre je souhaite aussi avoir la fonctionnalité colspan qui est relative à la balise <table>.
    En cherchant, j'ai trouvé ce code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="table">
        <div class="row">
            <div class="cell">cell 1</div>
            <div class="cell">cell 2</div>
        </div>
        <div class="row">
            <div class="cell colspan">
                <div><div>
                    cell 3
                </div></div>
            </div>
            <div class="cell"></div>
        </div>
    </div>

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    div.table {
      display: table;
      width: 100px;
      background-color: lightblue;
      border-collapse: collapse;
      border: 1px solid red;
    }
     
    div.row {
      display: table-row;
    }
     
    div.cell {
      display: table-cell;
      border: 1px solid red;
    }
     
    div.colspan,
    div.colspan+div.cell {
      border: 0;
    }
     
    div.colspan>div {
      width: 1px;
      margin-right:auto;
      margin-left:auto;
    }
     
    div.colspan>div>div {
      position: relative;
      width: 99px;
      overflow: hidden;
    }

    https://codepen.io/laurentsch/pen/zYeXPMJ

    Certes, il apporte ce que je cherche mais le CSS est loin d'être simple. Peut-on le simplifier, SVP ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    Je me suis donc tourner vers le CSS display:table, table-row, table-cell...
    dans ce cas passe à la vitesse supérieure avec par exemple les FLEX ou GRID layout.

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Je regarde ; j'ai déjà un peu utilisé flex mais jamais encore grid...

    En faisant une recherche sur ce forum, j'ai souri car j'ai vu ce que tu dis :
    Le CSS a évolué depuis certains posts et il est effectivement plus facile actuellement de faire de la mise en page sans <table>, même si dans le cas présent on peut tout à fait considérer que l'on est en présence de « données tabulaires ».
    Quand j'ai démarré en 2006, la mise en page tabulaire était faite avec la balise <table> (au moins sur le site intranet que je venais de récupérer).

    N'étant pas un grand connaisseur de flex ou de grid, je cherche pour apprendre du code déjà fait, style codepen mais je trouve pas. Ca existe ?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Petit exemple simple sur base de FLEX :
    le HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="wrapper-table">
      <div class="row">
        <div class="cell">Cellule unique</div>
      </div>
      <div class="row">
        <div class="cell">Cellule #1</div>
        <div class="cell">Cellule #2</div>
      </div>
      <div class="row">
        <div class="cell">et Un</div>
        <div class="cell">et Deux</div>
        <div class="cell">et Trois</div>
      </div>
    </div>
    le CSS :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    .wrapper-table {
      --border: 1px solid #CCC;
      max-width: 40em;
    }
    .row {
      display: flex;
      flex-wrap: wrap;
      gap: .25em;
      margin: .25em 0;
    }
    .cell {
      flex-basis: 0;
      flex-grow: 1;
      padding: .5em;
      max-width: 100%;
      border: var(--border);
    }
    pour être honnête on perd la notion de fusion des bordures, border-collapse: collapse, mais rien d'insurmontable si besoin.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Je regarderai dans la matinée mais ça a l'air de répondre parfaitement à mes besoins. Si c'est le cas, je mettrai en .

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    J'ai mis beaucoup de temps pour étudier ton exemple sachant que mes connaissances en flexbox sont limitées...

    Je pense avoir saisi le rôle de la plupart des propriétés CSS ; par contre, je ne trouve pas comment centrer les éléments dans les cellules. Merci de me l'indiquer.

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    .wrapper-table {
        --border: 1px solid #CCC;
        max-width: 40em; /* à quoi ça sert ? */
    }
    .row {
        display: flex;
        gap: .25em;
        margin: .25em 0; /* marge entre chq ligne */
        justify-content: center; /* essai infructueux de centrage */
    }
    .cell {
        flex-basis: 0;
        flex-grow: 1; /* chq élément va s'étirer de façon à ce qu'une ligne occupe la largeur du conteneur */
        padding: .5em; /* marge autour de chq cellule */
        max-width: 100%; /* à quoi ça sert ? */
        border: var(--border);
     
    }

  7. #7
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Bonsoir,
    je souhaite faire de la mise en page tabulaire SANS utiliser la balise <table> sachant que le rôle de cette balise est plus d'apporter une sémantique que d'apporter une mise en page. Je me suis donc tourner vers le CSS display:table, table-row, table-cell...
    Par contre je souhaite aussi avoir la fonctionnalité colspan qui est relative à la balise <table>.
    En cherchant, j'ai trouvé ce code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="table">
        <div class="row">
            <div class="cell">cell 1</div>
            <div class="cell">cell 2</div>
        </div>
        <div class="row">
            <div class="cell colspan">
                <div><div>
                    cell 3
                </div></div>
            </div>
            <div class="cell"></div>
        </div>
    </div>

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    div.table {
      display: table;
      width: 100px;
      background-color: lightblue;
      border-collapse: collapse;
      border: 1px solid red;
    }
     
    div.row {
      display: table-row;
    }
     
    div.cell {
      display: table-cell;
      border: 1px solid red;
    }
     
    div.colspan,
    div.colspan+div.cell {
      border: 0;
    }
     
    div.colspan>div {
      width: 1px;
      margin-right:auto;
      margin-left:auto;
    }
     
    div.colspan>div>div {
      position: relative;
      width: 99px;
      overflow: hidden;
    }

    https://codepen.io/laurentsch/pen/zYeXPMJ

    Certes, il apporte ce que je cherche mais le CSS est loin d'être simple. Peut-on le simplifier, SVP ?

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut

    sauf que je partage cela :
    Citation Envoyé par NoSmoking Voir le message
    Concernant la mise en page et/ou la présentation des moyens plus performants et sémantiquement « plus justes » existent alors autant les utiliser, et ce n'est pas qu'une question de « responsive design ».
    surtout la partie que j'ai mise en gras.

  9. #9
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Citation Envoyé par laurentSc Voir le message

    sauf que je partage cela :

    surtout la partie que j'ai mise en gras.
    Bonjour,

    ça marche.

    ou pas https://www.w3schools.com/html/html5_semantic_elements.asp mais c'est bon on s'en fou, t'inquiètes.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSS 3] Centrer horizontalement div "table-cell"
    Par windmastr26 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 28/11/2011, 16h20
  2. [DIV] Table avec width à 100%
    Par windmastr26 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 14/11/2009, 15h20
  3. [Best practice] Mise en forme d'un article div/table
    Par nuke_y dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/11/2007, 15h41
  4. div, table et text-align : center
    Par tom42 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 03/03/2007, 17h17
  5. [HTML]<div> + <table> = texte qui bouge
    Par pimpmyride dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/10/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo