基本的に、CSSでは「最後の手段」とすべき!important
ですが、かけ方によっては効かないこともありえます。意図的に!important
をかける際にも注意が必要です。
事象
ある処理を組んでいる過程で、「body
にあるクラスをかけると、ページ全体でマウスカーソルが砂時計になる」という機能を実装しようと考えました。そこで、
失敗例
body.some-class{
cursor: wait !important;
}
というようにCSSをかけました…が、(明示的にcursor
をかけたものを除いて)一部の要素ではマウスカーソルが別な形となったままでした。
原因
さすがに動きとして気になったので、Chromeのデベロッパーツールで追いかけてみると、body
から継承したcursor
は、ばっちり上書きされていました。…input
要素などの、デフォルトスタイルに。
どうやら、!important
が付いたプロパティでも、継承された時には通常のプロパティとなってしまうようでした。
対策
ひとまず、全要素に対して!important
をかけることにして解消しました(例はSCSSです)。
改善例
body.some-class{
cursor: wait !important;
*{
cursor: wait !important;
}
}
その他
CSSでcursor:wait
としても、カーソルの見た目が変わるだけで、ふつうに操作は可能なままです。操作自体を無効にするには、別途の手段が必要です。