Додавання об'єктів HTML за допомогою вмісту CSS


1013

Як ви використовуєте властивість CSS content для додавання об'єктів HTML ?

Використовуючи щось подібне, просто друкується   на екран замість нерозривного простору:

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

5
В іншому сенсі додавання вмісту за допомогою CSS порушує розділення проблем, CSS призначений лише для визначення стилів. Бажано уникати з точки зору доступності, оскільки відключення CSS накручує всю позначку вгору. Однак приємно додавати зображення за допомогою цієї техніки.
questzen

95
Це залежить. У цьому випадку це для презентації. Це "порушить" SoC ставити ">" в html
mathieu

2
Лише питання, чи вважаєте ви, що це було б краще, як упорядкований список? Я маю на увазі, це список із замовленням, чи не так?
алекс

3
@questzen - Я думаю, що цілком прийнятно (і в хорошій формі) використовувати CSS :afterдля встановлення, наприклад, індикатора сортування asc / desc у відсортованому стовпчику.
Джош М.

9
Я помітив, що люди зійшли з розуму від принципу SoC. Небо, який зміст є для вас знаком ">" ?! Мати Милосердя! це лише піктограма в цьому контексті, віджет, куля, ви її називаєте. Для мене вміст - це те, що я хотів би шукати.
user776686

Відповіді:


1063

Ви повинні використовувати униклий унікод:

Подібно до

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

Більше інформації на сайті: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/


57
Провідні нулі зайві, див . Рядки CSS 2.1: 4.3.7 . '>\a0'достатньо.
PointedEars

18
@dlamblin Крім того, щоб уникнути того, щоб символи надійно інтерпретувалися як частина послідовності евакуації , додайте стандартний пробіл: '>\a0 bc'відображається > bc.
PointedEars

18
Мій інструмент amp-what.com/#q=%3E забезпечує режим "CSS". Виберіть "css" внизу сторінки. Згідно з посиланням CSS, зазначеним вище, вони повинні бути обмеженими простором, коли вони неоднозначні.
ndp

@mathieu Чи можете ви використовувати "вміст" для додавання зображення замість цього? Цікаво
weia design

1
@Adam, ні, якщо ви хочете додати зображення, використовуйте "background-image" та відображайте: inline-block; і ширина: 123px; висота: 123px; (використовуйте точну ширину / висоту)
Nathan JB

177

CSS - це не HTML.  є іменованою посиланням символів у HTML; еквівалентний десятковій цифровій посиланні символів  . 160 є десяткової точкою код з NO-BREAK SPACEсимволу в Unicode (або UCS-2 , см HTML 4.01 Specification ). Шестнадцяткове подання цієї кодової точки дорівнює U + 00A0 (160 = 10 × 16 1 + 0 × 16 0 ). Ви знайдете це у кодах діаграм та базі символів Unicode .

У CSS для таких символів потрібно використовувати послідовність виходу Unicode, яка базується на шістнадцятковому значенні точки коду символу. Тому потрібно писати

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

Це працює до тих пір, поки послідовність відходу стає останньою у рядковому значенні. Якщо символи слідують, є два способи уникнути неправильного тлумачення:

а) (згадується іншими) Використовуйте рівно шість шістнадцяткових цифр для послідовності втечі:

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

b) Додайте один символ пробілу (наприклад, пробіл) після послідовності відходу:

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

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

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

Підхід білого простору ( '\a0 foo') має такі переваги перед шестизначним підходом ( '\0000a0foo'):

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

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

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

- або зробити це явним:

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

Докладніше див. CSS 2.1, розділ "4.1.3 Символи та регістр" .


+1 для трюку "відображення пробілу після втеченого символу", але потрібно згадати, що додавання nbsp, а потім пробіл перемагає мету nbsp;)
TWiStErRob

@TWiStErRob Ні, комбінація символу пробілу без розриву з подальшим символом пробілу (або навпаки) відображатиме пробіл шириною двох символів пробілу, тоді як два чи більше дослівних символів пробілу відображатимуть лише пробіл ширина одного символу пробілу, як аналізатор двигуна компонування згортається послідовно розбиваючи пробіл (включаючи новий рядок) на один пробіл, якщо white-spaceвластивість CSS не оголошує інше.
Вказані вуха

так, я знаю про збій, але суть nbsp полягає в тому, що це не порушує, символьні символи також не забиваються за замовчуванням, тому додавати пробільний ряд поруч із нерозривним не має сенсу, кінцевий результат буде ламаючи. Я говорю за white-space: normal.
TWiStErRob

@TWiStErRob Будь ласка уважно прочитайте мою відповідь. Це приклад для "відображення [ing] пробілу після символу, який уникнув". Оригінальний код мав NO-BREAK SPACEхарактер, тому я використовував для нього послідовність втечі. Ви можете вибрати будь-яку іншу послідовність втечі; якщо потрібно, ви також можете заявити white-space: nowrap.
Вказане вуха

81

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

Що вам потрібно зробити, це використовувати уникнутий Unicode. Незважаючи на те, що вам сказали, \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 and millikin:

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

Це переводить B в шістнадцяткових символів, що втекли. Те саме відбувається з 0-9a-fA-F.


6
Вам просто потрібно поставити пробіл після послідовності втечі, як зазначено: '\a0 Break'. не'\0000a0Break' є надійним.
PointedEars

@PointedEars Цікаво, то тоді цей простір є термінатором і не входить у рядок?
dlamblin

2
Див. CSS 2.1, розділ "4.1.3 Символи та регістр" . Що також показує, що ваш підхід повинен бути надійним для CSS 2.1. Але я вважаю, що підхід до пробілів є більш чистим (сумісний вгору) і має менший слід.
Вказане вуха

47

У CSS потрібно використовувати послідовність виходу Unicode замість HTML-об'єктів. Це ґрунтується на шістнадцятковому значенні символу.

Я виявив, що найпростішим способом перетворення символу в їх шістнадцятковий еквівалент є, наприклад, від ▾ ( ▾) до\25BE - використовувати калькулятор Microsoft =)

Так. Увімкніть режим програмістів, увімкніть десяткову систему, введіть 9662, а потім перемкніть на шістнадцятковий і отримаєте 25BE. Тоді просто додайте зворотний нахил \на початок.


4
Незважаючи на те, що це абсолютно корисно, він насправді не відповідає на питання, тому це було б краще, як коментар до питання.
dlamblin

1
Чорна стрілка \25B8 ▸ ▸правої точки (▸ ) ftw. Також див. En.wikipedia.org/wiki/Geometric_Shapes для отримання додаткової інформації.
Джоел Пурра

2 Джоел Пурра, читайте Вікі більше часу. ви неправильно сприйняли символи.
netgoblin

@netgoblin: як так? Мені просто подобається чорна стрілка, спрямована праворуч.
Джоел Пурра

1
Я використовую цей graphemica.com, де ви можете отримати десятковий, шістнадцятковий і так далі
Майк

34

Використовуйте шістнадцятковий код для нерозривного місця. Щось на зразок цього:

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

17

Є спосіб вставити nbsp- відкрити CharMap та скопіювати символ 160 . Однак у цьому випадку я б, мабуть, обклав це накладкою, як ось це:

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

Можливо, вам знадобиться встановити сухарі display:inline-blockабо щось таке.


4
Замість того, щоб вставляти nbsp, я би дотримувався використання об'єкта, щоб майбутнім виконавцям було зрозуміло, що він відрізняється від простору.
nickf

2
з іншого боку, ви не робите панірувальні сухарі, як вони повинні бути, тобто: символ> повинен бути врівень з панірувальним сухарем, а не лише візуальним стилем. принаймні, якщо ви хочете, щоб Google побачив ваші сухарі та перерахував їх під своїм переліком у пошуковій системі.
Дементік

10

Наприклад :

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

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

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

Результат: ↬

Це воно :)


я використовував вміст: '\ 10095'; . Але вихід не відображається. замість піктограми він показує прямокутник.
капіл

0

Я знаю, що це дуже стара публікація, але якщо інтервал все пізніше, чому не просто:

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

Я раніше використовував цей метод. У моєму тестуванні він ідеально підходить для інших ліній з ">" стороною.


-2

Ось два способи:

  • В HTML:

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

Це призведе до ⛱

  • В Css:

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

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

Це також призводить до ⛱


Правильна відповідь .ics :: раніше {content: '\ 9969';}
Марко Скарнатто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.