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 :

positionnement horizontal de div block


Sujet :

Positionnement en CSS

  1. #1
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut positionnement horizontal de div block
    bonjour!

    c'est con mais là je coince...

    en gros voilà se que je voudrais visuellement :

    j'utilise ce code pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div>
      <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien1 haut</a><br/>
        <a href="#">lien1 bas</a>
      </div>
      <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien2 haut</a><br/>
        <a href="#">lien2 bas</a>
      </div>
      <div style="clear: both;"/>
    </div>
    mais j'aimerais enlevé ce clear:both à la fin.
    est-ce possible d'obtenir sensiblement la même chose sans utilisé des float:left (et donc un clear) ???

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    La meilleur solution c'est avec le clear:both

    j'ai réussi à contourner le problème avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		<div style="padding-bottom: 3.2em;background:red;">
    			  <div style="border: 1px solid blue; margin: 5px; float: left;">
    			    <a href="#">lien1 haut</a><br/>
    			    <a href="#">lien1 bas</a>
    			  </div>
    			  <div style="border: 1px solid blue; margin: 5px; float: left;">
    			    <a href="#">lien2 haut</a><br/>
    			    <a href="#">lien2 bas</a>
    			  </div>
    		</div>   
    		<div>coucou</div>
    mais c'est une rustine, ca vaut pas grand chose, si la hauteur des divs contenant les liens augmente (ajouter un troisième lien par exemple), il faut aller modifier le padding-bottom du conteneur principal... alors qu'avec la solution du clear: both; aucun soucis! En plus en fonction du navigateur le padding-bottom nécessaire varie (il faut 3.4em sous IE7)...
    Ou alors il faut fixer une hauteur fixe au conteneur des liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		<div style="height: 50px; overflow:hidden;background:red;">
    			  <div style="border: 1px solid blue; margin: 5px; float: left;">
    			    <a href="#">lien1 haut</a><br/>
    			    <a href="#">lien1 bas</a>
    			  </div>
    			  <div style="border: 1px solid blue; margin: 5px; float: left;">
    			    <a href="#">lien2 haut</a><br/>
    			    <a href="#">lien2 bas</a>
    			  </div>
    		</div>   
    		<div>coucou</div>
    Pourquoi tu ne veux pas utiliser la solution clear:both qui fonctionne très bien?

  3. #3
    Membre émérite
    Avatar de Candygirl
    Femme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 912
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Points : 2 907
    Points
    2 907
    Par défaut
    Hello,

    Ton div englobant est-il vraiment nécessaire?

    Pourquoi ne pas attribuer la propriété clear à l'élément qui vient directement en-dessous de tes liens (s'il y en a un) ?

    Autrement il y a toujours moyen de forcer un parent à prendre en compte la hauteur de ses enfants flottants en lui attribuant l'une ou l'autre des propriétés induisant un nouveau contexte de formatage:

    float, display inline-block table ..., position absolute, ou la propriété overflow avec une autre valeur que visible, à choisir selon le cas de figure

  4. #4
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    merci pour vos réponses

    Citation Envoyé par spitou_77 Voir le message
    Pourquoi tu ne veux pas utiliser la solution clear:both qui fonctionne très bien?
    Ben déjà parce que je trouve pas ça très propre... ensuite parsque j'ai des routines javascript qui tournent dérrière et ça me gaverais de les réécrire.

    Malheureusement je vais pas pouvoir utiliser ta solution car le nombre de block est destiné à varier (et peut donc s'étendre sur une nouvelle ligne)

    Citation Envoyé par Candygirl Voir le message
    Ton div englobant est-il vraiment nécessaire?

    Pourquoi ne pas attribuer la propriété clear à l'élément qui vient directement en-dessous de tes liens (s'il y en a un) ?
    En fait il y a un template par dessus, si je modifie les propriétés des div suivant ça risque de me jouer des tours si le template change.

    Citation Envoyé par Candygirl Voir le message
    float, display inline-block table ..., position absolute, ou la propriété overflow avec une autre valeur que visible, à choisir selon le cas de figure
    Merci !!! inline-block correspond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div style="display: -moz-inline-block; display: -moz-inline-box; display: inline-block;">
    <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien1 haut</a><br/>
        <a href="#">lien1 bas</a>
      </div>
      <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien2 haut</a><br/>
        <a href="#">lien2 bas</a>
      </div>
    </div>
    Mais ça fait encore plus crade avec les pauvres hacks obligatoirent...

    ça marche également avec overflow:hidden (ce qui me semble pas vraiment logique ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div style="overflow:hidden">
    <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien1 haut</a><br/>
        <a href="#">lien1 bas</a>
      </div>
      <div style="border: 1px solid blue; margin: 5px; float: left;">
        <a href="#">lien2 haut</a><br/>
        <a href="#">lien2 bas</a>
      </div>
    </div>
    mais c'est déjà plus propre je pense que c'est ce que je vais mettre.

    Sinon je n'ai pas trouvé la solution avec position:absolute, si tu pouvais m'en dire plus ?

    Merci beaucoup !

  5. #5
    Membre averti Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Points : 305
    Points
    305
    Par défaut
    La position absolute n'est pas nécessaire dans ton cas.

    La position absolute te permet de placer tes éléments n'importe ou dans ta page ou dans ton div conteneur, il suffit de jouer avec les propriétés "top", "left", "bottom" et "right" pour compléter ton positionnement. Cette position sort ton div du flux, ainsi il peut y avoir si le code est mal fait, que ce div se balade à sa guise ...

    Mais personnellement je ne vois pas en quoi le clear n'est pas propre, c'est une propriété souvent utilisée, avec un but précis, ici t'en fais une bonne utilisation, et de plus c'est valide w3c.

Discussions similaires

  1. Positionnement horizontal de plusieurs div
    Par sanfenice dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/12/2011, 18h03
  2. Conserver le positionnement d'une div
    Par GPZ{^_^} dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/11/2006, 09h10
  3. [CSS]positionnement dans une div
    Par graphicsxp dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 10/07/2006, 11h01
  4. positionnement de plusieurs div au meme endroit
    Par quinen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/03/2006, 19h37
  5. [CSS]Positionnement des blocs <div> + pb selon navigat
    Par Trunks dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 07/12/2005, 10h56

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