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.