ユーザーがリンクをクリックしたときに、データベースで既読としてマークされるリンクを表示しています。ユーザーのブラウザ履歴ではなく、データベース情報に基づいて、クリックされたリンクとクリックされていないリンクのスタイルを設定したい。これまでのところ、私が使用する場合:
10 a:visited {
11 color: #444;
12 }
13
14 a:link {
15 font-weight: bold;
16 color:black;
17 }
18
19 .read {
20 color: #444!important;
21 }
22
23 .unread {
24 font-weight: bold!important;
25 color:black!important;
26 }
そして
<tr class="even">
<td><a class="read" href="example.com">blah</a></td>
</tr>
<tr class="odd">
<td><a class="unread" href="example.org">foo</a></td>
</tr>
リンクにアクセスしましたが、このページからはアクセスしていません(データベースでまだ未読としてマークされています)と、奇妙な結果になります。たとえば、色だけが機能しますが、重量は機能しません。
スタイルが競合するときに、別のスタイルをオーバーライドすることは可能ですか?
ありがとう!
編集:明確にするために更新されたコード
10 a:link,
11 a:visited {
12 font-weight: bold;
13 color: black;
14 }
15
16 a.read {
17 color: #444;
18 font-weight: lighter !important; /* omission or even "normal" didn't work here. */
19 }
20
21 a.unread {
22 font-weight: bold !important;
23 color: black !important;
24 }
まず、ブラウザの履歴がスタイルに干渉しないようにする場合は、:visited疑似クラスを使用して、非アクセスリンクのスタイルと一致させ、DBレコードに基づいて手動でクラスを適用します。
競合するスタイルに関しては、セレクターの specificity がすべてであり、同じプロパティを持つ2つが競合する(同じ特異性を持つ)場合、最後のものが「勝ち」ます。
これを行う:
a:link,
a:visited {
font-weight: bold;
color: black;
}
a.read {
color: #444;
}
!importantディレクティブを使用できます。例えば。
.myClass
{
color:red !important;
background-color:white !important;
}
適用されている他のスタイルをオーバーライドする必要がある場合は、上記のように各スタイルの後に!importantを配置します。
試してください:
a.unread, a:visited.unread {style 1}
a.read, a:visited.read {style 2}
1つは、HTMLをチェックして、class="read"
とclass="unread"
がリンクに追加されていることを確認してください。
2つ目は、.read
および.unread
CSSルールにa
を追加してみてください。
a.read { /* ... */ }
a.unread { /* ... */ }
それが機能しない場合は、!important
の前にスペースを追加してみてください。これは必須ではないと思いますが、 これまでに見たほとんどの例 を含めます。
CSSセレクターの詳細を定義できます。
a { /* style 1 */ }
によって上書きされます
div a { /* style 2 */ }
ここで、div
はa
の親要素です
詳細は Selectutorial にあります。