Indeks górny tylko w CSS?

320

Jak mogę zrobić indeks górny, tylko w CSS?

Mam arkusz stylów, w którym zaznaczam łącza zewnętrzne za pomocą znaku indeksu górnego, ale trudno mi poprawnie wyrównać znak.

To, co mam obecnie, wygląda następująco:

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

ale to nie działa.

Oczywiście <sup>użyłbym -tag, tylko jeśli contentpozwoliłby na HTML ...

Henrik Paul
źródło
1
Wydaje się, że masz rozbieżność: ułożenie pionowe u góry, ale <sub>? Zakładasz, że masz na myśli <sup>?
cletus
„Vertical-align: text-top” nie działało dla mnie w IE9. Ale zrobiło to w FireFox 4.0. Przynajmniej w kontekście Wordpress.
JosefB,
1
Gdyby contentzezwolono na HTML, ucierpiałby na tym problem.
Eva,

Odpowiedzi:

489

Możesz zrobić indeks górny za pomocą vertical-align: super(plus towarzyszące mu font-sizezmniejszenie).

Pamiętaj jednak, aby przeczytać inne odpowiedzi tutaj, szczególnie te autorstwa paulmurray i cletus , aby uzyskać przydatne informacje.

Peter Boughton
źródło
29
Ponadto font-sizenależy go zmniejszyć, aby uzyskać rzeczywisty efekt indeksu górnego.
Nirmal,
5
Odpowiedź @ paulmurray poniżej jest bardziej dokładna i wyczerpująca. IMHO, powinna to być zaakceptowana odpowiedź.
Doug Paul
3
Powiedzenie „poniżej” nie pomaga, gdy istnieją trzy różne sposoby porządkowania odpowiedzi. Masz rację, odpowiedź Paula jest lepsza i to szaleństwo, że ma ponad pięć razy więcej głosów.
Peter Boughton
188

Szczerze mówiąc, nie widzę sensu w tworzeniu indeksu górnego / dolnego tylko w CSS. Nie ma dla niego przydatnego atrybutu CSS, tylko kilka własnych wdrożeń, w tym:

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

lub używając wyrównania pionowego lub jestem pewien, że inne sposoby. Rzecz w tym, że zaczyna się komplikować:

Drugi punkt jest wart podkreślenia. Zazwyczaj indeks górny / indeks dolny nie jest tak naprawdę kwestią stylu, ale wskazuje na znaczenie.

Uwaga dodatkowa: Warto wspomnieć o tej liście encji dla typowych matematycznych wyrażeń w indeksie górnym i dolnym, nawet jeśli to pytanie nie odnosi się do tego.

Tagi sub / sup są w HTML i XHTML. Po prostu bym ich użył.

Jeśli chodzi o resztę twojego CSS, atrybuty: after pseudoelement i content nie są szeroko obsługiwane. Jeśli naprawdę nie chcesz wstawiać tego ręcznie do kodu HTML, myślę, że najlepszym rozwiązaniem będzie rozwiązanie oparte na JavaScript. Z jQuery jest to tak proste, jak:

$(function() {
  $("a.external").append("<sup>+</sup>");
};
Cletus
źródło
11
Podejrzewam, że „nieobsługiwany powszechnie” oznacza „nieobsługiwany w IE”?
Boldewyn
2
quirksmode.org/css/contents.html nie jest obsługiwany w IE7 i nowszych wersjach lub w IE8 w trybie zgodności.
cletus
4
... co jest dokładnie tym, co powiedziałem, tak.
Boldewyn
Aby uprościć zawijanie znacznika A znacznikiem SUP, użyj następującego polecenia: $ („a.external”). Wrap („<sup />”);
Russell
2
Początkowo zastosował zaakceptowane rozwiązanie @PeterBoughton, zdecydował się na to, ponieważ nie przekrzywia ono wysokości linii.
Nuri Hodges
129

Dokumentacja CSS zawiera standardowy w branży odpowiednik CSS dla wszystkich konstrukcji HTML. To znaczy: większość przeglądarek internetowych w dzisiejszych czasach nie jawnie obsłużyć SUB, SUP, B, Ii tak dalej - oni (troche sorta) są przekształcane na SPANelementy o odpowiednich właściwościach CSS, a silnik renderowania zajmuje się tylko tym.

Strona jest dodatkiem D. Domyślny arkusz stylów dla HTML 4

Bity, które chcesz to:

small, sub, sup { font-size: .83em }
sub             { vertical-align: sub }
sup             { vertical-align: super }
paulmurray
źródło
13
To działa, ale psuje się line-height. IMHO jedynym sposobem, aby nie spieprzyć, line-heightjest użycie position:relativezgodnie z sugestią Cletus: stackoverflow.com/a/501689/260080
Marco Demaio
27

Pracowałem nad stroną w celu uzyskania czytelnego tekstu, z elementami górnymi NIE zmieniającymi górnego i dolnego marginesu linii - z następującymi spostrzeżeniami:

Na przykład w przypadku tekstu głównego line-height: 1.5emnależy zmniejszyć wysokość wiersza tekstu indeksu górnego, aby wyświetlał się poprawnie. Kiedyś line-height: 0.5em.

Również vertical-align: superdziała dobrze w większości przeglądarek, ale w IE8 kiedy masz Element górny prezent, reszta tej linii jest popychany w dół. Zamiast tego użyłem vertical-align: baselinerazem z negatywem topi position: relativedo osiągnięcia tego samego efektu, który wydaje się działać lepiej w różnych przeglądarkach.

Tak więc, aby dodać do „domowych wdrożeń”:

.superscript {
    font-size: .83em;
    line-height: 0.5em;
    vertical-align: baseline;
    position: relative;
    top: -0.4em;
}
Lessan Vaezi
źródło
odcina się to, gdy zostanie umieszczony w pojemniku div
Alex G,
10

Poniższy fragment pochodzi z wewnętrznego pliku html.css przeglądarki Mozilla Firefox:

sup {
  vertical-align: super;
  font-size: smaller;
  line-height: normal;
}

W twoim przypadku byłoby to coś takiego:

.superscript {
  vertical-align: super;
  font-size: smaller;
  line-height: normal;
}
Christian Stadler
źródło
5

To kolejne czyste rozwiązanie:

sub, sup {vertical-align: baseline; position: relative; font-size: 70%;} /* 70% size of its parent element font-size which is good. */
sub {bottom: -0.6em;} /* use em becasue they adapt to parent font-size */
sup {top: -0.6em;} /* use em becasue they adapt to parent font-size */

W ten sposób nadal możesz używać znaczników sup / sub , ale naprawiłeś ich idiotyczne zachowanie, aby zawsze przekręcać wysokość linii akapitu .

Teraz możesz zrobić:

  <p>This is a line of text.</p>
  <p>This is a line of text, <sub>with sub text.</sub></p>
  <p>This is a line of text, <sup>with sup text.</sup></p>
  <p>This is a line of text.</p>

A wysokość linii akapitu nie powinna się zepsuć.

Testowane na IE7, IE8, FF3.6, SAFARI4, CHROME5, OPERA9

Przetestowałem przy użyciu p {line-height: 1.3;}(to jest dobra wysokość linii, chyba że chcesz, aby twoje linie trzymały się zbyt blisko) i nadal działa, ponieważ „-0,6 em” jest tak małą ilością, że również przy tej wysokości linii zmieści się podtekst / pod tekst i nie przekraczajcie się.

Zapomniałem o szczegółach, które mogą być istotne. Zawsze używam DOCTYPE w pierwszym wierszu mojej strony (konkretnie używam HTML 4.01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">). Nie wiem więc, czy to rozwiązanie działa dobrze, gdy przeglądarka działa w trybie quirkmode (lub w trybie innym niż standardowy) z powodu braku DOCTYPE lub DOCTYPE, który nie uruchamia trybu Standard / Prawie Standard.

Marco Demaio
źródło
4

Jeśli zmieniasz rozmiar czcionki, możesz przestać zmniejszać rozmiary za pomocą tej reguły:

sup sub, sub sup, sup sup, sub sub{font-size:1em !important;}
freexe
źródło
1

Nie jestem pewien, czy jest to powiązane, ale rozwiązałem problem z &sup2;jednostkami HTML, ponieważ nie byłem w stanie dodać żadnych innych tagów HTML wewnątrz <label>tagu. Pomysł polegał na użyciu kodów ASCII zamiast znaczników css lub HTML.

Archrade
źródło
0

Właściwość CSS font-variant-positionjest rozważana i może ostatecznie być odpowiedzią na to pytanie. Jednak na początku 2017 r. Obsługuje go tylko Firefox.

.super {
    font-variant-position: super;
}

Zobacz MDN .

hashchange
źródło
Jest wiosna 2020 roku i nadal nie jest obsługiwana przez żadną przeglądarkę oprócz Firefox. Ach więc…
Jens
0

Powiązane lub może nie powiązane, użycie indeksu górnego jako elementu HTML lub zakresu + css w tekście może powodować problemy z lokalizacją - w programach lokalizacyjnych.

Na przykład załóżmy, że „3 rd oprogramowania Party”:

3<sup>rd</sup> party software
3<span class="superscript">rd</span> party software

Jak tłumacze mogą tłumaczyć „rd”? Mogą pozostawić puste dla kilku języków cyrylowych, ale co z innymi językami egzotycznymi lub RTL?

W takim przypadku lepiej unikać stosowania indeksów górnych i stosować pełne sformułowanie, takie jak „oprogramowanie innych firm”. Lub, jak wspomniano tutaj w innych komentarzach, dodając znaki plus w indeksie górnym za pomocą jQuery.

Nubijski
źródło
-1
.superscript {
  position: relative;
  top: 5px;
  font-size: 90%;
  vertical-align: super;
}
Razvan Cercelaru
źródło
-1

Oto dokładny sposób, w jaki używa sup:

.superscript{
    vertical-align:super;
    font-size:smaller;
}

Znaleziono to za pośrednictwem elementu Google Chrome Inspect.

Cześć ludzie
źródło