CSS リンク内容によって装飾を変える

ワードプレス

  • 外部リンクには自動で「target=”_blank” rel=”noopener”」を付けたい
  • 外部リンクには自動でそれっぽいアイコンを付けたい
  • PDFへのリンクに自動で書類アイコンを付けたい

等々自動化したい項目がありますが、全部をすっきりさせる方法はなかなか、、、

 

ので、お手軽さを最優先に再度検討。

※アイコンのプロパティはなんでもよいのですが、本記事ではダッシュアイコンを使っています。有効化の方法はこっちの記事で。

CSS例

外部リンクに自動でアイコンを付与

a[target*="_blank"]:after	{
	font-family: dashicons;
	content: "\f504";
	padding-left: 0.25em;
}

「target=”_blank” rel=”noopener”」は手動で、アイコンは自動、という線で。

ワードプレスなら「リンクを新しいタブで開く」をチェックするだけだし。

PDFへのリンクに自動でアイコンを付ける

a[href$=".pdf"]:after	{
    font-family: dashicons;
	content: "\f546";
	padding-left: 0.25em;
}

「target=”_blank”」にすることが多いと思います。

ので、「外部リンクに自動でアイコンを付与」のCSSより後に書いて上書きされるようにしてください。

 

拡大画像へのリンクなら「.pdf」を「.jpg」「.png」等に変えてルーペアイコンでもいいか。

調整

a[target*="_blank"], a[href$=".pdf"]	{
	text-decoration: none;
	display: inline-flex;
}
a[target*="_blank"]:hover, a[href$=".pdf"]:hover	{
	text-decoration: none;
}
  • アイコンに下線が出ちゃうとみっともないので下線はナシで
  • 上下位置が気持ち悪い感じになるのでinline-flex

装飾削除

画像に外部リンクをかけると余計なアイコンが付いちゃう。

あるいは、なんにも装飾したくないケースもあると思います。

そういうケースは手動で。

.link-decoration-none a	{
	text-decoration: none;
}
.link-decoration-none a:after	{
	content: none;
}

ビジュアルエディターの「スタイル」に登録しときます。

 

また、構文を判断して自動でアイコンが付くので、ナビゲーション、ヘッダー、フッターなどに要らぬ装飾が付くことも。

#contentとか、.site-mainとかに限定した方がいいかもしれません。

が、これが結構面倒くさい。

#page > *:not( #main ) a[target*="_blank"]:after, #page > *:not( #main ) a[href$=".pdf"]:after	{
	content: none;
}

テンプレートによって書き方が全然違うはず。

:notを使わず、headerでの否定、footerでの否定等、直接否定した方が簡単かもしれません。

電話

PCでは電話をかけないように。

電話アイコンを足してもいいけど、サイトによってデザインが変わるので割愛。

<?php if( wp_is_mobile() ){
}else{ ?>
a[href^="tel:"]	{
	pointer-events: none;
}
<?php } ?>

条件分岐が必要なので、header.phpに直書き。

 

クラス「.is-mobile」「.not-mobile」等を出しているなら、

.not-mobile a[href^="tel:"]	{
	pointer-events: none;
}

表示例

  • 外部リンク、手動で「target=”_blank”
    ググる
  • PDFへのリンク
    PDF
  • 電話リンク
    電話:03-0000-0000

 

Java ScriptやPHPでもっとスマートにできると思うけど、「どうしても」という部分じゃないのでこれで妥協。