Добавление объектов HTML с использованием содержимого CSS - PullRequest
939 голосов
/ 10 октября 2008

Как использовать свойство CSS content для добавления html-сущностей?

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

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

Ответы [ 9 ]

993 голосов
/ 10 октября 2008

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

Как

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

Подробнее о: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/

158 голосов
/ 22 декабря 2011

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подробнее см. CSS 2.1, раздел "4.1.3 Символы и регистр" .

79 голосов
/ 11 сентября 2009

Обновление : 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 как  . Если вы попытаетесь, как предложили Матье и Милликин:

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

Он переводит Б в гексагональные экранированные символы. То же самое происходит с 0-9a-fA-F.

44 голосов
/ 15 декабря 2011

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

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

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

31 голосов
/ 10 октября 2008

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

.breadcrumbs a:before {
    content: '>\00a0';
}
16 голосов
/ 05 декабря 2009

Существует способ вставить nbsp - открыть CharMap и скопировать символ 160 . Тем не менее, в этом случае я бы, вероятно, поместил его с отступом, например:

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

Возможно, вам понадобится установить панировочные сухари display:inline-block или еще что-нибудь.

9 голосов
/ 07 мая 2015

Например:

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

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

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

Результат: ↬

Вот так:)

0 голосов
/ 04 ноября 2017

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

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

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

0 голосов
/ 06 октября 2016

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

  • В HTML:

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

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

  • In Css:

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

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

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

...