絵文字がテキストからあまり目立たないようにモノクロ表示を強制することが主な関心事である場合、CSSフィルターは、単独で、またはUnicodeバリエーションセレクターと組み合わせて、必要なものになる可能性があります。
p.gscale {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
a {
color: #999;
-webkit-filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
}
<p class="gscale">You've now got emoji display on 🔒lockdown🔒.</p>
<p>External Link: <a href="https://knowyourmeme.com/memes/party-hard">celebrate 🎉</a></p>
バリエーションセレクターとは異なり、CSSフィルターはすべてに適用されるため、絵文字のレンダリング方法は問題になりません。(私はそれらを使用して、ウェイバックマシンを指すように変更されたハイパーリンク上のPNG形式の「リンクタイプ」アイコンをグレースケールします。)
ただ、注意点を気に。子の親要素のフィルターをオーバーライドすることはできないため、この手法を使用して段落をグレースケールし、その中のリンクの色を変更することはできません。😢
...それでも、全体をハイパーリンクにするか、その中のリッチマークアップを許可しない場合に役立ちます。(例:タイトルと説明)
ただし、CSSが実際に適用されない限り、これは機能しません。そのため、より信頼性の高い2番目のオプションを指定します。 <title>
、Unicodeバリエーションセレクターよりも要素の(私はGitHubを見ています。ブラウザのタブ):
ユーザーが指定した文字列を<title>
要素に入れる場合は、太字/斜体/下線などとともに絵文字を除外します。マークアップ。(はい、それを見逃した人のために、標準は<title>
アンパサンドエスケープと私がテストしたすべてのタグをリテラルテキストとして解釈するブラウザを除いて、コンテンツがプレーンテキストであることを求めています。)
私が考えることができる2つの方法は次のとおりです。
- 手動で維持された正規表現を直接使用する最新バージョンのUnicodeが絵文字とその修飾子を配置するブロックに一致を。
- 書記素クラスタを反復処理し、認識された絵文字コードポイントを含むものをすべて破棄します。(書記素クラスターは、ベースグリフに加えて、表示文字を構成するすべての分音記号とその他の修飾子です。私がリンクする例では、Pythonの正規表現エンジンを使用してトークン化してから
emoji
、データベースのパッケージを使用していますが、Rustは言語の良い例ですここで、書記素クラスターの反復は、などのクレートを使用してすばやく簡単にできunicode-segmentation
ます。