Добавление объектов HTML с использованием содержимого CSS

Как использовать свойство CSS content для добавления объектов HTML?

Использование чего-то вроде этого просто выводит на экран   вместо неразрывного пробела:

.breadcrumbs a:before {
    content: ' ';
}

person nickf    schedule 10.10.2008    source источник
comment
В другом смысле добавление контента с использованием CSS нарушает разделение задач, CSS предназначен только для определений стилей. С точки зрения доступности предпочтительнее избегать, так как отключение CSS портит всю разметку. Тем не менее, неплохо добавлять изображения, используя эту технику.   -  person questzen    schedule 10.10.2008
comment
Это зависит. В данном случае это сделано для презентационных целей. Было бы нарушением SoC помещать ›в html   -  person mathieu    schedule 10.10.2008
comment
Просто вопрос, как вы думаете, было бы лучше в виде упорядоченного списка? Я имею в виду, это список с порядком, не так ли?   -  person alex    schedule 20.03.2009
comment
Верно, но ... там еще порядок. Три - это после двух, после одного. Для использования OL потребуется больше разметки и больше стиля.   -  person nickf    schedule 20.03.2009
comment
@questzen - Я думаю, что совершенно приемлемо (и неплохо) использовать CSS :after для установки, например, индикатора сортировки asc / desc в отсортированном столбце.   -  person Josh M.    schedule 29.04.2014
comment
Я заметил, что люди сходят с ума по принципу SoC. Боже, какой контент для вас ›знак ?! Сжалься! это просто значок в этом контексте, виджет, пуля, вы называете это. Для меня контент - это то, что я хотел бы сделать доступным для поиска.   -  person user776686    schedule 09.05.2014
comment
Полезная ссылка для преобразования ваших значков или символов в значение CSS: evotech.net/articles/testjsentities.html   -  person user2310852    schedule 16.10.2017
comment
Я отредактировал вопрос и пару ответов, чтобы упростить вопрос об объектах html, поскольку это был фактический вопрос здесь, и удалил ссылку на странный вариант использования, который сбивал с толку все ответы (добавление того, что выглядело как синтаксис CSS, который был просто больше знака из-за близости к другим необычным escape-последовательностям CSS)   -  person Charlie    schedule 23.04.2018


Ответы (9)


Вы должны использовать экранированный юникод:

Нравиться

.breadcrumbs a:before {
    content: '\0000a0';
}

Дополнительная информация на: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/

person mathieu    schedule 10.10.2008
comment
Начальные нули излишни, см. CSS 2.1: 4.3.7 Strings . '>\a0' достаточно. - person PointedEars; 21.12.2011
comment
@dlamblin Далее, чтобы символы не интерпретировались как часть управляющей последовательности надежно, добавьте стандартный пробел: '>\a0 bc' отображается > bc. - person PointedEars; 21.12.2011
comment
Мой инструмент amp-what.com/#q=%3E предоставляет режим CSS. Выберите css внизу страницы. Согласно приведенной выше ссылке CSS, они должны быть разделены пробелами, если они неоднозначны. - person ndp; 21.02.2013
comment
@mathieu Можете ли вы вместо этого использовать "контент" для добавления изображения? Просто интересуюсь - person weia design; 11.07.2013
comment
@ Адам, нет, если вы хотите добавить изображение, используйте background-image и display: inline-block; и ширина: 123px; height: 123px; (используйте точную ширину / высоту) - person Nathan J.B.; 10.10.2013
comment
онлайн-конвертер: r12a.github.io/apps/conversion (используйте результат экранирования CSS) - person Evgenii; 21.01.2016
comment
Для тех, кто собирается использовать два a0 для более широкого пространства, попробуйте \2002 для n-пробела или \2003 для m-пробела. По ширине похож на n-тире и mdash. - person cdaddr; 14.03.2018
comment
как мы можем использовать такой кастомный HTML? например, я хочу использовать изображение svg в качестве содержимого в нескольких местах, можно ли это сделать вот так? - person user2595861; 16.10.2020

CSS - это не HTML.   - это именованная ссылка на символ в HTML; эквивалент десятичной цифровой символьной ссылки  . 160 - десятичная кодовая точка символа NO-BREAK SPACE в Unicode (или UCS-2; см. Спецификация HTML 4.01). Шестнадцатеричное представление этой кодовой точки - U + 00A0 (160 = 10 × 16 1 + 0 × 16 0). Вы найдете это в таблицах кодов Unicode и База данных символов.

В CSS вам необходимо использовать escape-последовательность Unicode для таких символов, которая основана на шестнадцатеричном значении кодовой точки символа. Итак, вам нужно написать

.breadcrumbs a:before {
  content: '\a0';
}

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

a) (упомянутые другими) Используйте ровно шесть шестнадцатеричных цифр для escape-последовательности:

.breadcrumbs a:before {
  content: '\0000a0foo';
}

б) Добавьте один пробел (например, пробел) после escape-последовательности:

.breadcrumbs a:before {
  content: '\a0 foo';
}

(Поскольку f - шестнадцатеричная цифра, \a0f в противном случае означало бы здесь GURMUKHI LETTER EE или ਏ, если у вас есть подходящий шрифт.)

Разделительный пробел будет проигнорирован, и он будет отображаться  foo, где отображаемое пространство здесь будет символом NO-BREAK SPACE.

Подход с использованием пробелов ('\a0 foo') имеет следующие преимущества перед подходом с шестью цифрами ('\0000a0foo'):

  • его легче вводить, потому что начальные нули не нужны, и цифры не нужно считать;
  • его легче читать, потому что между escape-последовательностью и последующим текстом есть пробелы, и цифры не нужно подсчитывать;
  • он требует меньше места, потому что нули в начале не нужны;
  • он совместим снизу вверх, потому что кодовые точки поддержки Unicode за пределами U + 10FFFF в будущем потребуют изменения спецификации CSS.

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

.breadcrumbs a:before {
  content: '\a0  foo';
}

- или сделайте это явным:

.breadcrumbs a:before {
  content: '\a0\20 foo';
}

См. CSS 2.1, раздел «4.1.3 Символы и регистр» для подробностей.

person PointedEars    schedule 21.12.2011
comment
+1 для отображения пробела после уловки с экранированным символом, но следует упомянуть, что добавление nbsp, а затем пробела нарушает цель nbsp;) - person TWiStErRob; 28.12.2017
comment
@TWiStErRob Нет, комбинация неразрывного пробела, за которым следует разрывный пробел (или наоборот), отобразит пробел шириной примерно в два символа пробела, в то время как два или более дословные символы пробела будут отображать только пробел шириной одного символа пробела, поскольку синтаксический анализатор механизма компоновки сворачивает последовательные разбивающие пробелы (включая новую строку) в один символ пробела, если только _ 1_ свойство CSS утверждает иное. - person PointedEars; 23.01.2018
comment
да, я знаю о сворачивании, но суть nbsp в том, что он неразрывный, символы слов также не разрываются по умолчанию, поэтому добавление разрывающего пробела рядом с неразрывным не имеет смысла, конечный результат будет ломка. Я говорю за white-space: normal. - person TWiStErRob; 23.01.2018
comment
@TWiStErRob Пожалуйста, прочтите мой ответ внимательнее. Это пример для «отображения пробела после экранированного символа». В исходном коде был символ NO-BREAK SPACE, поэтому я использовал для него escape-последовательность. Вы можете выбрать любую другую escape-последовательность; при необходимости вы также можете объявить white-space: nowrap. - person PointedEars; 25.01.2018

Обновление: PointedEars упоминает, что правильной заменой для   во всех ситуациях css будет
'\a0 ', подразумевая, что пробел является ограничителем шестнадцатеричной строки и поглощается экранированной последовательностью. Далее он указал на это авторитетное описание, которое звучит как хорошее решение. к проблеме, которую я описал и исправил ниже.

Что вам нужно сделать, так это использовать экранированный юникод. Несмотря на то, что вам сказали, \00a0 не является идеальной заменой для   в CSS; так что постарайтесь:

content:'>\a0 ';          /* or */
content:'>\0000a0';       /* because you'll find: */
content:'No\a0 Break';    /* and */
content:'No\0000a0Break'; /* becomes No Break as opposed to below */

В частности, используя \0000a0 как  . Если вы попробуете, как предложили mathieu и millikin:

content:'No\00a0Break'   /* becomes No਋reak */

Он переводит B в шестнадцатеричные экранированные символы. То же самое происходит с 0-9a-fA-F.

person dlamblin    schedule 11.09.2009
comment
Вам просто нужно поставить пробел после escape-последовательности, как указано: '\a0 Break'. '\0000a0Break' ненадежно. - person PointedEars; 21.12.2011
comment
@PastedEars Интересно, значит, этот пробел является терминатором и не попадает в строку? - person dlamblin; 03.01.2012
comment
См. CSS 2.1, раздел 4.1.3 Символы и регистр. Это также показывает, что ваш подход ДОЛЖЕН быть надежным в соответствии с CSS 2.1. Но я считаю, что подход с пустым пространством чище (совместим с предыдущими версиями) и занимает меньше места. - person PointedEars; 03.01.2012

В CSS вам нужно использовать escape-последовательность Unicode вместо HTML Entities. Это основано на шестнадцатеричном значении символа.

Я обнаружил, что самый простой способ преобразовать символы в их шестнадцатеричный эквивалент, например, из ▾ (▾) в \25BE, - это использовать калькулятор Microsoft =)

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

person netgoblin    schedule 15.12.2011
comment
Хотя он полностью полезен, на самом деле он не отвечает на вопрос, поэтому было бы лучше в качестве комментария к вопросу. - person dlamblin; 04.01.2012
comment
Черная маленькая стрелка, указывающая вправо (▸ \25B8 ▸ ▸) ftw. Также см. en.wikipedia.org/wiki/Geometric_Shapes для получения дополнительной информации. - person Joel Purra; 23.04.2012
comment
2Джоэль Пурра, читайте больше времени вики. вы ошиблись в символах. - person netgoblin; 18.10.2012
comment
@netgoblin: как так? Мне просто нравится черная маленькая стрелка, указывающая вправо. - person Joel Purra; 14.04.2013
comment
Я использую этот graphemica.com, где вы можете получить десятичное, шестнадцатеричное и т. Д. - person Mike; 29.10.2018

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

.breadcrumbs a:before {
    content: '>\00a0';
}
person John Millikin    schedule 10.10.2008

Есть способ вставить nbsp - откройте CharMap и скопируйте символ 160. Однако в этом случае я бы, вероятно, выделил это отступом, например:

.breadcrumbs a:before { content: '>'; padding-right: .5em; }

Однако вам может потребоваться установить хлебные крошки display:inline-block или что-то в этом роде.

person Dare    schedule 05.12.2009
comment
Вместо того, чтобы вставлять nbsp, я бы предпочел использовать сущность, чтобы будущим сопровождающим было ясно, что она отличается от пространства. - person nickf; 06.12.2009
comment
с другой стороны, вы не используете панировочные сухари, как предполагалось, то есть: символ ›должен быть встроен в панировочные сухари, а не только визуальный стиль. по крайней мере, если вы хотите, чтобы Google увидел ваши хлебные крошки и перечислил их под вашим списком в поисковой системе. - person Rafael Herscovici; 25.01.2012
comment
правильно вставка разыскиваемого персонажа у меня сработала. Благодарность - person Michal - wereda-net; 17.11.2020

Например :

http://character-code.com/arrows-html-codes.php

Пример: если вы хотите выбрать своего персонажа, я выбрал "& # 8620" "& # x21ac" (мы используем значения HEX).

.breadcrumbs a:before {
    content: '\0021ac';
}

Результат: ↬

Вот и все :)

person Ferhat KOÇER    schedule 07.05.2015
comment
я использовал контент: '\ 10095'; . Но результат не отображается. вместо значка отображается прямоугольник. - person kapil; 04.12.2017

Я знаю, что это довольно старый пост, но если интервал - это все, что вам нужно, почему бы просто не:

.breadcrumbs a::before {
    content: '>';
    margin-left: 8px;
    margin-right: 8px;
}

Я использовал этот метод раньше. В моем тестировании он отлично сочетается с другими строками с символом ">".

person brian-welch    schedule 04.11.2017

Вот два способа:

  • В HTML:

    <div class="ics">&#9969;</div>

Это приведет к ⛱

  • В Css:

    .ics::before {content: "\9969;"}

с HTML-кодом <div class="ics"></div>

Это также приводит к ⛱

person Tarandeep Singh    schedule 06.10.2016
comment
Правильный ответ: .ics :: before {content: '\ 9969';} - person Marco Scarnatto; 08.01.2018
comment
Для HTML вам не нужен div class = ics. Вы можете просто сделать & # ‹number›;. Также обратите внимание, не является ли это шестнадцатеричным числом, и в этом случае вам нужно & # x ‹шестнадцатеричное число›; w3schools.com/html/html_symbols.asp - person Ryan Harlich; 11.02.2021