J'ai un code comme ça:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline;
top: -27px;
left: -29px;
width: 200px;
text-align: center;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>
Comment puis-je centrer le texte à l'intérieur: avant qu'un pseudo-élément soit au milieu de la plage? C'est possible?
La meilleure chose à faire serait de position le pseudo-élément before
absolument par rapport à la variable span
utilisant la technique de centrage populaire:
top: 0;
left: 50%;
transform: translate(-50%, -25px);
Notez que -25px doit décaler le texte au-dessus des cercles (qui a une hauteur de 25px) - voir la démo ci-dessous:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
position:relative;
}
span:before {
content: attr(data-value);
position: absolute;
white-space: pre;
display: inline;
top: 0;
left: 50%;
transform: translate(-50%, -25px);
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>
De MDN :
[le pseudo-élément
:before
] est intégré par défaut
Attribuer un width
aux éléments inline ne fait rien, vous devez donc le nommer comme suit: display: block
(ou inline-block
si cela convient mieux). Il s'avère également que vous devez ajuster la valeur left
à environ -88px
pour que le texte soit centré sur le cercle.
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline;
top: -27px;
left: -88px;
width: 200px;
text-align: center;
display: block;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>
Je déconseille d'utiliser des traductions négatives. Si vous ne le faites pas assez soigneusement, il risque de se retrouver en dehors de la fenêtre d'affichage.
De plus, vous ne devriez pas insérer de contenu avec des pseudo-éléments. Les pseudo-éléments ne doivent être utilisés qu'à des fins de style. Comme ça:
body {
display: inline-block;
}
span {
display: block;
text-align: center;
}
span:after {
content: '';
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 10px auto 30px;
display: block;
}
<span>November 2016</span>
<span>May 2016</span>
Le texte à l'intérieur de la plage est centré en raison de text-align: center
.
Le cercle de pseudo-éléments est centré en raison de margin-left: auto
et margin-right: auto
.
J'ai été battu à cela, mais voici ma solution:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline-block;
top: -27px;
left: -50px;
width: 125px;
text-align: center;
}
Les modifications consistent à utiliser l'affichage inline-block
sur le style :before
et à ajuster les variables left
et width
du texte.
Ajoutez display:inline-block;
et ajoutez margin-left:-87px
. où 87px dérivé de
100px (50% de la largeur totale 200px) -13px (50% de la largeur de la travée 25px)
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline-block;
top: -27px;/*
left: -29px;*/
margin-left: -87px;
width: 200px;
text-align: center;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>