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 :

Inline-block avec marge en trop


Sujet :

CSS

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut Inline-block avec marge en trop
    Bonjour,

    Je souhaite afficher une liste d'objet (par exemple des photos) côte à côte afin que ça remplisse la largeur puis que ça passe à la ligne.

    Float permet de faire ça mais je préfère utiliser Inline-block avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Photo {
     display : inline-block;
     vertical-align : top;
     margin : 8px;
     border : solid 1px black;
     width : 80px;
    }
    De cette manière, chaque photos s'affiche à côté de la précédente et quand elles n'ont plus la place elles continuent en-dessous.

    Là où le problème se pose, c'est que suivant les dimensions du conteneur, la marge droite d'un l'élément ne lui permet pas de se positionner à la droite de son prédécesseur mais en-dessous, ce qui graphiquement pose un problème puisque ça donne l'impression qu'il peut rentrer.

    Concrètement, si le conteneur fait 395px, et que chaque photo prend 100 pixels (exemple ci-dessus), il n'en rentre que 3 alors que si le quatrième élément n'avait pas de marge droite, il en rentrerait 4.

    On peut corriger ce problème si on connait d'avance la dimension du conteneur mais je ne trouve pas de solutions si le conteneur est dynamique.

    J'ai également essayé d'utiliser la propriété table-cell de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .Conteneur {
     display : table;
     border-collapse : separate;
     border-spacing : 10px;
    }
     
    .Photo {
     display : table-cell;
     width : 80px;
    }
    Mais le problème est exactement le même.

    Une autre solutions est aussi de mettre qu'une marge a gauche et pas à droite mais du coup l'alignement à gauche est décalé.

    Je vous remercie d'avance pour votre aide si vous avez une solution.

    Je précise que je suis un utilisateur avancé de CSS et qu'on ne sait pas d'avance le nombre d'éléments qu'il y aura par ligne.

    Des éléments de réponses serait de réussir à sélectionner des éléments frères sans retour à la ligne entre les deux ou que le tests de largeur pour le passage à la ligne se fasse sans les marges mais je ne trouve rien en CSS pour faire ce genre de choses.
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Une autre solutions est aussi de mettre qu'une marge a gauche et pas à droite mais du coup l'alignement à gauche est décalé.
    dans ce cas mets un padding à gauche et une margin à droite

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Ca ferait pareil.
    Le but est vraiment que les éléments remplissent intégralement le conteneur.

    Mais je crois que ce n'est pas possible, sauf en javascript mais je souhaite le faire qu'en CSS.
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Mais je crois que ce n'est pas possible, sauf en javascript mais je souhaite le faire qu'en CSS.
    je n'avais pas fait attention à la première lecture, mais ton problème vient du whitespace, l'affreux, lié aux éléments de type inline, comme les images le sont par défaut.

    Pour résoudre ce soucis il existe plusieurs solutions dont
    - la mise à zéro de la taille de la police
    - la mise bout à bout de toutes les balises
    - la mise en commentaires des espaces entre les balises
    il y en à d'autres mais...

    Un fichier de test
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>[White Space]</title>
    <meta name="Author" content="NoSmoking">
    <style>
    .content{
      width:395px;
      background-color:#ABC;
      margin:0 25px;
    }
    #content_2{
      font-size:0px;
    }
    img {
     margin:8px;
     border:solid 1px black;
     width:80px;
    }
    </style>
    <script>
    </script>
    </head>
    <body>
    Le problème du <code>whitespace</code>
    <div class="content">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
    </div>
    Avec <code>font-size:0px;</code>
    <div class="content" id="content_2">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo">
    </div>
    Toutes les balises à la suite
    <div class="content">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo"><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><img src="http://www.developpez.net/template/images/logo.png" alt="logo">
    </div>
    Mise en commentaire des espaces entre balises
    <div class="content">
      <img src="http://www.developpez.net/template/images/logo.png" alt="logo"><!--
    --><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><!--
    --><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><!--
    --><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><!--
    --><img src="http://www.developpez.net/template/images/logo.png" alt="logo"><!--
    --><img src="http://www.developpez.net/template/images/logo.png" alt="logo">
    </div>
    </body>
    </html>
    les 2 dernières me semble les plus efficaces et pérennes.

    [EDIT]
    il fallait bien sûr lire "...de type inline, comme les images..."

  5. #5
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Non c'est pas un problème de whitespace.

    Voici un exemple imagé :


    Le premier cadre utilise toute la largeur du conteneur.

    En-dessous, 5 photos séparées entre elles par un margin-right (en jaune).
    Dans ce cas-là, la photo 5 ne sera pas comme sur le dessin à cause de la marge, elle se positionnera en-dessous. Ce que j'aurai voulu, c'est que la marge qui ne fait pas partie du contenu ne force pas la photo à passer dessous.

    On pourrait le faire avec une ligne du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Photo:nth-child(5n) {
     margin-right : 0;
    }
    Mais dans mon cas de base, la largeur du conteneur s'adapte à la largeur de la fenêtre, donc on ne sait pas si il y aura 2,3 ... 5 ou 10 photos par ligne.
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je ne vois pas dans ce cas comment tu pourrais gérer cela en CSS ne connaissant pas par avance ce qui va être affiché, il te faut à minima fixer un certain nombre de paramètre.

    Si tu sais que tu auras x images par ligne tu effectivement avoir recours à .Photo:nth-child(xn).

  7. #7
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    OK, c’est bien ce que je pensais mais je préférai vérifier.

    Je mets l'étiquette résolu pour clore la conversation alors.

    Merci.
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

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

Discussions similaires

  1. Display inline block avec IE
    Par thecatz dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/09/2013, 15h01
  2. display:inline-block; Problème avec Netscape navigator
    Par mehdi_scofield dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 29/11/2008, 16h44
  3. Problèmes avec display:inline-block
    Par NewbiePower dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/10/2007, 11h34
  4. Aide newbie configuration code::blocks avec allegro
    Par max---- dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 24/10/2007, 10h39
  5. pb avec les résultats trops gros
    Par nisaes dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/01/2005, 10h44

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