属性セレクタを“使いこなす”ための基礎と実践
属性セレクタは、HTMLタグが持つ属性(class・id 以外も含む)を条件にしてスタイルを当てる方法です。
初心者が理解すると CSS の表現力が一気に広がる、とても強力なテクニックです。
Tailwind CSS では属性セレクタを直接書くことは少ないですが、
「どう置き換えるか」も合わせて解説します。
属性セレクタとは何か
属性セレクタの基本形
CSSでは、次のように書くと「特定の属性を持つ要素」にスタイルを当てられます。
a[target] {
color: red;
}
CSSこれは「target 属性を持つすべての <a>」が対象になります。
HTML例
<a href="page.html">通常リンク</a>
<a href="page.html" target="_blank">別タブで開くリンク</a>
HTML上の CSS は後者だけに適用されます。
Tailwind では属性セレクタは使わず、対象の要素に直接クラスを付けます。
<a href="page.html">通常リンク</a>
<a href="page.html" target="_blank" class="text-red-600">
別タブで開くリンク
</a>
HTML属性セレクタの種類と使い分け
完全一致([attr="value"])
input[type="email"] {
border-color: royalblue;
}
CSSHTML
<input type="email">
<input type="text">
HTMLtype="email" のみが対象。
Tailwind版
<input type="email" class="border-blue-600">
HTML部分一致(*=)
「値の中に含まれていればOK」
a[href*="youtube"] {
color: red;
}
CSSYouTube へのリンクだけ色を変えたいときに便利です。
HTML
<a href="https://www.youtube.com/watch?v=123">動画</a>
<a href="https://example.com">通常リンク</a>
HTMLTailwind版
<a href="https://www.youtube.com/watch?v=123" class="text-red-600">動画</a>
HTML前方一致(^=)
「値がこの文字で始まるもの」
a[href^="https://"] {
font-weight: bold;
}
CSS外部リンクを太字にしたいときなどに使えます。
HTML
<a href="https://example.com">外部リンク</a>
<a href="/about">内部リンク</a>
HTMLTailwind版
<a href="https://example.com" class="font-bold">外部リンク</a>
HTML後方一致($=)
「値がこの文字で終わるもの」
img[src$=".png"] {
border: 2px solid #ccc;
}
CSSPNG画像だけ枠線を付けたいときに便利。
HTML
<img src="photo.png">
<img src="photo.jpg">
HTMLTailwind版
<img src="photo.png" class="border-2 border-gray-300">
HTML属性セレクタの“深掘りポイント”
属性セレクタは「HTMLの意味」を利用できる
例えば、フォームの入力タイプごとにデザインを変えたい場合。
input[type="text"] {
background: #fff;
}
input[type="password"] {
background: #f0f0f0;
}
CSSHTML
<input type="text" placeholder="名前">
<input type="password" placeholder="パスワード">
HTMLTailwind版
<input type="text" class="bg-white" placeholder="名前">
<input type="password" class="bg-gray-100" placeholder="パスワード">
HTML属性セレクタは「HTMLの意味(type, href, src, target…)」をそのまま利用できるのが強みです。
Tailwindは「意味」ではなく「見た目」を直接書くスタイルなので、
属性セレクタのような“意味ベースの指定”は行いません。
よくある失敗と改善例
失敗例1:クラスで管理すべきところを属性セレクタで無理にやる
div[data-type="card"] {
padding: 20px;
background: #fafafa;
}
CSSHTML
<div data-type="card">商品A</div>
HTMLこれは動くけれど、デザイン目的ならクラスを使うべきです。
改善版
.card {
padding: 20px;
background: #fafafa;
}
CSSTailwind版
<div class="p-5 bg-gray-50">商品A</div>
HTML失敗例2:部分一致を使いすぎて意図しない要素に当たる
a[href*="shop"] {
color: green;
}
CSSshop を含む URL すべてが対象になるため、/shopping/ などもヒットしてしまう可能性があります。
改善案:前方一致や完全一致を使う
a[href^="/shop"] {
color: green;
}
CSS例題で理解を深める
例題:外部リンクだけアイコンを付けたい
CSS版
a[target="_blank"]::after {
content: "↗";
margin-left: 4px;
font-size: 12px;
}
CSSHTML
<a href="https://example.com" target="_blank">外部リンク</a>
<a href="/about">内部リンク</a>
HTMLTailwind版(疑似要素は CSS で補う)
<a href="https://example.com" target="_blank" class="external-link">
外部リンク
</a>
<a href="/about">内部リンク</a>
HTML.external-link::after {
content: "↗";
margin-left: 4px;
font-size: 12px;
}
CSSTailwindは疑似要素を直接扱えないため、
必要に応じて CSS を併用するのが実務的な解決策です。
まとめ:属性セレクタは“意味ベースのデザイン”に強い
属性セレクタの強み
- HTMLの属性をそのまま条件にできる
- フォーム、リンク、画像などで特に便利
- クラスを増やさずに柔軟な指定ができる
注意点
- デザイン目的で data 属性を乱用しない
- 部分一致(
*=)は影響範囲が広くなりがち - Tailwind では基本的に使わず、必要な要素に直接クラスを付ける


