Lorsque je spécifie text-align:center
pour un élément dont la largeur est supérieure à la largeur du texte, le texte est centré dans la zone de contenu de l'élément (comme prévu).
Lorsque je spécifie text-align:center
pour un élément dont la largeur est inférieure à la largeur du texte, celui-ci est aligné sur le bord gauche de la zone de contenu et déborde de ce dernier.
Vous pouvez voir les deux cas en action ici .
Toute magie CSS peut-elle faire en sorte que le texte déborde de manière égale à la fois des bords gauche et droit de la zone de contenu, de sorte qu'il reste centré?
Je sais que cette question est ancienne, mais le problème me posait le même problème et j'ai trouvé une solution beaucoup plus simple en un tour de main . http://jsfiddle.net/7hy3w2jj/
<div>some text</div>
<div>
<span class="text-overflow-center">some text that will overflow</span>
</div>
Alors vous avez juste besoin de cette définition
.text-overflow-center {
margin-left: -100%;
margin-right: -100%;
text-align: center;
}
Si vous pouvez utiliser des pseudo-éléments, vous pouvez le faire sans aucun code HTML . Ajoutez simplement ces définitions à votre conteneur de texte. http://jsfiddle.net/7287L9a8/
div:before {
content: "";
margin-left: -100%;
}
div:after {
content: "";
margin-right: -100%;
}
Le seul inconvénient de la pseudo-variante est qu'elle ne fonctionne qu'avec une seule ligne de texte.
Div magique à la rescousse. Si quelqu'un est intéressé, vous pouvez voir la solution ici .
HTML:
<div id="outer">
<div id="inner">
<div id="text">some text</div>
</div>
</div>
<div id="outer">
<div id="inner">
<div id="text">some text that will overflow</div>
</div>
</div>
CSS:
#outer {
display: block;
position: relative;
left: 100px;
width: 100px;
border: 1px solid black;
background-color: silver;
}
#inner {
/* shrink-to-fit width */
display: inline-block;
position: relative;
/* shift left Edge of text to center */
left: 50%;
}
#text {
/* shift left Edge of text half distance to left */
margin-left: -50%;
/* text should all be on one line */
white-space: nowrap;
}
Cela ressemble à une vieille question.
Maintenant, je pense qu’il ya une bonne réponse avec flex.
Vous pouvez faire ceci simplement comme ceci:
<div id="small_div">overflowing text</div>
#small_div {
display: flex;
justify-content: center;
}
C'est tout.
J'espère que beaucoup d'aide pour vous!
Donnez à la plus variable div
un margin: 0 -50%
. Si les éléments sont tous des blocs d'affichage ou des blocs en ligne et que l'alignement du texte est centré, cela laisse plus d'espace pour le texte de l'élément le plus à l'intérieur. Au moins, ça marche pour moi.
Exigence étrange. J'élargirais les cases à la taille du texte.
Une solution possible pourrait impliquer un retrait de texte négatif: text-indent: -50px;
, mais cela ne fonctionnera pas pour les textes plus petits (première DIV
dans votre exemple). Pas de meilleure idée ici pour le moment.
Essayer
Word-wrap:break-Word;
au lieu de:
white-space:nowrap;
ou le voulez-vous sur une seule ligne?
celui-ci semble fonctionner: ajoutez un bloc wrapper avec position relative et left: 50% margin-left: -100% vous pouvez le voir ici Voici le code:
<style>
div {
display: block;
position: relative;
left: 100px;
height:1.5em;
width: 100px;
text-align: center;
white-space: nowrap;
border: 1px solid black;
background-color: silver;
}
span{
display:block;
position:relative;
left:50%;
margin-left:-100%;
}
</style>
<div><span>some text</span></div>
<div><span>some text that will overflow</span></div>
Pour que la solution fonctionne avec un texte multiligne, vous pouvez modifier la solution de Nathan en modifiant la valeur de gauche de 50% à 25%.