TL;DR回答
最初のルールは、セレクターのタイプと属性の両方の部分があり、優先順位が高いため、2番目のルールよりも具体的です。
input[type="text"] { } /* type + attribute for specificity */
.top_bar_login_form_input { } /* only class for specificity, so *less* specificity */
長い答え
特異性に関するMDNページによると、属性セレクターであるtype="text"
ビットは、クラスセレクターよりも特異的であると思われるでしょう。
次のセレクターのリストは、特異性を高めることによるものです。
- ユニバーサルセレクター
- タイプセレクター
- クラスセレクター
- 属性セレクター
- 疑似クラス
- IDセレクター
- インラインスタイル
上記の引用は、この回答が書かれた時点のMDNの記事にありました。
それが誤解を招く理由:
(@BoltClockの洞察にタンクします。)
上記は正しいように思わinput[type="text"]
れますが、これは通常、属性セレクターを実行するときに要素をセレクター(たとえば)に含めるためです。ただし、卑劣なこと:input
ビットが重要です。
次のマークアップがあるとします。
<input class="my-class" type="text" value="some value" />
次のシナリオでは、入力が赤にレンダリングされます。
[type="text"] { color: green; }
.my-class { color: red; } /* last rule matched */
シナリオでルールを逆にすると、入力は緑色になります。
.my-class { color: red; }
[type="text"] { color: green; } /* last rule matched */
これは、両方のセレクターの特異性が等しいためです。ここで、セレクターを属性ルールに導入するinput
と、そのうちの1つがより具体的になります。これは、このシナリオで確認できます。
input[type="text"] { color: green; } /* most _specific_ rule matched */
.my-class { color: red; }
W3仕様は私の頭を痛めますが、上記が機能する理由の詳細が含まれています。特異性の計算方法については、@BoltClockによる回答とそれらのコード例のコメントも参照してください。