HTML <sup /> тег, що впливає на висоту рядка, як зробити його послідовним?


130

Якщо у мене є <sup>тег у багаторядковому <p>тезі, рядок із надриском на ньому має більший інтервал між ним, ніж інші рядки, незалежно від того, яку висоту рядка я поставив на <p>.

Редагувати для уточнення : я не маю на увазі, що у мене є багато <p>s, кожен з яких знаходиться в одному рядку. У мене є сингл <p>з достатньою кількістю вмісту, щоб викликати загортання на кілька рядків. Десь (де завгодно) у тексті може бути <sup>або <sub>. Це впливає на висоту лінії для цього рядка, додаючи додатковий інтервал вище / знизу. Якщо я встановив велику висоту лінії на цьому, <p>це не має ніякої різниці для проблеми. Висота лінії збільшується, але зайвий інтервал все ще залишається.

Як я можу зробити його послідовним - тобто всі рядки мають однаковий інтервал, містять вони <sup>чи ні?

Ваші рішення повинні бути крос-браузером (IE 6+, FF, сафарі, опера, хром)

Відповіді:


172

висота рядка це виправляє, але, можливо, доведеться зробити її досить великою: у моїх місцях розташування я повинен збільшити висоту рядка до приблизно 1,8, перш ніж вона <sup>більше не заважатиме, але це буде змінюватися від шрифту до шрифту.

Один з можливих підходів для отримання послідовних висот рядків - це встановлення власного стилю надширокості замість типового vertical-align: super. Якщо ви користуєтесь topцим, нічого не додаватимуть до рядка, але, можливо, доведеться додатково зменшити розмір шрифту, щоб він підходив:

sup { vertical-align: top; font-size: 0.6em; }

Ще один злом, який ви можете спробувати, - це використовувати позиціонування, щоб трохи перемістити його вгору, не впливаючи на рядок рядка:

sup { vertical-align: top; position: relative; top: -0.5em; }

Звичайно, це ризикує потрапити в лінію вище, якщо у вас недостатня висота лінії.


1
вертикальне вирівнювання виправлене, спасибі. Навіть масивна висота лінії 300% + не виправляє її в IE8, Chrome 3 або FF 3.5. Я все одно отримую 1-2 пікселя різниці.
Ендрю Буллок

Як згадувалося, це не завжди працює, якщо висота лінії занадто туга.
Рік

5
@simPod: Та ж ситуація vertical-align: bottom(хоча ця не отримує стільки, скільки top), а потім position:relative;позитивна top.
bobince

насправді я вважаю за краще {вертикально-вирівняти: супер}, оскільки це запобігає деяким збоям дисплея з висотою лінії в IE8, наскільки я пам’ятаю. Я б спробував не використовувати позиціонування часто, якщо є кращі альтернативи. Недбале верхнє позиціонування може призвести до виникнення неполаштованих проблем згодом у проекті.
Усі біти рівні

88
sup {
    line-height: 0;

    /* The following rules (or similar) likely come from browser 
     * style and are not needed
     */
    font-size: 0.83em;
    vertical-align: super;
}

Трюк полягає в тому, щоб встановити <sup>висоту лінії у 0. @Scott сказав, що це нормально, але це не завжди працює.

Це означає, що вам не доведеться змінювати висоту рядка навколишнього тексту, щоб вмістити текст надриска. Я перевірив це в IE7 + та інших основних браузерах.


2
+1. Як зазначалося, це запобігає конфліктам з іншими line-heightатрибутами. Він все ще може спричинити перехрестя з попереднім рядком, якщо line-height, звичайно, загальний встановлений на малий.
Кріс Кричо

фантастичне рішення, змушує хром більше не поводитися! Найпростіша відповідь поки.
Актау

Щойно зрозумів, що це вплине на висоту рядків за замовчуванням навколишнього тексту. Використовуйте line-height: 100%в цьому випадку.
Маттіас Хауерт

Це прекрасно працює. Крім того, можливі значення для line-heightмене виявили 0, 1, 1em і 100%. Все це, безумовно, працює в Chrome & Firefox.
ClarkeyBoy

Я також віддаю перевагу цій відповіді для мого випадку використання: ця відповідь працює на електронні листи в Gmail, прийнята відповідь - ні. stackoverflow.com/questions/21118072/…
Mshnik

7

У мене була така ж проблема, і не дана відповідь спрацювала. Але я виявив, що git фіксується з виправленням, який працював для мене:

sup {
  font-size: 0.8em;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}

2

нехай це буде легко:

sup { vertical-align: text-top; }

[ розмір шрифту залежно від вашого типу обличчя]


2
sup, sub {
  vertical-align: baseline;
  position: relative;
  top: -0.4em;
}
sub { 
  top: 0.4em; 
}

3
Будь-ласка, надайте пояснення зі своїм кодом, щоб ОП може вчитися на ньому.
EBH

1

Я вважаю за краще використовувати lengthвертикальне вирівнювання. Це вирівнює базову лінію елемента на задану довжину вище базової лінії його батьківського рівня.

sup {
   font-size: .83em;
   vertical-align: 0.25em;
   line-height: 0;
}

1

Причина, по якій <sup>тег впливає на інтервал між двома рядками, пов'язана з низкою факторів. Факторами є: висота рядка, розмір супріскрипта щодо звичайного шрифту, висота рядка суперскрипту та останнє, але не менш важливе значення, у якій нижня частина суперскрипту вирівнюється ... Якщо встановити ... висоту рядка звичайного тексту, який має бути в "тунельній смузі" (так я його називаю), становить 135%, тоді звичайний текст (100%) стає білим на 35% більше білого кольору. Для абзацу це виглядає приблизно так:

 p
    {
            line-height: 135%;
    }

Якщо потім не покласти білим кольором супершип ... (тобто зберегти його висоту рядка до 0), то у верхнього сценарію є лише ширина власного тексту ... приклад 70%), і ви вирівняєте його з серединою звичайного тексту (середина тексту), ви можете усунути проблему і отримати суперскрипт, схожий на індекс. Ось:

sup
{
    font-size: 70%;
    vertical-align: text-middle;
    line-height: 0;
}

1

Я віддаю перевагу запропонованому тут рішенню , як пояснюється цією jsfiddle :

CSS:

sup, sub {
  vertical-align: baseline;
  position: relative;
  top: -0.2em;
}

sub {
  top: 0.2em;
}

HTML:

<span>The following equation is perhaps the most well known of all: </span><span id="box">E<sub>a</sub> = mc<sup>2</sup></span><span>.  And it gives an opportunity to try out a superscript and even throw in a superfluous subscript!  I'm sure that Einstein would be pleased.</span>.

Краса цього рішення полягає в тому, що ви можете налаштувати вертикальне розташування супріскрипту та підрозділу, щоб уникнути сутичок із рядком вгорі чи внизу ... у вищесказаному просто збільшити або зменшити розмір 0.2emвідповідно до ваших вимог.


0

Щоб зробити всі рядки вище , щоб виглядати так само, як і рядок із супскриптом, визначте більший line-heightна весь абзац

<p style='line-height:150%'>

або будь-яке значення дає ефект, який ви бажаєте.

Це може виглядати дивно, але саме так ви описали свої вимоги.

РЕДАКТУВАННЯ: Для того, щоб всі рядки виглядали однаковими коли лише одному потрібно більше вертикального простору, ніж іншим , ВСІ рядки в абзаці повинні бути вищими.

Це, як я вже сказав, може бути не привабливим рішенням. Можливо, щось можна зробити за допомогою проміжку, роблячи лише текст із підзаголовком менше , крім того , я не вірю , що ви хочете , може бути досягнута. Але я хотів би побачити чуже рішення.

EDIT2: До речі, я спробував невеликий html-файл, що містить

<html>
<head>
<title>line-height</title>
<style>
p {
    line-height : 1.5em;
    width : 25em;
}
</style>
</head>
<body>
<p>Mary had a little lamb, its fleece<sup>1</sup> was white as snow, 
and everywhere that Mary went, the lamb<sub>2</sub> was sure to go.
</p>
</body>
</html>

А рядки мають однакову висоту в FF3.0.14 та Konqueror (я не можу говорити про інші браузери)


1
Я сказав у запитанні, що це не вирішує проблему. Ів додав роз'яснення, якщо ви неправильно зрозуміли
Ендрю Буллок

так, я розумію, якщо мені потрібно більше місця для однієї лінії, для послідовності мені потрібно додати додаткового місця для інших, це очевидно. Що я говорю, що висота рядка не виправляє це, це збільшує простір, так, але все ще є додатковий простір для супутника
Ендрю Буллок

Можливо, є різниця між браузерами - зрештою, відповідь, яку ви прийняли, починається з "висота рядка це виправляє", але ми не знаємо, що використовував bobince браузера.
pavium

0

Я використовував висоту рядка: нормально для верхніх сценаріїв, що добре працює для мене в Safari, Chrome і Firefox, але я не впевнений у IE.


0

Спеціально використовуйте це в бюлетені -

<sup style="font-size:9px; line-height:8px;">&reg;</sup>

0

Мені подобається рішення Мілінгу Кілу, але в тому ж дусі я вважаю за краще

sup { vertical-align:top; line-height:100%; }

0

& sup1, & sup2 тощо можуть зробити трюк. це хитрість HTML до надриска


0

Відповідь звідси , працює як у phantomjs, так і у вбудованому в електронну пошту HTML:

Lorem ipsum <sup style="font-size: 8px; line-height: 0; vertical-align: 3px">&reg;</sup>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.