CSSコンテンツを使用したHTMLエンティティの追加


1013

CSS contentプロパティをどのように使用してHTMLエンティティを追加しますか?

このようなものを使用する と、改行しないスペースの代わりに画面に出力されます。

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

5
別の意味で、CSSを使用してコンテンツを追加することは、懸念の分離に違反します。CSSは、スタイル定義のみを目的としています。CSSを無効にするとマークアップ全体が台無しになるので、アクセシビリティの観点からは避けることをお勧めします。ただし、この手法を使用して画像を追加すると便利です。
questzen

95
場合によります。この場合は、プレゼンテーションを目的としています。SoCに「違反」して、htmlに「>」を
挿入します

2
ただ質問ですが、それは順序付けられたリストの方がいいと思いますか?つまり、注文のあるリストですね。
アレックス、

3
@questzen-CSS :afterを使用して、たとえば、ソートされた列にasc / descソートインジケーターを設定することは、完全に許容できる(そして適切な形式)だと思います。
Josh M. 14

9
私は人々がSoCの原理に夢中になっていることに気づきました。天国、あなたにとって ">"記号とはどのようなコンテンツですか?どうかご慈悲を!これは、このコンテキストの単なるアイコン、ウィジェット、箇条書きであり、名前を付けます。私にとってコンテンツは検索可能になりたいものです。
user776686 2014年

回答:


1063

エスケープされたユニコードを使用する必要があります:

お気に入り

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

詳細:http : //www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/


57
先頭のゼロは不必要です。CSS2.1:4.3.7文字列を参照してください。'>\a0'十分です。
PointedEars

18
@dlamblinさらに、文字がエスケープシーケンスの一部として確実に解釈されないようにするには、標準の空白を追加し'>\a0 bc'ます> bc
PointedEars

18
私のツールamp-what.com/#q=%3Eは「CSS」モードを提供します。ページの下部にある「css」を選択します。上記のCSS参照では、あいまいな場合はスペースで区切る必要があります。
ndp 2013

@mathieu代わりに 'content'を使用して画像を追加できますか?ただ不思議に思う
weiaの設計

1
@Adam、いいえ、画像を追加したい場合は、「background-image」とdisplay:inline-block;を使用してください。と幅:123px; 高さ:123px; (正確な幅/高さを使用)
Nathan JB

177

CSSはHTMLではありません。 HTMLの 名前付き文字参照です。10進数の文字参照と同等 です。160は、Unicode(またはUCS-2 ; HTML 4.01仕様を参照)での文字の10進コードポイントです。そのコードポイントの16進数表現はU + 00A0(160 = 10×16 1 + 0×16 0)です。あなたはそれをユニコードコードチャートキャラクターデータベースで見つけるでしょう。NO-BREAK SPACE

CSSでは、そのような文字にはUnicodeエスケープシーケンスを使用する必要があります。これは、文字のコードポイントの16進値に基づいています。だからあなたは書く必要があります

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

これは、エスケープシーケンスが文字列値の最後に来る限り機能します。文字が続く場合、誤解を避けるための2つの方法があります。

a)(他のユーザーが言及)エスケープシーケンスには正確に6桁の16進数を使用します。

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

b)エスケープシーケンスの後に空白文字(スペースなど)を1つ追加します。

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

fは16進数字なので、\a0fそれ以外の場合はGURMUKHI LETTER EEここを意味します。適切なフォントがある場合は)です。)

区切りの空白は無視され、これが表示されます foo。ここに表示されるスペースはNO-BREAK SPACE文字になります。

ホワイトスペースアプローチ('\a0 foo')には、6桁のアプローチ('\0000a0foo')よりも次のような利点があります。

  • 先行ゼロは不要であり、数字を数える必要がないため、を入力する方簡単です。
  • 読みやすいが、エスケープシーケンスと、次のテキストの間に空白がある、と数字をカウントする必要はありませんので、。
  • それはより少ないスペースを必要とする先行ゼロは必要ありませんので、。
  • それは上位互換将来的にU + 10FFFFを超えたUnicodeサポートのコード・ポイントは、CSS仕様の変更を必要とするので、。

したがって、エスケープ文字の後にスペースを表示するには、スタイルシートで2つのスペースを使用します–

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

–またはそれを明示的にする:

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

詳細については、CSS 2.1のセクション「4.1.3文字と大文字小文字の区別」を参照してください。


「エスケープされた文字の後にスペースを表示する」トリックの+1ですが、nbspを追加してからスペースを追加すると、nbspの目的が
無効になる

@TWiStErRobいいえ、改行しない空白文字に続いて改行する空白文字(またはその逆)の組み合わせは、2つの空白文字の幅のギャップを表示しますが、2つ以上の逐語的な空白文字は、レイアウトエンジンのパーサーとしての1つの空白文字の幅は、white-spaceCSSプロパティで特に宣言されていない限り、連続する改行空白(改行を含む)を1つの空白文字に折りたたみます。
PointedEars 2018年

うん、折りたたみについて知っていますが、nbspのポイントは、改行しないことです。単語文字もデフォルトでは改行しないので、改行しないスペースの横に改行スペースを追加しても意味がありません。最終結果は次のようになります。速報。私は話していwhite-space: normalます。
TWiStErRob 2018年

@TWiStErRob私の答えをもっと注意深く読んでください。「エスケープ文字の後にスペースを表示する」のです。元のコードにはNO-BREAK SPACE文字が含まれていたため、エスケープシーケンスを使用しました。他のエスケープシーケンスを選択できます。必要に応じて、も宣言white-space: nowrapできます。
PointedEars 2018年

81

更新:PointedEarsは 、すべてのcss状況での正しい代理は
'\a0 '、スペースが16進文字列のターミネーターであり、エスケープシーケンスによって吸収されることを示唆していると述べています。彼はさらに、この信頼できる説明を指摘しました。これは、私が以下で説明して修正した問題の良い解決策のように思えます。

あなたがする必要があるのはエスケープされたユニコードを使うことです。あなたが言われたことにもかかわら\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 */

Bを16進数のエスケープ文字に入れます。同じことが0-9a-fA-Fでも起こります。


6
次のように、エスケープシーケンスの後にスペースを1つ入れるだけです'\a0 Break''\0000a0Break'はない信頼性の高いです。
PointedEars

@PointedEars興味深いので、このスペースはターミネーターであり、文字列に含まれませんか?
dlamblin 2012年

2
CSS 2.1のセクション「4.1.3文字と大文字小文字の区別」を参照してください。また、CSS 2.1に従ってアプローチが信頼できることを示しています。しかし、空白スペースのアプローチはよりクリーンで(上位互換)、フットプリントが小さくなっています。
PointedEars 2012年

47

CSSでは、HTMLエンティティの代わりにUnicodeエスケープシーケンスを使用する必要があります。これは、文字の16進値に基づいています。

シンボルを16進数に変換する最も簡単な方法は、▾(▾)から\25BEMicrosoftの計算機を使用することなどです。

はい。プログラマモードを有効にし、10進法をオンにして、を入力し9662、次に16進数に切り替えると、が得られ25BEます。次に\、最初にバックスラッシュを追加します。


4
完全に便利ですが、実際には質問に答えないので、質問へのコメントとしてはこれが良いでしょう。
dlamblin 2012年

1
黒い右向きの小さな矢印(▸ \25B8 ▸ ▸)ftw。また、en.wikipedia.org / wiki / Geometric_Shapesも参照してください。
Joel Purra、2012

2Joel Purra、Wikiをもっと読む。シンボルを間違えた。
netgoblin 2012年

@netgoblin:どうやって?私はたまたま黒い右向きの小さな矢印が好きです。
Joel Purra

1
私はこのgraphemica.comを使用して、10進数、16進数などを取得できます
Mike

34

改行しないスペースには16進コードを使用します。このようなもの:

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

17

nbsp開いているCharMap を貼り付けて、文字160をコピーする方法があります。ただし、この場合は、おそらく次のようにパディングでスペースを空けます。

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

display:inline-blockただし、パンくずリストなどを設定する必要があるかもしれません。


4
nbspを貼り付ける代わりに、エンティティを使用することに固執します。これにより、スペースとは異なることが将来のメンテナに明確になります。
nickf 2009

2
一方、本来のパンくずリストは実行しないでください。つまり、>記号は、視覚的なスタイルだけでなく、パンくずリストとインラインにする必要があります。少なくとも、Googleにパンくずリストを表示させ、検索エンジンのリストの下に表示させたい場合。
痴呆

10

例えば ​​:

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

例:キャラクターを選択する場合は、「&#8620」「&#x21ac」を選択しました(HEX値を使用しています)

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

結果:↬

それでおしまい :)


私はコンテンツを使用しました: '\ 10095'; 。しかし、出力は表示されていません。アイコンの代わりに、長方形を表示しています。
kapil 2017

0

私はこれがかなり古い投稿であることを知っていますが、間隔がすべてあなたの後になら、なぜ単純ではないのですか?

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

以前にこの方法を使用しました。私のテストでは、「>」を使用して他の行に完全に折り返しています。


-2

2つの方法は次のとおりです。

  • HTML:

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

これは⛱になります

  • Cssの場合:

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

HTMLコード <div class="ics"></div>

これもin


正解は.ics :: before {content: '\ 9969';}です
Marco Scarnatto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.