185 votes

Comment dessiner un cercle avec du texte au milieu ?

J'ai trouvé cet exemple sur stackoverflow :

Dessiner un cercle en utilisant uniquement le css

Ce qui est génial. Mais j'aimerais savoir comment modifier cet exemple afin de pouvoir inclure du texte au milieu du cercle ?

J'ai aussi trouvé ceci : Centrer verticalement et horizontalement le texte dans un cercle en CSS (comme le badge de notification de l'iphone)

mais pour une raison quelconque, ça ne fonctionne pas pour moi. Lorsque je crée le code de test suivant :

<div class="badge">1</div>

au lieu d'un cercle, j'obtiens une forme ovale. J'essaie de jouer avec le code pour voir comment je peux le faire fonctionner.

398voto

Jawad Points 859

Fixer un line-height de la même valeur que la hauteur de la division affichera une ligne de texte centrée verticalement. Dans cet exemple, la hauteur et la hauteur de ligne sont de 500px.

Exemple

JSFiddle

.circle {
  width: 500px;
  height: 500px;
  line-height: 500px;
  border-radius: 50%;
  font-size: 50px;
  color: #fff;
  text-align: center;
  background: #000
}

<div class="circle">Hello I am A Circle</div>

9 votes

@dot : Pas vraiment mon fait - bryanhadaway.com/how-to-create-circles-with-css

4 votes

Si vous pouvez faire border-radius:50%; qui rend votre événement de code plus élégant et portable, sans avoir à changer cet attribut à chaque fois en fonction de la largeur et de la hauteur ;)

1 votes

Mais, en même temps, si votre numéro est variable et augmente jusqu'à trois chiffres (ex. 100), puis border-radius:50%; aura l'air mauvais. Dans ce cas, il est préférable d'utiliser un rayon de bordure fixe (par exemple 10px).

67voto

cimmanon Points 25378

Si votre contenu doit être enveloppé et d'une hauteur inconnue, c'est votre meilleur choix :

http://cssdeck.com/labs/aplvrmue

.badge {
  height: 100px;
  width: 100px;
  display: table-cell;
  text-align: center;
  vertical-align: middle;
  border-radius: 50%; /* may require vendor prefixes */
  background: yellow;
}

.badge {
  height: 100px;
  width: 100px;
  display: table-cell;
  text-align: center;
  vertical-align: middle;
  border-radius: 50%;
  background: yellow;
}

<div class="badge">1</div>

6 votes

Cela génère des ovales, et non des cercles parfaits.

2 votes

C'est la vraie solution. bien que je doive mentionner, que display: absolute casse l'alignement - mais la solution facile est de l'insérer dans un autre div.

1 votes

Produit un cercle parfait (et non un ovale). La div wrapper est également une bonne idée lorsqu'on utilise un positionnement absolu ou fixe.

10voto

Zakariadza Points 145

Je pense que vous voulez écrire du texte dans un ovale ou un cercle ? Pourquoi pas celui-ci ?

<span style="border-radius:50%; border:solid black 1px;padding:5px">Hello</span>

0 votes

Vous n'avez comptabilisé que l'ovale et pas le cercle.

7voto

Ligth Points 127

Bien sûr, vous devez utiliser des balises pour faire cela. L'une pour créer le cercle et l'autre pour le texte.

Voici quelques codes qui peuvent vous aider

#circle {
    background: #f00;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    color:black;

}
.innerTEXT{
    position:absolute;
    top:80px;
    left:60px;
}

<div id="circle">
    <span class="innerTEXT"> Here a text</span>
</div>

Exemple concret ici http://jsbin.com/apumik/1/edit

Mise à jour

Ici moins petit avec quelques changements

http://jsbin.com/apumik/3/edit

0 votes

Merci ! Je comprends mieux votre exemple que celui qui se trouve dans le post ( stackoverflow.com/questions/4801181/ ) mais j'aimerais comprendre pourquoi cet exemple ne fonctionne pas pour moi...

0 votes

On dirait qu'ils ont fait la même chose que vous, mais qu'ils ont simplement combiné en une seule classe dans le css... ?

0 votes

Oui, je viens de remarquer que j'ai fait la même chose.

7voto

Bruno Gomes Points 150

S'il s'agit d'une seule ligne de texte, vous pouvez utiliser la propriété line-height, avec la même valeur que la hauteur de l'élément :

height:100px;
line-height:100px;

Si le texte comporte plusieurs lignes, ou si le contenu est variable, vous pouvez utiliser le padding-top :

padding-top:30px;
height:70px;

Exemple : http://jsfiddle.net/2GUFL/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X