Как изменить spacing

В статье рассказывается, как увеличить или уменьшить интервал между абзацами, используя свойства CSS

Один из моих читателей просил рассказать, как изменить интервал между абзацами. Данная статья отвечает на этот вопрос.

Изменение расстояния между абзацами

Современные браузеры устанавливают расстояние между абзацами по умолчанию. Точное значение зависит от используемого браузера, так как оно не задано спецификацией HTML.

Вот пример таблицы стилей для HTML 4 от Консорциума W3, в которых устанавливается верхнее и нижнее поля равными 1.12em. Поэтому разрыв между абзацами будет составлять 1.12em.

Чтобы узнать, как ваш браузер задает эти разрывы, запустите инструменты веб-разработчика и проверьте значения, заданные для полей, границ и отступов каждого абзаца.

Таким образом я обнаружил, что Firefox устанавливает поле до и после каждого абзаца в значение, равное размеру используемого шрифта. При этом оставляя размер границы и отступы равными нулю. Получается, что Firefox задает для каждого абзаца следующие стили:

p {
  margin-top: 1em ;
  margin-bottom: 1em ;
}

Но это не гарантирует, что между абзацами будет пробел в 2em, потому что нижнее поле первого абзаца добавляется к верхнему полю второго абзаца. Вместо этого поля перекрывают друг друга, оставляя расстояние, равное большему из двух полей.

В приведенном выше примере оба поля имеют одинаковый размер, поэтому расстояние между абзацами составляет 1em.

Таким образом, расстояние между абзацами устанавливается с помощью верхнего и нижнего полей. Например, чтобы увеличить промежуток до 2em, используйте следующий код:

p {
  margin-top: 2em;
  margin-bottom: 2em;
}

Как предотвратить увеличение расстояния между абзацами при изменении межстрочного расстояния CSS

Для решения проблемы мой читатель использовал следующее правило CSS:

Если применить это правило к блоку с текстом, результат будет следующим:

Для каждой строки задано свойство line-height: 2. Поэтому последняя строка первого абзаца имеет дополнительный пробел ее, а первая строка второго абзаца — дополнительное пространство над ней. Добавьте это расстояние к разрыву между абзацами, которое устанавливают браузеры, и вы получите продемонстрированный выше результат.

Но если нужно задать между абзацами интервал, не равный расстоянию между отдельными строками, установите верхнее и нижнее поля равными 0.

p {
  line-height: 2;
  margin-top: 0;
  margin-bottom: 0;
}

Для распознавания абзацев установите отступ первой строки с помощью свойства text-indent.

p {
  line-height: 2;
  margin-top: 0;
   margin-bottom: 0;
  text-indent: 22px;
}

Результат выглядит следующим образом:

Если вам не нравится полученный результат, измените значение отступа.

Во время набора текста или при оформлении документа наряду с размером и типом шрифта важную роль играет межстрочный интервал в Ворде. От этого зависит удобочитаемость текста, междустрочный интервал относится к параметрам форматирования в Microsoft Word.

Расстояние между двумя строками, известное как междустрочный интервал в Ворде, влияет на визуальное восприятие текстовой информации. Например, если расстояние слишком маленькое, то такой текст будет затруднительно читать, а при большем интервале текст выглядит рассеянным, что также не способствует комфортному чтению.

Содержание:

  1. Как сделать межстрочный интервал в Ворде — 1 способ
  2. Как сделать междустрочный интервал в Word — 2 способ
  3. Как настроить междустрочный интервал в документе Microsoft Word — 3 способ
  4. Как изменить межстрочный интервал в Word — 4 способ
  5. Выводы статьи
  6. Как изменить межстрочный интервал в Word (видео)

Междустрочный интервал определяет расстояние между строками в тексте документа Word. Интервал между строк текста впрямую зависит от размера используемого шрифта. Расстояние учитывается между базовыми линиями каждой строки, проходящими строго по центру букв (с учетом верхних и нижних их элементов).

Во многих случаях при наборе текста используется одинарный междустрочный интервал, который равен размеру шрифта текста. Часто используется и полуторный междустрочный интервал, который применяется при оформлении рефератов, курсовых и дипломов.

Наряду с другими вариантами, для увеличения пространства между стоками текста применяют двойной интервал. Благодаря этому удваивается пространство между строками документа, потому что вы добавляете полную строку пробела между каждой строкой текста.

междустрочные интервалы

Какой межстрочный интервал выбрать зависит от решаемых задач и предъявляемых требований к оформлению документа Word.

В этом руководстве вы найдете инструкции о том, как сделать междустрочный интервал в Ворде, и как настроить межстрочный интервал, используя пользовательские параметры.

Как сделать межстрочный интервал в Ворде — 1 способ

Вы можете быстро увеличить межстрочный интервал Word с помощью встроенных параметров текстового редактора. Этот способ можно применить в версиях программы MS Word 2021, MS Word 2019, MS Word 2016, MS Word 2013.

Пройдите последовательные шаги:

  1. Откройте документ Word.
  2. Войдите во вкладку «Конструктор» («Дизайн»).
  3. В группе «Форматирование документа» найдите и щелкните по кнопке «Интервал между абзацами».

интервал между абзацами

  1. В выпадающем меню предлагаются следующие варианты:
  • По умолчанию — междустрочный интервал «1,08».
  • Отсутствует — междустрочный интервал «1».
  • Сжатый — междустрочный интервал «1».
  • Узкий — междустрочный интервал «1,15».
  • Неплотный — междустрочный интервал «1,15».
  • Свободный — междустрочный интервал «1,5».
  • Двойной — междустрочный интервал «2».

набор стилей

Перемещая курсор мыши между этими пунктами, вы можете визуально наблюдать за изменениями интервалов между строками текста.

  1. Выберите один из подходящих вариантов. При выборе любого из предложенных параметров изменения применяются ко всему документу Word.

выбор стиля

Вы можете создать свой собственный стиль междустрочного интервала. Для этого выберите пункт «Пользовательский интервал между абзацами…».

В окне «Управление стилями», после открытия вкладки «По умолчанию» настраивается изменение междустрочного интервала. Укажите подходящие значения в группе «Интервал». В параметрах стилей, помимо интервала между строками абзаца, имеется возможность изменить интервал до или после абзаца.

выбор интервала

Как сделать междустрочный интервал в Word — 2 способ

В случае необходимости, вы можете задать пользовательский размер междустрочного интервала в документе Word.

Чтобы изменить междустрочный интервал Word, выполните следующие действия:

  1. В окне открытого документа Word выделите нужные абзацы. Если вам необходимо применить изменения ко всему тексту, нажмите на клавиши «Ctrl» + «A» для его выделения.
  2. Щелкните правой кнопкой мыши по выделенному фрагменту.
  3. В контекстном меню выберите пункт «Абзац».

абзац

  1. В окне «Абзац» на вкладке «Отступы и интервалы» находятся параметры междустрочного интервала. В группе «Интервал» в графе «междустрочный:» выберите нужный интервал:
  • Множитель — самостоятельная установка межстрочного интервала. Если вы не вносили изменений, в настройках отображается значение по умолчанию.

В версиях Word 2021-2013 по умолчанию используется интервал в 1,08 строки, что немного больше, чем при одинарном интервале. В версиях Word 2010-2007 по умолчанию используется значение «1,15».

  • Одинарный — размер интервала равен размеру текущего шрифта текста абзаца.
  • 1,5 строки — интервал равен полуторному размеру шрифта текста абзаца.
  • Двойной — интервал равен двойному размеру шрифта текста абзаца.
  • Минимум — интервал не меньше заданного в пунктах настроек размера.
  • Точно — интервал точно соответствует заданному в пунктах размеру.

выбор межстрочного интервала

  1. Нажмите на кнопку «ОК», чтобы изменения вступили в силу.

Интервалы «Одинарный», «1,5 строки» и «Двойной» зависят от высоты текущего шрифта. Если вы увеличите размер шрифта, то соответственно пропорционально увеличится и размер интервала между строками абзаца.

В интервалах «Минимум» и «Точно» устанавливается точное значение междустрочного интервала в «пунктах» (типографских пунктах). В случае увеличения или уменьшения высоты шрифта, межстрочный интервал не изменяется.

интервал точно

Как настроить междустрочный интервал в документе Microsoft Word — 3 способ

Ознакомьтесь с другим способом установить интервал между строками абзаца самостоятельно, выбрав подходящий вариант.

Проделайте следующее:

  1. В открытом документе Word переходим во вкладку «Главная».
  2. Выделяем нужные абзацы.
  3. В группе «Абзац» щелкаем по кнопке «Интервал» («Междустрочный интервал»).

интервал

  1. В открывшемся меню выбираем необходимый межстрочный интервал абзаца:
  • 1,0;
  • 1,15;
  • 1,5;
  • 2,0;
  • 2,5;
  • 3,0;

Здесь есть возможности для добавления интервала перед и после абзаца или можно выбрать другие варианты междустрочных интервалов. Затем вы можете применить выбранные настройки к текущему документу или к новым документам, использующим текущий шаблону.

Как изменить межстрочный интервал в Word — 4 способ

Существует простой способ для изменения интервалов между строк при редактировании документа MS Word. Этим методом вы можете задать одинарный (междустрочный интервал 1), полуторный (межстрочный интервал 1,5), и двойной (межстрочный интервал 2).

Чтобы изменить межстрочный интервал в тексте, выполните действия:

  1. В открытом окне текстового редактора Word установите указатель мыши в нужный абзац текста.
  2. Используйте следующие сочетания клавиш клавиатуры, чтобы задать необходимые параметры:
  • «Ctrl» + «1» — одинарный интервал;
  • «Ctrl» + «5» — полуторный интервал;
  • «Ctrl» + «2» — двойной интервал.

Выводы статьи

Высота и тип шрифта, а также междустрочный интервал играют важную роль для визуального восприятия текста в документе Word. Интервал можно изменить, увеличивая или уменьшая расстояние между строками текста. В случае необходимости, пользователь может применить готовые параметры междустрочных интервалов в Word или самостоятельно настроить межстрочный интервал абзаца во время оформления документа.

Как изменить межстрочный интервал в Word (видео)

Похожие публикации:

  • Режим чтения Word: как включить или как убрать
  • Как объединить документы Ворд в один файл
  • Как сделать обтекание текстом в Word — 3 способа
  • Как сохранить картинки из Word
  • Как убрать красные подчеркивания в Word — 3 способа

Иллюстрированный самоучитель по Adobe InDesign

От интервалов зависит, как строки будут подогнаны между полями. В программе InDesign предусмотрены три различных способа управления интервалами. Опция Word Spacing (Межсловные) изменяет межсловные интервалы.

Установка интервалов в между словами

  1. Выделите текст.
  2. Выполните команды Type › Paragraph (Текст › Абзац), чтобы открыть палитру Paragraph.
  3. Выберите опцию Justification (Интервалы) из меню палитры Paragraph. Откроется диалоговое окно Justification (рис. 15.5).
  4. Введите в поля Word Spacing (Межсловные) нужные значения (рис. 15.6):
    • Desired (Желаемые) – предпочтительный интервал между словами. 100% означает, что вы устанавливаете тот же интервал, что и автор данного шрифта;
    • Minimum (Минимум) – самый маленький интервал между словами, который вы допускаете. Например, 80% означает, что вы задаете интервал, равный 80% от нормального интервала;
    • Maximum (Максимум) – самый большой интервал между словами, который вы допускаете. Величина 120% означает, что вы задаете интервал, равный 120% от нормального интервала.
  5. Щелкните ОК, чтобы реализовать изменения (рис. 15.7).

Рис. 15.5. В диалоговом окне Justification задается интервал между словами и буквами

Рис. 15.6. Управление величиной интервала в диалоговом окне Justification

Рис. 15.7. Эффекты изменения интервала между словами

Параметры Minimum, Desired и Maximum применяются только к тексту, который имеет одну из настроек выключки по формату. В других ее видах, например выключке по левой границе текста, используется только параметр Desired.

Интервал между символами называется межбуквенным, или межсимвольным. Программа InDesign позволяет его изменять.

Установка межбуквенных интервалов

Рис. 15.8. Разные интервалы между буквами

  1. Выделите текст.
  2. Выполните команды Type › Paragraph (Текст › Абзац), чтобы открыть палитру Paragraph.
  3. Выберите опцию Justification (Интервалы) из меню палитры Paragraph.
  4. Введите в поля Letter Spacing (Межбуквенные) нужные значения:
    • Desired (Желаемые) – предпочтительный интервал между символами. 0% указывает, что вы не хотите как-либо изменить имеющийся интервал;
    • Minimum (Минимум) – самый маленький допустимый интервал между словами. Значение 5% уменьшает интервал на 5% от нормальной величины;
    • Maximum (Максимум) – самый большой допустимый интервал между словами. Значение 5% увеличивает интервал на 5% от нормальной величины.
  5. Щелкните ОК, чтобы реализовать изменения (рис. 15.8). Если настройки абзаца, которые вы выбрали, не могут быть установлены с помощью средств управления интервалами, программа InOesign изменит параметры, увеличивая или уменьшая интервал сверх разрешаемых пределов. Включите установки подсветки таким образом, чтобы подобные изменения были выделены на странице.

Другой способ управления интервалами – использование масштабировании наборных знаков, которое заключается в горизонтальном изменении букв в тексте, чтобы он занимал большее или меньшее пространство в пределах строки.

Выключка по формату: примеры, ошибки, как сделать

Особой требовательностью к набору отличались первопечатные книги. Вот, например, Николай Йенсон, 1474:

А это Альд Мануций, 1499:

195902_original

Равномерные межбуквенные и межсловные пробелы делают набор однородно серым. В нем нет ни дыр, ни темных пятен. Тон полосы спокойный, прозрачный и легкий (определения Дмитрия Карпова).

196140_original

Плохо

Плохи любые попытки сделать полную выключку в вебе и на мобильных устройствах. Компьютеры еще не научились правильно расставлять переносы и следить за величиной пробелов. Издание The Daily для айпада:

198158_original

Здесь лучше, но текст всё равно слишком разреженный:

197890_original

Полная выключка всегда работает плохо на узком формате. Тут необходим левый флаг или центровка:

197152_original

Ошибки

Выключка по формату — неестественная форма существования текста, отсюда и многочисленные сложности. Ошибки, перечисленные в памятке, делятся на два вида: первые нарушают тон полосы (разреженные и сжатые строки), вторые — ее прямоугольность (висячие и концевые строки).

Висячие предлоги, союзы и другие короткие слова не являются ошибкой при полной выключке. Ими жертвуют ради однородного тона. Исключение составляют:
— однобуквенные слова в начале предложения,
— инициалы,
— маркеры списка (цифровые, буквенные и графические),
— сокращения вроде т. е., т. к., и т. д., и др.,
— цифры.

Как сделать в Индизайне

В первую очередь настраиваем вкладку Justification. Межсловное расстояние в интервале от 95 до 130%, межбуквенное — от −3 до 6%. Обратите внимание, что минимальное значение несильно отклоняется от желаемого (Desired): сжатые строки читать труднее, чем разреженные. Разрешаем масштабировать символы, но совсем чуть-чуть, от 99 до 101%:

198991_original

Эти цифры получены опытным путем и лучше всего подходят для книжного набора: 50–60 символов в строке. Для узкой колонки правила нужно ослабить.

Обязательно включаем переносы во вкладке Hyphenation. Ползунок выкручен в сторону Better Spacing:

199221_original

Если не включаются, значит, выбран не тот язык:

199664_original

Галочка H&J Violations в панели Preferences подсветит желтым строчки, которые Индизайн не может разверстать по заданным цифрам:

200410_original

Перечисленные выше настройки уже дадут сносный результат:

201510_original

Дальше работаем руками — двигаем строки в проблемных абзацах. Есть несколько способов:

1. Иногда достаточно изменить место переноса в каком-нибудь слове — поставить символ мягкого переноса. Чтобы слово стало неразрывным, мягкий перенос должен стоять перед первой буквой.

Мак: Command + Shift + — (дефис)
Винда: Ctrl + Shift + —

2. Если переносы не помогли, крутим трекинг от −10 до 10 единиц. Трекинг увеличивает или уменьшает все пробелы в строке: и между словами, и между буквами. На горячих клавишах у Индизайна слишком большой шаг, поэтому я ими не пользуюсь.

Плюс 20 единиц:
Option + (стрелка вправо)
Alt + →

Минус 20 единиц:
Option + ← (стрелка влево)
Alt + ←

3. Можно менять только межсловные пробелы, не трогая межбуквенные.

Плюс 20 единиц:
Command + Option + (бэкслеш)
Ctrl + Alt +

Минус 20 единиц:
Command + Option + Delete
Ctrl + Alt + Backspace

4. Еще одно средство — масштабирование шрифта от 99 до 101%.

5. В сложных случаях слегка растягиваем или сужаем текстовый фрейм — не более, чем на 1–2 мм. (Этого никто не заметит.)

Изменения должны касаться всего абзаца, а не отдельных строк, потому что Индизайн «думает» об абзаце целиком и учитывает соседние строки. То есть сначала выделяем весь абзац, а потом крутим настройки.

201778_original

С концевыми и висячими строками также справляемся с помощью вгонки и выгонки. Концевую строку, немного не доходящую до края, втягиваем, чтобы пробел стал более внятным, либо доводим до правой границы (см. первый абзац на предыдущей картинке). О допустимости висячих строк можно долго спорить, однако в традиционной книжной верстке они запрещены.

Нельзя менять интерлиньяж и добавлять пробелы между абзацами. Как говорит Брингхерст, «такие фокусы разрушают ткань текста и… поражают книгу в самое сердце».

В конце еще раз внимательно смотрим на полосу, особенно на правый край. Проверяем правильность переносов.

Пробелы в InDesign и как я их ставлю

Если в докомпьютерную эпоху набор текста и подготовка оригинал-макета были отдельной профессией, то ныне любой человек, установивший верстальную программу (или даже Word) способен готовить документы к печати.

В компьютерную эпоху пробелы, как самая несодержательная часть текста, часто обходят должным вниманием при подготовке изданий. Зачастую в документе присутствуют всего два вида пробелов: обыкновенный и неразрывный (в Word’е фиксированной ширины, в InDesign’е — нет). Между тем, пробелов существует около двух десятков, и некоторые из них очень пригождаются в русской типографике.

Обычный растяжимый пробел, который ставится почти везде, работает аналогично механизму линотипа: при выключке по формату полосы (в компьютерных терминах выравнивание по ширине) пробелы, выполненные в виде клинышков, опускались между словами до тех пор, пока строка не занимала всю отведённую ширину.

Неразрывный пробел ничем не отличается по ширине и растяжению от обычного пробела, но не может быть заменён переводом строки. Неразрывные пробелы необходимо ставить после почти всех однобуквенных слов (а, в, и, к, о, с, у, я) и до «б» и «ж», иногда после двухбуквенных слов в начале предложения, между числом и единицами измерений (100 грамм, 5 м), между частями названия (InDesign 5.5).

Этот список может поначалу казаться неполным, потому что в остальных случаях, где мы привыкли ставить неразрывный пробел, ставятся пробельные символы другой величины.

  • Em Space (круглая) — пробел шириной в кегль. Почти нигде не нужен.
  • En Space (полукруглая) — пробел шириной в половину кегля.
  • Nonbreaking Space (Fixed Width) — неразрывный пробел фиксированной величины. Величина задаётся в настройках
  • Third Space (третья) — пробел шириной в треть круглой
  • Quarter Space (четвёртая) — пробел шириной в четверть круглой
  • Sixth Space (шестая) — пробел шириной в одну шестую круглой
  • Flush Space — пробел изменяемой ширины, добавляется в конце полностью (с последней строкой) выровненного абзаца
  • Hair Space — одна двадцать четвёртая круглой
  • Thin Space (тонкая) — одна восьмая круглой. В английской типографике добавляется вокруг тире
  • Figure Space — пробел шириной с цифру
  • Punctuation Space — пробел шириной с знак пунктуации (. : !)

Шестая ставится вокруг тире и значительно улучшает вид текста: пробелы вокруг тире не растягиваются ни при каких условиях.

Тонкую можно ставить в математических формулах вокруг знаков +, − и прочих, а также после знака номера или параграфа. Также ею отделяются группы цифр (если их больше четырёх).

Четвёртой я отбиваю инициалы друг от друга и от фамилии, а также номера иллюстраций/схем (ил. 3). Также четвёртую можно употреблять в сокращениях вроде «и т. д.» «и т. п.».

Третья, практически неотличимая от обыкновенного пробела, находит применение в списках литературы вокруг одинарной и двойной косых черт, отделяющих составителей и названия сборников.

Полукруглую я ставлю в некоторых специальных случаях, например в таком: Ил. 3. В. И. Пупкин — между «3.» и «В.».

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

Расставляет неразрывные пробелы после однобуквенных слов кроме б и ж:
Find what: b([ИЯОВКУСАияовкуса])b
Change to: $1

Расставляет неразрывные пробелы до б и ж:
Find what: b([ЖбжБ])b
Change to: $1

Демонстрация возможностей CSS для настройки расстояний между буквами, строками, табуляции и других свойств шрифтов.

1

Красная строка

Свойство text-indent устанавливает сдвиг первой строки, цвет первой буквы можно определить свойством :first-letter.

p {
	text-indent: 0px;
}

CSS

2

Расстояние между буквами

Свойство letter-spacing устанавливает интервал между символами. В качестве значений принимаются единицы длины (px, in, pt, em, ex), допустимо отрицательное значение. Лучшая точность получается при использовании em.

p {
	letter-spacing: 0em;
}

CSS

3

Ширина пробелов

Word-spacing задает интервал между словами, значение можно указать в px, in, pt, em, ex.

p {
	word-spacing: 0em;
}

CSS

4

Ширина табуляции

Свойство tab-size устанавливает ширину табуляции в <textarea>, <code>, <pre> и других элементах со свойством white-space: pre. В качестве значения используется количество символов (по умолчанию 8) или единицы длины.

Свойство пока ещё не стандартизировано W3C, но поддерживается современными браузерами.

pre {
	-o-tab-size: 8;
	-moz-tab-size: 8;
	tab-size: 8;
}

CSS

5

Ширина букв

Свойство font-stretch задаёт ширину символов в шрифте, работает только со шрифтами, у которых есть поддержка разных начертаний. Значения задаются константами или процентами:

normal 100% Обычная ширина
semi-condensed 87.5% Узковатая ширина
condensed 75% Узкая ширина
extra-condensed 62.5% Очень узкая ширина
ultra-condensed 50% Самая узкая ширина
semi-expanded 112.5% Широковатая ширина
expanded 125% Средне-большая ширина
extra-expanded 150% Очень большая ширина
ultra-expanded 200% Самая большая ширина
p {
	font-stretch: 100%;
}

CSS

Второй прием увеличить ширину букв – растянуть элемент свойством transform scale от нулевой точки трансформации (transform-origin).

p {
	transform-origin: 0 0;
	transform: scale(1, 1);
}

CSS

Меняя второй параметр можно изменить высоту букв:

p {
	transform-origin: 0 0;
	transform: scale(1, 1);
}

CSS

6

Межстрочный интервал

Line-height устанавливает интерлиньяж текста, отсчет ведется от базовой линии шрифта. Значение воспринимается как множитель от текущего размера шрифта, также отступ можно указать в em или px, отрицательное значение не допускается.

p {
	line-height: 20px;
}

CSS

01.05.2020, обновлено 14.10.2020

Другие публикации

Contenteditable – текстовый редактор

Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а…

Мануал по созданию и форматированию excel файлов в PHPExcel

К сожалению разработчики прекратили поддержку и разработку проекта, но PHPExcel все равно остается популярной…

Таблица символов ASCII + Windows 1251

Список из 256 символов и их коды в ASCII.

Печать HTML страниц

Очень часто разработчики забывают про печатную версию сайта, поэтому можно встретить такой результат на бумаге…

Генерация счета на оплату PDF PHP

С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf — это конвертер HTML в PDF который…

Текст с градиентом

Градиент в цвет шрифта можно добавить с помощью CSS свойства background-clip: text, которое окрашивает текст в цвет или изображение указанного в background-image.

Здравствуйте, дорогие посетители!

Наверняка у каждого из вас возникали ситуации, когда при верстке вам нужно было разместить в блоке какой-либо текст, но он в него не вмещался, или наоборот, был слишком маленьким по объему, и в блоке оставалось слишком много пустого места.

В таких случаях можно попробовать различные методы выхода из положения. Например, можно поменять размер шрифта, урезать текст или изменить размер блока. Но если ни один из этих вариантов не подходят, то остается только поменять расстояние между буквами и расстояние между словами в CSS.

Чтобы изменить межбуквенный интервал в CSS мы можем использовать свойство letter-spacing. По умолчанию браузеры устанавливают межбуквенный интервал, основываясь на типе выбранного шрифта и его параметров. С помощью данного свойства мы можем задать расстояние между буквами для текста css в конкретном элементе.

Свойство letter-spacing может принимать три значения:

  • Числовое значение – можно задать интервал в любых доступных для css единицах измерения (px, in, pt, em, ex), а так же можно задавать как положительные, так и отрицательные значения.
  • normal – задает расстояние между буквами css для текста по умолчанию (0.25em)
  • inherit – параметры межбуквенного интервала в css будут наследоваться от родительского элемента.

Например:

letter-spacing: 3px;

Как мы можем его использовать? Например, у меня четыре одинаковых блока с текстом, в оном блоке текст как раз подобран по размеру, а в остальных трех фрагменты текста значительно меньше, но изменить размеры блоков нельзя.

Межбуквенный интервал css

Для первых трех блоков можно попробовать увеличить расстояние между буквами css, и тем самым сделать его немного объемнее. В файле стилей, для абзацев в классах первых трех элементов пишем следующие свойства:

.row15 .first p, .row15 .second p, .row15 .third p{

letter-spacing:0.2ex;

}

В итоге вот что получилось:

Увеличенный межбуквенный интервал css

Визуально видно, что расстояние между буквами увеличились, но этого не достаточно.

Интервал между буквами увеличивать больше не стоит, так как это отрицательно скажется на внешнем виде. Поэтому я попробую увеличить интервал между словами в css.

Как изменить расстояние между словами CSS?

Для этого мы можем использовать аналогичное свойство, которое называется word-spacing. Работает оно точно так же как и предыдущее с единственным отличием в том, что расстояние устанавливается для целых слов.

word-spacing может принимать такой же набор значений:

  • Числовое значение – размер интервала может быть задан в пикселях, дюймах, пунктах и относительных единицах
  • normal – значение по умолчанию
  • inherit – наследование родительских параметров

Для тех же трех блоков задам расстояние между словами в css-файле:

.row15 .first p, .row15 .second p, .row15 .third p{

letter-spacing:0.2em;

word-spacing:1em;

}

Вот что у меня получилось:

Интервал между словами CSS

Используя данные свойства можно придать тексту дополнительный объем, но главное, конечно же, не перестараться. Так как слишком большие расстояние между словами или символами обязательно скажется на внешнем виде и читаемости текста. В любом случае нужно подбирать интервалы в зависимости от ситуации и используемого шрифта.

А на этом у меня сегодня все. Если данный материал был для вас полезен, делитесь статьей в социальных сетях и подписывайтесь на мою рассылку новостей сайта!

Удачи вам в оформлении страниц сайта! До встречи в следующих статьях!

С уважением Юлия Гусарь

Если несколько элементов веб-страницы расположены близко друг к другу, то у пользователей возникает такое ощущение, что у этих элементов есть что-то общее. Группировка элементов помогает пользователю понять их взаимосвязь благодаря оценке расстояния между ними. Если бы все элементы были бы расположены на одинаковом расстоянии друг от друга, пользователю сложно было бы, просматривая страницу, узнать о том, какие из них связаны друг с другом, а какие — нет.


Эта статья посвящена всему, что нужно знать о настройке расстояний между элементами и о настройке внутренних пространств элементов. В частности, речь пойдёт о том, в каких ситуациях стоит использовать внутренние отступы (padding), а в каких — внешние (margin).

Виды расстояний в CSS

Расстояния между элементами и их частями, настраиваемые средствами CSS, бывают двух видов. Они, по отношению к элементу, делятся на внутренние и внешние. Представим, что у нас имеется элемент. Если внутри него имеется некое расстояние между какими-то его частями, то это — внутренний отступ. Если же речь идёт о расстоянии между отдельными элементами — то это внешний отступ.

Внутреннее пространство и внешнее пространство

В CSS расстояние между элементами и их составными частями можно настраивать так:

.element {
    padding: 1rem;
    margin-bottom: 1rem;
}

Свойство padding использовано здесь для настройки внутреннего отступа, а свойство margin — для настройки внешнего отступа. Всё очень просто. Правда? Но настройка расстояний в CSS может серьёзно усложниться в том случае, если работают с компонентами, имеющими множество мелких составных частей и дочерних элементов.

▍Свойство margin — внешний отступ

Свойство margin используется для настройки расстояния между отдельными элементами. Например, в предыдущем примере использовано CSS-свойство margin-bottom: 1rem для добавления вертикального расстояния между двумя элементами, расположенными друг над другом.

Внешний отступ можно настраивать для четырёх сторон элемента (top, right, bottom, left — верхней, правой, нижней, левой). Поэтому, прежде чем переходить к примерам и к обсуждениям разных способов настройки расстояний, важно пролить свет на некоторые базовые концепции.

▍Схлопывание внешних отступов

Если описать понятие «схлопывание внешних отступов» простыми словами, то можно сказать, что это происходит в том случае, если два элемента, расположенных друг над другом, имеют внешние отступы, и при этом отступ одного из них больше, чем отступ другого. В таком случае будет использован больший отступ, а меньший будет проигнорирован.

Побеждает больший отступ

На вышеприведённой схеме у верхнего элемента настроено свойство margin-bottom, а у нижнего — свойство margin-top. Вертикальное расстояние между элементами соответствует большему из этих отступов.

Для того чтобы избежать этой проблемы, рекомендуется настраивать во всех элементах одни и те же отступы (как описано здесь). И вот ещё один интересный факт. Ресурс CSS Tricks устроил голосование по поводу использования свойств margin-bottom и margin-top. Как оказалось, свойство margin-bottom победило, взяв 61% голосов.

Вот как решается эта проблема:

.element:not(:last-child) {
    margin-bottom: 1rem;
}

Использование CSS-селектора :not позволяет легко удалить внешний отступ у последнего дочернего элемента для того чтобы избавиться от ненужного пространства между элементами.

→ Вот демонстрация работы с внешними отступами

Ещё один пример, связанный со схлопыванием внешних отступов, связан с дочерними и родительскими элементами. Предположим, имеется следующий HTML-код:

<div class="parent">
  <div class="child">I'm the child element</div>
</div>

Вот его стили:

.parent {
  margin: 50px auto 0 auto;
  width: 400px;
  height: 120px;
}

.child {
  margin: 50px 0;
}

Вот как выглядит результат визуализации всего этого.

Дочерний и родительский элементы

Обратите внимание на то, что дочерний элемент упирается в верхнюю часть родительского элемента. Это — результат схлопывания их внешних отступов. По данным W3C, есть несколько вариантов решения этой проблемы:

  • Добавление свойства border к родительскому элементу.
  • Установка свойства display дочернего элемента в значение inline-block.

Более понятным решением этой проблемы будет настройка свойства padding-top родительского элемента.

Настройка верхнего внутреннего отступа родительского элемента

▍Отрицательный внешний отступ

Отрицательное значение можно использовать для любых внешних отступов. В некоторых случаях этот приём оказывается весьма полезным. Взглянем на следующий рисунок.

Результаты настройки свойства padding родительского элемента

У родительского элемента имеется свойство padding: 1rem. Это приводит к тому, что у дочернего элемента появляются смещения сверху, слева и справа. Но дочерний элемент должен прилегать к границам родительского элемента. Добиться этого помогут отрицательные внешние отступы.

.parent {
    padding: 1rem
}

.child {
    margin-left: -1rem;
    margin-right: -1rem;
    margin-top: -1rem;
}

Вот что получилось в результате такой стилизации.

Отрицательные внешние отступы дочернего элемента помогают добиться желаемого эффекта

→ Вот демонстрация

Если тема отрицательных внешних отступов вам интересна — рекомендую эту статью.

▍Свойство padding — внутренние отступы

Как уже было сказано, свойство padding позволяет управлять пространством внутри элемента. Цель применения этого свойства зависит от того, в какой ситуации оно используется.

Например, его можно использовать для увеличения пространства вокруг ссылок. Это приводит к увеличению кликабельного пространства ссылок.

Зелёным цветом выделен внутренний отступ

▍Ситуации, в которых свойство padding не работает

Важно отметить, что вертикальные внутренние отступы не работают с элементами, имеющими свойство display: inline. Например, это элементы <span> и <a>. Если настроить свойство padding такого элемента, такая настройка на данный элемент не подействует. Это — всего лишь дружеское напоминание о том, что у inline-элементов нужно менять свойство display:

.element span {
    display: inline-block;
    padding-top: 1rem;
    padding-bottom: 1rem;
}

Пространство между элементами CSS Grid-макета

В модели CSS Grid можно легко настраивать расстояние между столбцами и строками, используя свойство grid-gap. Это — сокращённое название свойства, задающего расстояния между столбцами и строками.

Расстояния между столбцами и строками

.element {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-gap: 16px; /* Добавляет расстояние в 16px для строк и столбцов */
}

Полная запись этих свойств выглядит так:

.element {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-row-gap: 24px;
    grid-column-gap: 16px;
}

Пространство между элементами CSS Flexbox-макета

Есть одно свойство, предложенное для Grid- и Flexbox-макетов. Это — свойство gap. В настоящее время его поддерживает лишь Firefox.

.element {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}

Более того, это свойство нельзя использовать с CSS @supports для определения того, поддерживается ли оно, и для принятия соответствующих решений, основываясь на этом. Если это свойство вам нравится — голосуйте за добавление его в Chrome.

Позиционирование элементов в CSS

Возможно, позиционирование элементов нельзя напрямую отнести к способам настройки расстояния между ними, но в некоторых случаях позиционирование играет определённую роль. Например, если есть абсолютно позиционированный дочерний элемент, который нужно расположить в 16px от левого и верхнего краёв родительского элемента.

Рассмотрим следующий пример. Есть карточка, на которой имеется иконка, которую нужно расположить на некотором расстоянии от верхнего и левого краёв родительского элемента. Для достижения этого эффекта можно воспользоваться следующим стилем:

.category {
    position: absolute;
    left: 16px;
    top: 16px;
}

Зелёным выделено расстояние между границами родительского и дочернего элементов

Сценарии использования и практические примеры

В этом разделе мы рассмотрим сценарии использования средств настройки расстояний между элементами. Нечто подобное вполне может встретиться вам в повседневной работе с CSS.

▍Компонент-заголовок

Компонент — заголовок, у которого настроено следующее: отступ слева и справа, пространство вокруг логотипа, пространство вокруг навигационного элемента, расстояние между навигационным элементом и именем пользователя

В данном случае в компоненте-заголовке имеется логотип, область навигации, и область, в которой выводятся сведения о профиле пользователя. Можете догадаться о том, как должен выглядеть код стилизации такого элемента? Вот, чтобы было легче, схематичная разметка такого элемента:

<header class="c-header">
  <h1 class="c-logo"><a href="#">Logo</a></h1>
  <div class="c-header__nav">
    <nav class="c-nav">
      <ul>
        <li><a href="#">...</a></li>
      </ul>
    </nav>
    <a href="#" class="c-user">
      <span>Ahmad</span>
      <img class="c-avatar" src="shadeed.jpg" alt="">
    </a>
  </div>
</header>

Внутренние и внешние отступы

Слева и справа используются внутренние отступы. Их цель заключается в том, чтобы содержимое заголовка не прижималось бы к его краям.

.c-header {
    padding-left: 16px;
    padding-right: 16px;
}

При настройке навигационных ссылок нужно учитывать то, что у каждой из них должно быть достаточно внутреннего пространства по вертикали и по горизонтали. Благодаря этому их кликабельная область будет достаточно большой, что улучшит доступность проекта.

.c-nav a {
    display: block;
    padding: 16px 8px;
}

Если же говорить о расстоянии между элементами, то тут можно использовать свойство margin, либо — можно изменить свойство display элементов <li> на inline-block.  Благодаря этому добавляется небольшое пространство между элементами, лежащими на одном уровне, из-за того, что такие элементы рассматриваются как символы.

.c-nav li {
    /* Благодаря этому созданы те пространства, которые видны на макете */
    display: inline-block;
}

И наконец, у имени пользователя и аватара есть левый внешний отступ.

.c-user img,
.c-user span {
    margin-left: 10px;
}

Обратите внимание на то, что если вы создаёте многоязычный сайт, рекомендовано в подобной ситуации использовать логические CSS-свойства:

.c-user img,
.c-user span {
    margin-inline-start: 1rem;
}

Расстояния до и после разделителя неодинаковы

Обратите внимание на то, что расстояния до и после разделителя неодинаковы. Причина этого заключается в том, что у навигационного блока не задана ширина. Вместо этого тут настроены лишь внутренние отступы. В результате ширина навигационных элементов зависит от их содержимого. Вот варианты решения этой проблемы:

  • Настройка минимальной ширины для навигационных элементов.
  • Увеличение горизонтального внутреннего отступа.
  • Добавление в левой части разделителя дополнительного внешнего отступа.

Лучше и легче всего воспользоваться третьим способом, который заключается в настройке свойства margin-left:

.c-user {
    margin-left: 8px;
}

→ Вот демонстрация

▍Расстояния в сеточных макетах — CSS Flexbox

Сеточные макеты — это то место, где часто применяются технологии настройки расстояния между элементами. Рассмотрим следующий пример.

Сеточный макет

Нам нужно настроить расстояние между строками и столбцами таблицы. Вот разметка:

<div class="wrapper">
    <div class="grid grid--4">
        <div class="grid__item">
              <article class="card"><!-- Содержимое карточки --></article>
        </div>
        <div class="grid__item">
              <article class="card"><!-- Содержимое карточки --></article>
        </div>
        <!-- И так далее.. -->
    </div>
</div>

Обычно я предпочитаю держать компоненты в инкапсулированном состоянии и избегаю настройки их внешних отступов. По этой причине у меня есть элемент grid_item, в котором будет располагаться элемент-карточка.

.grid--4 {
    display: flex;
    flex-wrap: wrap;
}

.grid__item {
    flex-basis: 25%;
    margin-bottom: 16px;
}

Благодаря этому CSS-коду в каждой строке будет четыре карточки. Вот один из возможных способов настройки расстояния между ними:

.grid__item {
    flex-basis: calc(25% - 10px);
    margin-left: 10px;
    margin-bottom: 16px;
}

Благодаря использованию CSS-функции calc() внешний отступ вычитается из flex-basis. Как видите, это не такое уж и простое решение. Я, на самом деле, предпочитаю следующее:

  • Настроить у элемента сетки свойство padding-left.
  • Настроить у родительского элемента отрицательный внешний отступ margin-left с тем же значением, что и у padding-left.

Я узнал об этом методе много лет назад, прочитав здесь какую-то статью, название которой уже забыл (если знаете о том, что это за статья — пожалуйста дайте мне знать).

.grid--4 {
    display: flex;
    flex-wrap: wrap;
    margin-left: -10px;
}

.grid__item {
    flex-basis: 25%;
    padding-left: 10px;
    margin-bottom: 16px;
}

Причина, по которой я использовал здесь отрицательное значение для margin-left, заключается в том, что у первой карточки есть свойство padding-left, которое, в реальности, не нужно. В результате я перемещаю элемент-обёртку влево и избавляюсь от ненужного пространства.

→ Вот рабочий пример

Ещё одна похожая идея заключается в использовании внутренних отступов и отрицательных внешних отступов. Вот — пример с сайта Facebook.

Внутренние и внешние отступы

Вот CSS-код, иллюстрирующий эту идею:

.wrapper {
    margin-left: -4px;
    margin-right: -4px;
}

.story {
    padding-left: 4px;
    padding-right: 4px;
}

▍Расстояния в сеточных макетах — CSS Grid

А теперь — самое приятное! В макетах, основанных на CSS Grid, расстояния между элементами очень удобно настраивать, используя свойство grid-gap. Кроме того, можно не беспокоиться о ширине элементов и о нижних внешних границах. CSS Grid-макет берёт на себя заботы обо всём этом.

.grid--4 {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-gap: 1rem;
}

Вот и всё. Полагаю, никто не станет спорить с тем, что настройка Grid-макетов легче и понятнее, чем настройка Flexbox-макетов.

▍Настройка расстояния между элементами только тогда, когда это необходимо

В Grid-макетах мне чрезвычайно нравится то, что свойство grid-gap применяется лишь в том случае, когда между элементами должно быть некое расстояние. Взглянем на следующий макет.

Макет сетки, в которой элементы в мобильной среде расположены вертикально, а в настольной — горизонтально

Есть раздел сайта с двумя карточками. Мне нужно, чтобы они были бы разделены и в мобильной среде, при вертикальном расположении карточек, и в настольной, при горизонтальном их расположении. Без CSS Grid такой гибкости макета достичь невозможно. Взгляните на следующий код:

.card:not(:last-child) {
    margin-bottom: 16px;
}

@media (min-width: 700px) {
    .card:not(:last-child) {
        margin-bottom: 0;
        margin-left: 1rem;
    }
}

Не очень-то удобно. Правда? А как насчёт следующего стиля?

.card-wrapper {
    display: grid;
    grid-template-columns: 1fr;
    grid-gap: 1rem;
}

@media (min-width: 700px) {
    .card-wrapper {
        grid-template-columns: 1fr 1fr;
    }
}

Дело сделано! И устроено всё значительно проще.

▍Работа с нижним внешним отступом

Предположим, что у нас имеются следующие компоненты, расположенные друг над другом. У каждого из них настроен нижний внешний отступ.

Набор компонентов, расположенных горизонтально

Обратите внимание на то, что нижний внешний отступ имеется и у последнего элемента. А это неправильно, так как отступы должны присутствовать лишь между элементами.

Исправить эту проблему можно, прибегнув к одному из решений, которые мы сейчас разберём.

Решение №1: CSS-селектор :not

.element:not(:last-child) {
    margin-bottom: 16px;
}

Решение №2: комбинация соседних элементов одного уровня

.element + .element {
    margin-top: 16px;
}

Анализ решений

Хотя решение №1 кажется более привлекательным, у него есть следующие недостатки:

  • Оно приводит к проблемам с CSS-специфичностью. Его нельзя переопределить до тех пор, пока используется селектор :not.
  • Оно неприменимо в случаях, когда имеется более чем один столбец элементов. Это проиллюстрировано ниже.

Два столбца элементов и проблема решения №1

Если говорить о решении №2, то его применение не приводит к возникновению проблем со специфичностью. Правда, это решение тоже подходит лишь в тех случаях, когда речь идёт об одном столбце элементов.

В этой ситуации лучше всего прибегнуть к решению по удалению ненужного пространства путём добавления отрицательного внешнего отступа к родительскому элементу:

.wrapper {
    margin-bottom: -16px;
}

Здесь происходит следующее. Благодаря такой настройке элемент смещается вниз на расстояние, равное заданному внешнему отступу. Но тут следует проявлять осторожность и не задать такой внешний отступ при использовании которого элементы бы перекрылись.

▍Компонент-карточка

Теперь хочу подробно обсудить настройки компонентов-карточек. Возможно, в итоге у меня получится целая книга об этом. Здесь же я рассмотрю универсальный паттерн настройки карточек и расскажу о том, как ими управлять.

Компонент-карточка (если вам захотелось есть — извиняюсь)

Подумайте о том, где именно в этой карточке используется настройка расстояний между элементами и их частями. Вот мой ответ на этот вопрос.

Внутренние и внешние отступы

Вот разметка:

<article class="card">
    <a href="#">
      <div class="card__thumb"><img src="food.jpg" alt=""></div>
      <div class="card__content">
        <h3 class="card__title">Cinnamon Rolls</font></h3>
        <p class="card__author">Chef Ahmad</p>
        <div class="card__rating"><span>4.9</span></div>
        <div class="card__meta"><!-- --></div>
      </div>
    </a>
</article>

Вот стиль класса card__content:

.card__content {
    padding: 10px;
}

Благодаря установленному здесь внутреннему отступу будет настроено смещение для всех дочерних элементов. Затем настраиваем внешние отступы:

.card__title,
.card__author,
.card__rating {
  margin-bottom: 10px;
}

Настраивая разделение оценки и сведений, я использовал границу:

.card__meta {
    padding-top: 10px;
    border-top: 1px solid #e9e9e9;
}

Но тут мы сталкиваемся с проблемой! Граница не привязана к краям, что происходит из-за того, что у родительского элемента с классом card__content настроен внутренний отступ.

Разделитель не привязан к краю

Вы, пожалуй, уже догадались о том, что нам тут помогут отрицательные отступы:

.card__meta {
    padding-top: 10px;
    border-top: 1px solid #e9e9e9;
    margin: 0 -10px;
}

Но и тут снова что-то пошло не так. Теперь текст прилип к краю карточки.

Разделитель в норме, но содержимое карточки расположено неправильно

Для того чтобы решить эту проблему, нужно настроить левый и правый внутренние отступы для содержимого карточки.

.card__meta {
    padding: 10px 10px 0 10px;
    border-top: 1px solid #e9e9e9;
    margin: 0 -10px;
}

Карточка настроена так, как нужно

→ Вот пример

▍Содержимое статей

Я уверен в том, что то, о чём мы будем тут говорить, представляет собой очень и очень сильно распространённую ситуацию. Дело тут в том, что содержимое статей обычно поступает на страницы из CMS (Content Management System — система управления контентом), или генерируется автоматически на основе Markdown-файлов. Здесь нельзя указывать классы элементов.

Рассмотрим следующий пример, в котором представлена разметка, содержащая смесь из заголовков, абзацев и изображений.

<div class="wrapper">
  <h1>Spacing Elements in CSS</h1>
  <p><!-- content --></p>
  <h2><font color="#3AC1EF">Types of Spacing</font></h2>
  <img src="spacing-1.png" alt="">
  <p><!-- content --></p> 
  <p><!-- content --></p> 
  <h2><font color="#3AC1EF">Use Cases</font></h2>
  <p><!-- content --></p> 
  <h3><font color="#3AC1EF">▍Card Component</font></h3> 
  <img src="use-case-card-2.png" alt="">
</div>

Для того чтобы привести это всё к приличному виду, расстояния между элементами должны быть единообразными и должны использоваться ответственно. Работая над данным примером я позаимствовал некоторые стили с type-scale.com.

h1, h2, h3, h4, h5 {
  margin: 2.75rem 0 1.05rem;
}

h1 {
  margin-top: 0;
}

img {
  margin-bottom: 0.5rem;
}

Вот схема страницы с текстом статьи.

Схема страницы и применение свойств margin-top и margin-bottom

Если за элементом <p> следует заголовок, например — заголовок Types of Spacing, то свойство margin-bottom элемента <p> будет проигнорировано. Это, как вы можете догадаться, является следствием схлопывания внешних отступов.

→ Вот пример

▍Внешние отступы, применяемые в зависимости от обстоятельств

Взгляните на следующий макет.

Элементы в нормальном состоянии и в ситуации нехватки места

Элементы не очень хорошо выглядят в том случае, когда они находятся друг к другу слишком близко. Я создал этот макет с использованием Flexbox. Эта методика называется «Alignment Shifting Wrapping» (Выравнивание Сдвиг Перенос). Я узнал о её названии отсюда.

.element {
    display: flex;
    flex-wrap: wrap;
}

В результате применения этой методики осуществляется перенос строк в том случае, если область просмотра меньше определённого предела. Вот как это выглядит.

Дочерние элементы находятся на новых строках

Здесь нужно разобраться с промежуточной ситуацией, в которой два элемента всё ещё находятся рядом друг с другом, но расстояние между ними равно нулю. В таком случае я предпочитаю прибегать к свойству margin-right, что не даёт элементам касаться друг друга и ускоряет срабатывание flex-wrap.

Элементы не касаются друг друга

▍CSS-свойство writing-mode

Сначала процитируем MDN: «Свойство writing-mode устанавливает горизонтальное или вертикальное положение текста, а также — направление блока».

Размышляли когда-нибудь о том, как должны вести себя внешние отступы в том случае, когда они используются с элементом, свойство writing-mode которого отличается от стандартного? Рассмотрим следующий пример.

Карточка с вертикальным заголовком

Вот стили:

.wrapper {
    /* Для того чтобы заголовок и карточка рецепта были бы расположены на одной строке */
    display: flex;
}

.title {
    writing-mode: vertical-lr;
    margin-right: 16px;
}

Заголовок повёрнут на 90 градусов. Между ним и изображением должно быть пустое пространство. Как оказалось, свойство margin-right отлично показывает себя при разных значениях свойства writing-mode.

→ Вот пример

Полагаю, мы рассмотрели достаточно сценариев использования отступов. Теперь рассмотрим некоторые интересные концепции.

Инкапсуляция компонентов

В больших дизайн-системах содержится множество компонентов. Логично ли будет настраивать их внешние отступы?

Рассмотрим следующий пример.

Кнопки

<button class="button">Save Changes</button>
<button class="button button-outline">Discard</button>

Где нужно настраивать расстояния между кнопками? Нужно ли настраивать какие-то свойства левой или правой кнопки? Может, можно воспользоваться комбинацией соседних элементов одного уровня?

.button + .button {
    margin-left: 1rem;
}

Ничего хорошего в этом нет. А что если имеется лишь одна кнопка? А как это будет работать на мобильном устройстве, в том случае, когда кнопки расположены по вертикали, а не по горизонтали? В общем, тут перед нами встаёт множество сложных вопросов.

▍Использование абстрагированных компонентов

Решением вышеозначенных проблем является применение абстрагированных компонентов, которые используются для размещения в них других компонентов. Это, как сказано здесь, что-то вроде перемещения ответственности за управление отступами на родительский элемент. Переосмыслим предыдущий пример в свете этой идеи.

Родительские и дочерние компоненты

<div class="list">
    <div class="list__item">
        <button class="button">Save Changes</button>
    </div>
    <div class="list__item">
        <button class="button button-outline">Discard</button>
    </div>
</div>

Обратите внимание на то, что тут присутствуют элементы-обёртки. Каждая кнопка обладает собственной обёрткой.

.list {
    display: flex;
    align-items: center;
    margin-left: -1rem; /* Убирает левый внешний отступ первого элемента */
}

.list__item {
    margin-left: 1rem;
}

Вот и всё! И более того — эту концепцию легко применить к любому JavaScript-фреймворку. Например:

<List>
  <Button>Save Changes</Button>
  <Button outline>Discard</Button>
</List>

А используемый JS-инструмент должен поместить каждый элемент в собственную обёртку.

Компоненты, используемые в качестве разделителей

Если вы сомневаетесь в том, что прочли заголовок правильно — не сомневайтесь. Речь идёт о компонентах, используемых в качестве разделителей. В частности, тут я ссылаюсь на эту статью, в которой обсуждается концепция, в соответствии с которой избегают использования внешних отступов и применяют вместо них компоненты-разделители.

Представим, что в некоем разделе сайта нужен левый внешний отступ размером 24px. При этом к отступу выдвигаются следующие требования:

  • Внешний отступ не должен настраиваться непосредственно у компонента, так как он является частью уже созданной дизайн-системы.
  • Отступ должен быть гибким. На одной странице он может иметь размер X, а на другой — размер Y.

Я впервые заметил этот приём, исследуя новый дизайн Facebook.

Элемент-разделитель в дизайне Facebook

Здесь в качестве элемента-разделителя используется <div> с встроенным стилем width: 16px. Его единственная цель — добавление пустого пространства между левым элементом и элементом-контейнером.

Вот цитата из данной методички по React: «Но в реальном мире мы нуждаемся в пространствах, задаваемых за пределами компонентов, для компоновки компонентов в страницы и сцены. Именно здесь настройки внешних отступов и пробираются в код компонентов для настройки расстояний между компонентами при их компоновке».

Я с этим согласен. В большой дизайн-системе нерациональным будет добавление к компонентам внешних отступов. Это, в результате, приведёт к не очень хорошо выглядящему коду.

▍Проблемы компонентов-разделителей

Теперь, когда вы ознакомились с идеей компонентов-разделителей, давайте поговорим о некоторых проблемах, вполне ожидаемых, которые могут возникнуть при работе с ними. Вот вопросы об этом, над которыми я размышлял:

  • Как компонент-разделитель занимает место в родительском компоненте? Как он ведёт себя в горизонтальных и вертикальных макетах? Например — как такой компонент разделит компоненты, расположенные вертикально и горизонтально?
  • Нужно ли стилизовать эти компоненты, основываясь на свойстве display компонента-родителя (Flexbox, Grid)?

Разберём эти вопросы.

▍Размеры компонентов-разделителей

Можно создать компонент-разделитель, принимающий различные параметры. Я — не JavaScript-разработчик, но думаю, что это то, что называется «свойствами» (props). Рассмотрим следующий пример, взятый отсюда.

Имеется компонент-разделитель, расположенный между компонентами Header и Section.

<Header />
<Spacer mb={4} />
<Section />

А вот — несколько иная ситуация. Тут разделитель используется для создания автоматически настраиваемого расстояния между логотипом (компонентом Logo) и областью навигации, представленной компонентами Link.

<Flex>
  <Logo />
  <Spacer m="auto" />
  <Link>Beep</Link>
  <Link>Boop</Link>
</Flex>

Может показаться, что реализовать такой разделитель средствами CSS очень просто, и что для этого достаточно воспользоваться конструкцией justify-content: space-between. Но что если дизайн понадобится поменять? В таком случае придётся менять стилизацию.

Взгляните на следующий пример. Выглядит ли этот код гибким?

<Flex>
  <Logo />
  <Link>Beep</Link>
  <Link>Boop</Link>
  <Spacer m="auto" />
  <Link>Boop</Link>
</Flex>

В этом случае стилизация нуждается в изменении.

В том, что касается размеров, можно сказать, что размер разделителя может быть настроен на основе размеров родительского элемента. В вышеприведённом случае, возможно, есть смысл создать свойство grow, которое в CSS устанавливается в значение flex-grow: 1.

<Flex>
  <Spacer grow="1" />
</Flex>

▍Использование псевдоэлементов

Ещё одна идея, которая пришла мне в голову, заключается в использовании псевдоэлементов для создания разделителей.

.element:after {
    content: "";
    display: block;
    height: 32px;
}

Может быть, у нас есть возможность сделать разделителем псевдоэлемент, а не использовать для этого отдельный элемент? Например:

<Header spacer="below" type="pseudo" length="32">
  <Logo />
  <Link>Home</Link>
  <Link>About</Link>
  <Link>Contact</Link>
</Header>

До сих пор я не пользовался компонентами-разделителями в своих проектах. Но я ищу сценарии, в которых они могли бы мне пригодиться.

Математические CSS-функции min(), max(), clamp()

Можно ли сделать отступы динамическими? Например, можно ли воспользоваться таким отступом, минимальный и максимальный размер которого зависит от ширины области просмотра? Я могу ответить на этот вопрос положительно. CSS-функции, в соответствии с данными CanIUse, поддерживаются всеми ведущими браузерами.

Вспомним о Grid-макетах и поговорим о том, как в них может использоваться динамическая настройка отступов.

.wrapper {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-gap: min(2vmax, 32px);
}

Конструкция min(2vmax, 32px) означает следующее: использовать расстояние, равное 2vmax, но не превышающее 32px.

→ Вот видеодемонстрация такого макета

→ Вот пример.

Такая гибкость поистине удивительна. Она даёт нам множество возможностей по созданию динамических и гибких макетов веб-страниц.

Итоги

В этом материале мы рассмотрели особенности настройки расстояний между элементами веб-страниц с использованием CSS и поговорили об управлении внутренним пространством элементов. Надеемся, вам пригодится то, о чём вы сегодня узнали.

Уважаемые читатели! Какими средствами для настройки расстояния между элементами веб-страниц вы пользуетесь чаще всего?

CSS-свойство word-spacing устанавливает длину пробела между словами и между тегами.

Интерактивный пример

Синтаксис

/* Значение ключевым словом */
word-spacing: normal;

/* <length> значения */
word-spacing: 3px;
word-spacing: 0.3em;

/* <percentage> значения  */
word-spacing: 50%;
word-spacing: 200%;

/* Глобальные значения */
word-spacing: inherit;
word-spacing: initial;
word-spacing: unset;

Значения

normal

Нормальный интервал между словами, определённый текущим шрифтом и/или браузером.

length

Определяет дополнительный интервал в дополнение к внутреннему интервалу между словами, определяемому шрифтом.

percentage

Определяет дополнительный интервал как процент от предварительной ширины символа.

Формальный синтаксис

word-spacing = 
normal | (en-US)
<length>

Пример

HTML

<div id="mozdiv1">Here are many words...</div>
<div id="mozdiv2">...and many more!</div>

CSS

#mozdiv1 {
  word-spacing: 15px;
}

#mozdiv2 {
  word-spacing: 5em;
}

Проблемы доступности

Большое положительное или отрицательное значение word-spacing может сделать предложения, к которым применяется стиль, нечитаемыми. Для текста, стилизованного с очень большими положительными значениями, слова будут так далеки друг от друга, что он больше не будет казаться предложением. Для текста, стилизованного с очень большими отрицательными значениями, слова будут перекрывать друг от друга до точки, где начало и конец каждого слова будут неразличимы.

Разборчивый word-spacing должен быть определён в каждом конкретном случае, так как различные семейства шрифтов имеют различную ширину символов. Нет ни одного значения, которое может обеспечить для всех семейств шрифтов автоматическое сохранение разборчивости.

  • MDN Understanding WCAG, Guideline 1.4 explanations
  • Understanding Success Criterion 1.4.8 | W3C Understanding WCAG 2.0

Спецификации

Specification
CSS Text Module Level 3
# word-spacing-property
Начальное значение normal
Применяется к все элементы. Это также применяется к ::first-letter и ::first-line.
Наследуется да
Проценты зависит от ширины символа
Обработка значения абсолютная length
Animation type длина

Поддержка браузерами

BCD tables only load in the browser

If I do the following:

documentclass{article}
usepackage[T1]{fontenc}
usepackage{setspace}
usepackage{enumitem}
setstretch{2}
setlist[itemize]{topsep=.1em,itemsep=.1em,parsep=0em,partopsep=0em}
setlist*[itemize]{first=setstretch{1}}    % This undesirably affects the spacing before the list

begin{document}

deftext{test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph}

text

begin{itemize}
item one
item two
item three
end{itemize}

text

end{document}

Then I get:

bad spacing between list and previous paragraph

But that is not what I want. I want to keep the spacing just before the list unchanged, but change only the spacing between lines of the list. Is there any way I can automatically achieve this for all itemize/enumerate lists, regardless of the interline-spacing of their surrounding text?

asked Apr 13, 2022 at 18:02

user21820's user avatar

user21820user21820

8587 silver badges17 bronze badges

10

On way is simply to adjust for the changed baseline:

enter image description here

documentclass{article}
usepackage[T1]{fontenc}
usepackage{setspace}
usepackage{enumitem}
setstretch{2}
setlist[itemize]{topsep=.1em,itemsep=.1em,parsep=0em,partopsep=0em}
setlist*[itemize]{first=vspace{baselineskip}setstretch{1}vspace{-baselineskip}}    % This undesirably affects the spacing before the list

begin{document}

deftext{test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph}

text

begin{itemize}
item one
item two
item three
end{itemize}

text

end{document}

answered Apr 13, 2022 at 19:43

David Carlisle's user avatar

David CarlisleDavid Carlisle

701k64 gold badges1508 silver badges2342 bronze badges

7

How about this, using the before and after keys?

    documentclass{article}
    usepackage[T1]{fontenc}
    usepackage{setspace}
    usepackage{enumitem}
    setstretch{2}
    setlist[itemize]{topsep=.1em, itemsep=.1em,parsep=0em, partopsep=0em}
    setlist[itemize]{before=begin{singlespace}, after=end{singlespace}}

    begin{document}

    deftext{test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph}

    text

    begin{itemize}
    item onetext
    item two
    item three
    end{itemize}

    text

    end{document} 

enter image description here

answered Apr 13, 2022 at 19:02

Bernard's user avatar

BernardBernard

267k13 gold badges144 silver badges347 bronze badges

4

After a commenter suggested singlespacing, I looked at its definition and I think the following works in all cases:

documentclass{article}
usepackage[T1]{fontenc}
usepackage{setspace}
usepackage{enumitem}
setstretch{2}
setlist[itemize,enumerate]{topsep=.1em,itemsep=.1em,parsep=0em,partopsep=0em}
setlist*[itemize,enumerate]{first=vskipbaselineskipsetstretch{1.1}vspace{-baselineskip}}

begin{document}

deftext{test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph test paragraph}

text

begin{itemize}
item one
item two
item three
    begin{enumerate}
    item a
    item b
    end{enumerate}
item four
end{itemize}

text

end{document}

The 1.1 can obviously be changed arbitrarily. It produces:

proper spacing before list

answered Apr 13, 2022 at 20:04

user21820's user avatar

user21820user21820

8587 silver badges17 bronze badges

Понравилась статья? Поделить с друзьями:
  • Как изменить source list
  • Как изменить source image unity через скрипт
  • Как изменить soc voltage на gigabyte
  • Как изменить smx файл
  • Как изменить smsc