Відступ, починаючи з другого рядка абзацу з CSS


103

Як я можу відступити, починаючи з другого рядка абзацу?

Я намагався

p {
    text-indent: 200px;
}
p:first-line {
    text-indent: 0;
}

і

p {
    margin-left: 200px;
}
p:first-line {
    margin-left: 0;
}

і

(with position:relative;)
p {
    left: 200px;
}
p:first-line {
    left: 0;
}

Чому для всіх відступів тексту першого рядка встановлено 0? Крім того, я не знаю, як це зробити, але той, який відсутній у цьому списку, - це той, який має для мене найбільш сенс, підкладка.
Скарлінський

Відповіді:


211

Це буквально лише другий рядок, який ви хочете відкласти, або це з другого рядка (тобто висячий відступ )?

Якщо це останнє, щось узгоджується з цим JSFiddle .

    div {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
    
    span {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
<div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</div>

<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</span>

Цей приклад показує, як використання одного і того ж синтаксису CSS у DIV або SPAN створює різні ефекти.


3
@Reuben Виходячи з вашого коментаря, який зараз видалено, я припускаю, що ви зробили це з фейса з ВТОРОГО рядка - і для майбутніх відвідувачів, можливо, ця скрипка є кращою, де синтаксис P не div або span. jsfiddle.net/gg9Hx
redditor

1
Чому прокладка - лівий, а потім негативний текст-відступ? Чому він повинен працювати так? Здається дивним. Чому не просто позитив text-indent?
Don Cheadle

2
Відступ тексту не впливає на діапазон. Для того ж результату його можна видалити зі стилю прольоту.
Сем Гаслер

25

Зробіть ліворучне поле: 2em або близько цього буде виштовхувати весь текст, включаючи перший рядок праворуч 2em. Тоді додайте текстовий відступ (застосовується до першого рядка) як -2em або близько того .. Це повертає перший рядок до початку без маржу. Я спробував це для тегів списку

<style>
    ul li{
      margin-left: 2em;
      text-indent: -2em;
    }
</style>

24

Це працювало для мене:

p { margin-left: -2em; 
 text-indent: 2em 
 }

10
Це, здається, робить повну протилежність тому, що просила ОП. Версія @ techillage правильна. Потрібно поміняти мінус навколо
Алекс Холсгроув

1
Це майже саме те, що мені було потрібно. Прийнята відповідь не підійде для мене, оскільки я не маю свободи в моїй системі управління вмістом додавати прольоти таким чином. Єдина проблема, яку я мав із рішенням тут, полягає в тому, що поле, яке залишилось, витягне весь абзац за межі контейнера. Тож я додав "position: relative" та "left: 2em", і це ідеально. На відміну від коментаря @AlexHolsgrove, відповідь techillage у мене взагалі не спрацювала, але, можливо, тому, що я не роблю цього в елементі списку.
Стю Ферлонг

2

Мені потрібно було відступити два ряди, щоб дозволити більше першого слова в пункті. Напружене одноразове рішення - розмістити текст у SVG-елементі та розмістити його так само, як <img>. Використовуючи float і тег висоти SVG визначає, скільки рядків буде відступів, наприклад

<p style="color: blue; font-size: large; padding-top: 4px;">
<svg height="44" width="260" style="float:left;margin-top:-8px;"><text x="0" y="36" fill="blue" font-family="Verdana" font-size="36">Lorum Ipsum</text></svg> 
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
  • Висота та ширина SVG визначають заблоковану область.
  • Y = 36 - глибина до базової лінії тексту SVG і така ж, як і розмір шрифту
  • margin-top дозволяє найкраще вирівняти текст SVG та параграфі тексту
  • Тут використані перші два слова, щоб нагадати про турботу, необхідну для нащадків

Так, це громіздко, але воно також не залежить від ширини вміщуючого діла.

Вищеназвана відповідь була на мій власний запит, щоб дозволити збільшити перше слово (а) параграфа на два ряди. Щоб просто зробити відступ у перших двох рядках абзацу, ви можете замінити всі теги SVG на наступний одиничний піксель img:

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="float:left;width:260px;height:44px;" />


1

Якщо ви створюєте стиль як список

  • Ви можете "вирівняти текст: початковий", а всі наступні рядки будуть відступати. Я розумію, що це може не відповідати вашим потребам, але я перевіряв, чи є інше рішення, перш ніж змінити розмітку.

    Думаю, введення другого рядка також могло б спрацювати, але вимагає людського мислення, щоб вміст протікав належним чином, і, звичайно, жорсткі розриви рядків (які самі по собі мене не турбують).


  • 1
    Ласкаво просимо до Stackoverflow. Схоже, у вас є якесь рішення цієї проблеми з відступами. Однак було б дуже корисно всім, якщо ви надасте якусь розмітку і поясніть рішення. Можливо, ви можете використовувати jsfiddle.net або іншу службу для створення робочої демонстрації. Всього найкращого.
    EGL 2-101
    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.