---
title: CSSのみで外部リンクにアイコンをつける
description:
thumbnail: 'data:image/svg+xml;utf-8,'
emoji:
date: 2025-03-02
category: Tech
tags: [CSS]
index: true
published: true
---
完成品
https://mi.moris.day/@moris
[ソースコード](https://git.moris.day/moris/day.moris.blog/src/commit/9bbd127c791bbc93cbe1b5d4fb2d115cc3de4998/src/lib/components/Markdown.css#L44)
## 要件
1. 外部リンクにのみアイコンをつける
2. 訪問済みのリンクは色を変える
3. とにかく軽量 → Font Awesomeなどのwebフォント、JavaScript等は使わずにhtml&CSSのみで実装
## 表示するアイコン
[Google Material Symbols](https://fonts.google.com/icons)のOpen In Newというアイコンを使いました。人力圧縮でオリジナルの300Bから190Bまで圧縮されています。
```
```
オリジナル: https://fonts.google.com/icons?selected=Material+Symbols+Outlined:open_in_new:FILL@0;wght@400;GRAD@0;opsz@24
## 外部リンクに一致するCSSセレクタ
このブログは[rehype-external-links](https://github.com/rehypejs/rehype-external-links)というパッケージで外部リンクに`target="_blank"`を設定しています。大体のサイトで同じだと思うので、これを属性セレクタで一致させます。正確には`target="_blank"`は新規タブで開くことを意味しているのでサイト内リンクの可能性もあるのですが、アイコンの名前もOpen In Newですし、まぁいいでしょう。
```css
a[target="_blank"] {
/* ここにスタイル */
}
```
## アイコン画像をつける
CSSセレクタは完成したのでアイコンを付けましょう。これは`::after`擬似要素一択ですね、`content`に`