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 :

préférer div ou span pour une position côte à côte


Sujet :

Positionnement en CSS

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut préférer div ou span pour une position côte à côte
    Je peux lire sur ce forum, comme sur d'autre, beaucoup d'appel à l'aide pour la position côte à côte de div.
    Et jamais comme solution n'est proposé d'utiliser un span plutôt qu'un div. Pourtant, la position naturel d'un span est justement linéair. Alors pourquoi vouloir s'entêter à réaliser avec un div ce que le span fait naturellement ?
    Y-a-t-il une raison que j'ignore ?

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Un span est (pour moi) un regroupement de style (couleurs, polices, tailles etc.) à appliquer à un pseudo bloc.

    une division est un bloc réel pouvant avoir une taille prédéfinie, une position...

  3. #3
    Membre confirmé Avatar de GihefBey
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 366
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    <div> est de type block.
    Ces éléments ont des dimensions.
    Tu peux mettre dedans ce que tu veux.
    Des éléments de type block ou des éléments de type inline.

    <span> est de type inline.
    Ces éléments n'ont pas de dimensions.
    Tu ne peux pas mettre dedans ce que tu veux.
    Seuls des éléments de type inline y sont acceptés.

    Par exemple, tu peux mettre des <span> dans des <div>.
    Mais l'inverse n'est pas permis.

    C'est une histoire de structure.

    -

  4. #4
    Membre émérite Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Points : 2 444
    Points
    2 444
    Par défaut
    Ben alors on dit pas bonjour chez toi?

    Citation Envoyé par Johan Senn Voir le message
    Y-a-t-il une raison que j'ignore ?
    Oui que les span ne peuvent contenir que des éléments inline (strong, a, span, em) et non de niveaux bloc. Ça limite très vite les possibilités.
    Ensuite le span (créé pour l'internationalisation au départ > les changement de langues) contrairement aux div (divisions) ne sert pas à diviser en espace
    mais caractériser un morceau de texte ou autre... La première règle est de ne pas détourner les balises de ce pour quoi elles sont faites.
    Il est préférable si on suit ta logique d'attribuer un display:inline à tes div pour qu'ils se comportent comme des éléments inline mais avec certains inconvénients : pas de possibilité de dimensionnement ou d'ajout de marges verticales du div (comme tous les éléments inline)

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par GihefBey Voir le message
    Bonjour,

    <div> est de type block.
    Ces éléments ont des dimensions.
    Tu peux mettre dedans ce que tu veux.
    Des éléments de type block ou des éléments de type inline.

    <span> est de type inline.
    Ces éléments n'ont pas de dimensions.
    Tu ne peux pas mettre dedans ce que tu veux.
    Seuls des éléments de type inline y sont acceptés.

    Par exemple, tu peux mettre des <span> dans des <div>.
    Mais l'inverse n'est pas permis.

    C'est une histoire de structure.

    -
    +1 voir ICI pour plus de détails

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Désolé, prie dans mon truc, j'en oubli les règles de bases !

    Alors, bonjour à tous, et merci pour vos réponses.

    Pour régler le problème des marges verticales, on peut imaginer un conteneur avec soit un margin ou un pading, contenant trois blocs div avec display : inline. Non !?

    Donc, en ayant une css comme suit :

    Code : 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
     
    #conteneur {
    width : 100%;
    }
     
    #bloc_a {display : inline;
    width : 20%;
    texte-align : left;
    }
     
    #bloc_b {
    display : inline;
    width : 60%;
    margin-left : 20%;
    text-align : center;
    }
     
    #bloc_c {
    display : inline;
    width : 20%;
    margin-left : 80%;
    text-align : right;
    }
    Je devrais donc avoir les blocs A, B et C côte à côte, sans effet d'escalier. Et ce quelque soit le navigateur ?

  7. #7
    Membre confirmé Avatar de GihefBey
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 366
    Points : 460
    Points
    460
    Par défaut
    As-tu essayé sans les margin ?

    Dans ce cas de blocs disposés côte à côte, je me tournerais plutôt vers le float.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par GihefBey Voir le message
    As-tu essayé sans les margin ?

    Dans ce cas de blocs disposés côte à côte, je me tournerais plutôt vers le float.

    -
    Le soucis avec les float, est qu'ils sortent du flux naturel. J'avais essayer avec deux blocs, en mettant un float : left pour les deux blocs, ça marchait avec IE, mais sous FF, le positionnement n'est pas bon sans un clear : both.

    Par contre, je ne sais pas l'influence d'un display : inline sur le flux.

  9. #9
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Citation Envoyé par Johan Senn Voir le message
    Le soucis avec les float, est qu'ils sortent du flux naturel. J'avais essayer avec deux blocs, en mettant un float : left pour les deux blocs, ça marchait avec IE, mais sous FF, le positionnement n'est pas bon sans un clear : both.
    C'est un comportement tout à fait normal !

    Citation Envoyé par Johan Senn Voir le message
    Par contre, je ne sais pas l'influence d'un display : inline sur le flux.
    Que ton élément devient de type inline comme expliqué dans les posts plus haut.

    Citation Envoyé par Johan Senn Voir le message
    Je peux lire sur ce forum, comme sur d'autre, beaucoup d'appel à l'aide pour la position côte à côte de div.
    D'où l'intérêt d'utiliser le css pour gérer la mise en page.

  10. #10
    Membre émérite Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Points : 2 444
    Points
    2 444
    Par défaut
    Pense à t'exercer à l'aide des tutos de Developpez comme celui-ci (entre autres).

  11. #11
    Membre confirmé Avatar de GihefBey
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 366
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Johan Senn Voir le message
    Par contre, je ne sais pas l'influence d'un display : inline sur le flux.
    À ma connaissance, ils n'ont pas d'influence sur la suite du flux.

    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>Un titre</title>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <style type="text/css">
        html, body {
          margin: 0;
          padding: 0;
          text-align: center;
          background-color: #cd853f;
          color : #344979;
          }
        #conteneur {
          position: relative;
          margin: 0 auto;
          width: 760px;
          text-align: left;
          border : 1px solid #fff;
          background-color: #ffd;
          font-family: 'Trebuchet MS', Verdana, sans-serif;
          }
        p {
          margin : 1em;
          }
        .p_i {
          display : inline;
          background-color: #fff;
          }
        </style>
    </head>
    <body>
      <div id="conteneur">
        <p class="p_i">Paragraphe en inline</p>
        <a href="http://www.developpez.net/forums/m3886656-1/">préférer div ou span</a>
        <p class="p_i">Paragraphe en inline</p>
        <p>Paragraphe</p>
        <p>Paragraphe</p>
      </div>
    </body>
    </html>

    Si tu veux d'autres exercices et des exemples, essaye ceux de cette page.

    -

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par GihefBey Voir le message
    As-tu essayé sans les margin ?

    Dans ce cas de blocs disposés côte à côte, je me tournerais plutôt vers le float.

    -
    Il semblerait que pour bénéficier d'un affichage convenable sous IE, il faudrait combiner le float avec le margin.

  13. #13
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Le soucis avec les float, est qu'ils sortent du flux naturel. J'avais essayer avec deux blocs, en mettant un float : left pour les deux blocs, ça marchait avec IE, mais sous FF, le positionnement n'est pas bon sans un clear : both.
    Il est tout à fait possible de placer deux blocs côte à côte, facilement, sans problème de hauteurs, et tout ceci compatible multi-navigateurs, je vais vous donner ma ptite astuce magique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <div class="SelfClear">
        <div style="float:left;width:30%;height:200px;">
            HELLO
        </div> 
        <div style="float:left;width:70%;height:200px">
            WORLD
        </div>
    </div>
    Et voici la classe SelfClear :

    Pour tous les navigateurs (sauf IE6/7) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .SelfClear:after {content:".";display:block;clear:both;height:0;visibility:hidden;}
    Pour IE 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /* == IE self-clearing elements == */
    * html .SelfClear {display:inline-block;} /*IE6*/
    /* Hide from IE Mac \*/ 
    * html .SelfClear {display:block;} /*IE6*/
    /* End hide from IE Mac */ 
    /*\*/* html .SelfClear {height: 1%;} /*IE6*/
    Pour IE7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .SelfClear {display:inline-block;} /*IE7*/
    .SelfClear {display:block;} /*IE7*/
    Et voilà vous avez maintenant une classe qui peut contenir des éléments flottants et ne pas perdre sa hauteur ! Le principe est qu'un point invisible est rajouté à la fin du contenu du div de classe SelfClear.

  14. #14
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Bonjour,

    Citation Envoyé par ThomasR Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .SelfClear:after {content:".";display:block;clear:both;height:0;visibility:hidden;}
    Je pense que sa marche même sans le "." invisible. Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .SelfClear:after {content:""; display:block; clear:both; }
    A mon avis, suffit ...

  15. #15
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    EDIT : oui en effet ca marche aussi ^^ mais je sais pas si c'est cross-browser car une chaine vide n'a pas de taille.

  16. #16
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Si, mais de toute façon c'est que sous IE (6/7/8 (bêta )) que sa ne marche pas.
    Du coup et comme le float ne pose pas de pb pour IE, je me demande à quoi servent les display:inline-block et le height:1%(qui est utile pour corriger les bug de petites tailles sous IE6) dans ton code ...

  17. #17
    Membre émérite Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Points : 2 444
    Points
    2 444
    Par défaut
    Bonjour,
    que de complication....
    Pour info, attribuer un overflow:hidden/auto sur le conteneur est suffisant pour qu'il englobe ses enfant flottant.
    Tout dépendra de son contenu mais en général il est préférable d'éviter de donner une hauteur aux blocs de contenu en partir parce que la hauteur du bloc ne sera pas poussée en cas de zoom texte.
    On se contentera d'un overflow:auto (comme les hauteur sont fixe c'est préférable à un overflow:hidden pour écarter les risque d'inaccessibilité du contenu en cas de zoom texte.

    Ce qui donnerait par exemple (CSS+HTML)

    Code : 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
    <style type="text/css" media="screen">
    <!--
    .SelfClear {overflow:auto}
    -->
    </style>
    <!--[if lte IE 6]>
    	<style type="text/css" media="screen">
    		.SelfClear {height:1%;}
    	</style>
    <![endif]-->
     
     
    <div class="SelfClear">
        <div style="float:left; width:30%;height:200px; background: #090">HELLO</div> 
        <div style="float:left; width:30%;height:200px; background: #666">WORLD</div>
    </div>

  18. #18
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Je ne vois toujours pas l'intérêt de mettre un height:1% pour IE6 ...

  19. #19
    Membre émérite Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Points : 2 444
    Points
    2 444
    Par défaut
    Citation Envoyé par Macmillenium Voir le message
    Je ne vois toujours pas l'intérêt de mettre un height:1% pour IE6 ...
    Sous IE6- ça sert à conférer le layout (concept qui a disparu d'IE8 au passage) au bloc conteneur pour lui permettre d'établir ce qu'on appelle un contexte de formatage bloc (en) et à englober ses enfant flottant. IE7 a corrigé ce bug.

  20. #20
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Ok ! merci pour les liens

Discussions similaires

  1. 3D - hauteur y d'un triangle pour une position x,z
    Par Muska17 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 31/01/2014, 10h59
  2. Balise span ça fait 3 blocs côte à côte ?!
    Par happyboon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/10/2012, 09h18
  3. Réponses: 2
    Dernier message: 20/03/2012, 15h35
  4. [XHTML] div et span pour un tableau
    Par mathieu57 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/03/2007, 11h22
  5. Un spacer pour une position absolue
    Par Notilius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/04/2005, 20h09

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