362 votes

Superscript uniquement en CSS ?

Comment faire pour que l'exposant soit fait, uniquement en CSS ?

J'ai une feuille de style dans laquelle je marque les liens externes avec un caractère en exposant, mais j'ai du mal à faire en sorte que le caractère soit aligné correctement.

Ce que j'ai actuellement, ressemble à ceci :

a.external:after {
  font-size: 50%;
  vertical-align: top;
  content: "+";
}

mais ça ne marche pas.

Naturellement, j'utiliserais le <sup> -tag, seulement si content permettrait à HTML...

0 votes

L'option "vertical-align:text-top" n'a pas fonctionné pour moi dans IE9. En revanche, il fonctionne dans FireFox 4.0. Au moins dans un contexte Wordpress.

1 votes

Si content Si le HTML était autorisé, la séparation des préoccupations en souffrirait.

1 votes

Au cas où quelqu'un d'autre se demanderait ... " Séparation des préoccupations (SoC) est un principe de conception permettant de séparer un programme informatique en sections distinctes, de sorte que chaque section réponde à une préoccupation distincte. Une préoccupation est un ensemble d'informations qui affectent le code d'un programme informatique." ( fuente )

542voto

Peter Boughton Points 49510

Vous pouvez utiliser l'exposant avec vertical-align: super (plus un accompagnement font-size réduction).

Toutefois, veillez à lire les autres réponses ici, notamment ceux de paulmurray y cletus pour des informations utiles.

33 votes

En outre, le font-size doit être réduit pour donner l'effet réel de l'exposant.

5 votes

La réponse de @paulmurray ci-dessous est plus précise et plus complète. À mon avis, elle devrait être la réponse acceptée.

4 votes

Dire "ci-dessous" n'a pas tendance à aider quand il y a trois façons différentes d'ordonner les réponses. Mais vous avez raison, la réponse de paul es une meilleure, et c'est fou que celle-ci ait eu cinq fois plus de votes.

203voto

cletus Points 276888

Honnêtement, je ne vois pas l'intérêt de faire des superscript/subscript en CSS uniquement. Il n'y a pas d'attribut CSS pratique pour cela, juste un tas d'implémentations maison, dont.. :

.superscript { position: relative; top: -0.5em; font-size: 80%; }

ou en utilisant vertical-align ou je suis sûr qu'il existe d'autres moyens. Le truc, c'est que ça commence à devenir compliqué :

Le deuxième point mérite d'être souligné. En règle générale, l'utilisation de l'exposant ou de l'indice n'est pas une question de style, mais une indication du sens.

Note complémentaire : Il convient de mentionner que liste d'entités pour les expressions mathématiques courantes en exposant et en indice même si cette question n'a rien à voir avec ça.

Les balises sub/sup sont en HTML et XHTML. Je les utiliserais simplement.

Pour ce qui est du reste de votre CSS, le pseudo-élément :after et les attributs de contenu ne sont pas largement pris en charge. Si vous ne voulez vraiment pas intégrer ces éléments manuellement dans le code HTML, je pense qu'une solution basée sur le langage JavaScript est votre meilleure option. Avec jQuery, c'est aussi simple que cela :

$(function() {
  $("a.external").append("<sup>+</sup>");
};

11 votes

Par "pas largement supporté", vous voulez dire "pas supporté dans IE", je suppose ?

3 votes

quirksmode.org/css/contents.html non pris en charge dans les versions IE7 et inférieures ou dans IE8 en mode de compatibilité.

5 votes

...ce qui est exactement ce que j'ai dit, oui.

138voto

paulmurray Points 1764

La documentation CSS contient les équivalents CSS standard de l'industrie pour toutes les constructions HTML. En d'autres termes, la plupart des navigateurs Web actuels ne gèrent pas explicitement les éléments suivants SUB , SUP , B , I et ainsi de suite - elles sont (en quelque sorte) converties en SPAN avec les propriétés CSS appropriées, et le moteur de rendu ne s'occupe que de cela.

La page est Annexe D. Feuille de style par défaut pour HTML 4

Les morceaux que vous voulez sont :

small, sub, sup { font-size: .83em }
sub             { vertical-align: sub }
sup             { vertical-align: super }

14 votes

Ça marche, mais ça foire line-height . IMHO la seule façon de ne pas se planter line-height est d'utiliser position:relative comme suggéré par Cletus : stackoverflow.com/a/501689/260080

28voto

Lessan Vaezi Points 1154

Je travaillais sur une page dans le but d'avoir un texte clairement lisible, avec des éléments en exposant NE modifiant PAS les marges supérieure et inférieure de la ligne - avec les observations suivantes :

Si pour votre texte principal vous avez line-height: 1.5em par exemple, vous devez réduire la hauteur de ligne de votre texte en exposant pour qu'il apparaisse correctement. J'ai utilisé line-height: 0.5em .

Aussi, vertical-align: super fonctionne bien dans la plupart des navigateurs, mais dans IE8, lorsqu'un élément en exposant est présent, le reste de la ligne est poussé vers le bas. J'ai donc utilisé à la place vertical-align: baseline ainsi qu'un négatif top y position: relative pour obtenir le même effet, ce qui semble mieux fonctionner dans tous les navigateurs.

Donc, pour ajouter aux "implémentations maison" :

.superscript {
    font-size: .83em;
    line-height: 0.5em;
    vertical-align: baseline;
    position: relative;
    top: -0.4em;
}

0 votes

Cela se coupe lorsqu'il est placé dans un conteneur div

14voto

Nick Presta Points 13298

http://htmldog.com/articles/superscript/ Essentiellement :

position: relative;
bottom: 0.5em;
font-size: 0.8em;

Cela fonctionne bien dans la pratique, pour autant que je puisse dire.

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