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 :

Centrer horizontalement un nombre n d'éléments 'block'


Sujet :

Centrer un élément en CSS

  1. #1
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut Centrer horizontalement un nombre n d'éléments 'block'
    Bonjour à tous!

    Voici le problème qui m'occupe.

    J'ai conçu une sorte de 'clavier virtuel' pour les utilisateurs de la plateforme d'apprentissage pour laquelle je travaille.

    Ce clavier virtuel ne comporte que les caractères spéciaux, langue par langue. Par exemple, en espagnol, il y a 8 caractères spéciaux, alors qu'en français, il y en a 13.

    Le tout est géré dynamiquement, mais peu importe.

    J'ai une <div id="vKeyboard"> qui est destinée à recevoir chacune des lettres (affichées sous forme d'un pseudo-bouton, en fait une balise <a> stylée par CSS).

    Voici les codes:
    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
     
    <div id="vKeyboard">
        <a href="javascript:sendLetter('â');">â</a> 
        <a href="javascript:sendLetter('à');">à</a>
        <a href="javascript:sendLetter('ç');">ç</a> 
        <a href="javascript:sendLetter('é');">é</a> 
        <a href="javascript:sendLetter('è');">è</a> 
        <a href="javascript:sendLetter('ê');">ê</a> 
        <a href="javascript:sendLetter('ë');">ë</a> 
        <a href="javascript:sendLetter('î');">î</a> 
        <a href="javascript:sendLetter('ï');">ï</a> 
        <a href="javascript:sendLetter('ô');">ô</a> 
        <a href="javascript:sendLetter('û');">û</a> 
        <a href="javascript:sendLetter('ü');">ü</a> 
        <a href="javascript:sendLetter('ù');">ù</a> 
    </div>

    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
    24
    25
    26
    27
    #vKeyboard{
    		text-align:center;
    		margin-top:10px;
    		border:1px solid #af0024;
    		padding: 5px;
    		height:30px;
    		padding-left:auto;
    		padding-right:auto;
    	}
     
    	#vKeyboard a{
    		color: white;
    		background-color: #036793;
    		text-decoration: none;
    		font-weight: bold;
    		text-align: center;
    		padding: 5px;
    		border: 2px outset #c0c0c0;
    		width:25px;
    		display:block;
    		float:left;
    	}
     
    	#vKeyboard a:hover{
    		background-color: #73a9c3;
    		border: 2px inset #c0c0c0;
    	}
    Je ne mets pas le javascript, puisque c'est un soucis d'affichage uniquement.

    Donc, ma <div> prend toute la largeur disponible, et les éléments <a> qu'elle contient sont bien côte-à-côte. Seulement, ce 'paquet' de <a> est aligné à sur la gauche de ma <div> (cf. image), alors que j'aimerais le voir centré.

    Affiché


    Attendu


    Attendu, avec moins d'éléments


    Quelqu'un aurait-il une solution pour mon problème?

    Merci d'avance!

  2. #2
    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,
    pour réaliser ce genre de chose sans difficulté, il faudrait que tes liens ne soient pas rendu en boîte de bloc (via un float:left) mais inline.
    Pour les centrer il te suffit d'ajouter un text-align:center au div qui les englobe.

  3. #3
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut
    Oui bien entendu, mais dans ce cas, je ne peux pas fixer une largeur identique à tous mes <a>. Ceux-ci prennent une largeur par défaut due à leurs contenus respectifs.

    Et par souci de lisibilité, je préfèrerai grandement que mes <a> aient tous la même largeur (d'où le display:block)


  4. #4
    Membre éclairé Avatar de c_s_s
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 619
    Points : 747
    Points
    747
    Par défaut
    Bonjour,

    Une astuce consisterait à suppirmer display:block et float:left des tes liens (#vKeyboard a), et à jouer sur le padding pour obtenir la taille désirée.

    Dans ce cas, text-align:center et width:25px ne seraient plus utiles non plus sur les liens.

    A toi de voir si le rendu te convient de cette façon.


    Edit : autant pour moi, je n'avais pas pris en compte la largeur variable des liens en fonction du texte affiché.

  5. #5
    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 BnA Voir le message
    Et par souci de lisibilité, je préfèrerai grandement que mes <a> aient tous la même largeur (d'où le display:block)
    Pour commencer tu n'as pas besoin d'ajouter de display:block puisque le float génère une boîte de bloc de manière transparente (tout commme position:absolute)
    Ensuite la seule solution possible que je vois si tu ne connais à l'avance le nombre de lien est d'attribuer dynamiquement une largeur un bloc qui contiendrait les liens et centré via des marge auto.

  6. #6
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par c_s_s Voir le message
    Bonjour,

    Une astuce consisterait à suppirmer display:block et float:left des tes liens (#vKeyboard a), et à jouer sur le padding pour obtenir la taille désirée.

    Dans ce cas, text-align:center et width:25px ne seraient plus utiles non plus sur les liens.

    A toi de voir si le rendu te convient de cette façon.


    Edit : autant pour moi, je n'avais pas pris en compte la largeur variable des liens en fonction du texte affiché.
    J'ai mis une police à largeur fixe (le bête et moche Courier New), ça suffit pour l'instant.

    Pour le reste, ça se centre effectivement (j'avais déjà utilisé cette méthode, mais avec une police à largeur variable, les "blocs" <a> étaient de largeurs différentes).

    Merci, mais une solution fonctionnelle malgré une police à largeur variable serait l'idéal!


  7. #7
    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
    Oups je me rend compte que j'ai oublié la solution du display:inline-block

    La solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div><span style="display:inline-block;">
        <a href="javascript:sendLetter('â');">â</a> 
        ...
    </span>
    </div>

  8. #8
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Erwan31 Voir le message
    Oups je me rend compte que j'ai oublié la solution du display:inline-block

    La solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div><span style="display:inline-block;">
        <a href="javascript:sendLetter('â');">â</a> 
        ...
    </span>
    </div>
    Oui, j'y ai également pensé, mais le support du inline-block par IE et par FF2 laisse plus qu'à désirer non?

  9. #9
    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 BnA Voir le message
    Oui, j'y ai également pensé, mais le support du inline-block par IE et par FF2 laisse plus qu'à désirer non?
    Il est bugué sous IE et en effet non implémenté par Firefox2- mais tu as la
    solution alternative du display: -moz-inline-stack; pour Firefox 2- (avec l'ajout d'un span supplémentaire
    pour encadrer les liens + la suppression du float:left) et pour IE voir la solution ici

  10. #10
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Erwan31 Voir le message
    Il est bugué sous IE et en effet non implémenté par Firefox2- mais tu as la
    solution alternative du display: -moz-inline-stack; pour Firefox 2- (avec l'ajout d'un span supplémentaire
    pour encadrer les liens + la suppression du float:left) et pour IE voir la solution ici
    Oui effectivement, je me suis retrouvé sur ce site dans mes recherches.

    Tout semble OK, je n'ai plus qu'à vérifier l'affichage sur les différents navigateurs, et mon problème est résolu.

    Un grand merci!

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

Discussions similaires

  1. Centrer horizontalement un élément inline (span)
    Par laurentSc dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/11/2014, 09h22
  2. Centrer horizontalement un élément UL
    Par guillaumeabxl dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 02/01/2012, 10h58
  3. Centrer horizontalement un block avec un longueur variable
    Par kimcharlene dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/10/2011, 17h11
  4. Réponses: 6
    Dernier message: 20/07/2006, 11h25
  5. nombre impairs d'éléments dans un hash
    Par G-rhum dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2006, 14h47

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