2020年12月24日
デザイン
【CSS】:not否定擬似クラスの使い方とできること
はじめに
新しい技術にチャレンジし続けるpalanのアドベントカレンダーDay24です!
昨日は「Ruby 後置whileの挙動をみる」と言う記事でした。
本記事では、CSSの「:not」という否定擬似クラスの使い方とできることについて書いていきます。
:not否定擬似クラスの基本
:not否定擬似クラスとは?
:notとは、CSS上で特定の要素やクラス以外のものを指定したい時に使う擬似クラスです。
特定の要素やクラス以外のものを取得するため、「否定擬似クラス」とも呼ばれています。
:notの基本的な構文
:not(hogehoge) {
プロパティ: 値;
}
これが基本的な、:notの構文です。
hogehoge
の中身が今回取得しない対象を表します。
:notの例文1
<ul>
<li>apple</li>
<li class="sample">orange</li>
<li>lemon</li>
</ul>
このように書いた際に、.sample
クラスがついたもの以外は、色を青にしたい場合はCSSをこのように書きます。
li:not(.sample) {
color: blue;
}
:notの例文2
例1のほかにも、実装の際によくあるのが、リストの最後の要素だけ下線を消す場合です。
デザインとしては、このようなイメージです。
この場合、HTMLとしては:
<ul>
<li>apple</li>
<li>orange</li>
<li>lemon</li>
</ul>
CSSは、実装方法が複数あります。
方法1
li {
border-bottom: 1px solid #CCC;
}
li:last-of-type {
border-bottom: none;
}
すべてのliに下線をつけてから、兄弟要素のグループの中でその種類の最後の要素をとってくる :last-of-type
擬似クラスで最後のliの下線を消す方法。
こちらでも問題なく動くのですが、:not
を使うともっと簡潔に書くことが可能です。
:notを使った方法
li:not(:last-of-type){
border-bottom: 1px solid #CCC;
}
このように、:notの中に :last-of-typeや :nth-childなどのシンプルセレクターを入れ込むことで、簡潔にCSSを書くことができます。
ポイント
シンプルセレクターとは要素をとってくる要素型セレクタ(タイプセレクタ)、全称セレクタ(ユニバーサルセレクタ)、 属性セレクタ、クラスセレクタ、IDセレクタ、擬似クラスの総称をいいます
:notの組み合わせ
:notは中身にさまざまなセレクタを組み合わせたり、複数使うことにより、さらに強力なセレクタになりますが、実際どこまでの組み合わせが可能なのか、こちらでご紹介していきたいと思います。
:notの組み合わせでできること
:notのセレクタとして擬似クラス
先ほどもご紹介しましたが、:not
の中に :last-of-type
や :nth-of-child
などの擬似クラスを使用することができます。
li:not(:nth-child(2n + 1)){
background: #CCC;
}
こちらでは、奇数の<li>
にだけ、背景色をつけています。##### 複数の:notをつなげる
複数のクラスに対して、 :not
をかけたい場合、 .not
をつなげることができます。
li:not(.apple):not(.orange){
background: #CCC;
}
このように書くと、 .apple
クラスと .orange
クラスの両方の背景色を変更することができます。
属性セレクタとの組み合わせ
例えば、ボタンのdisableや特定のリンクに飛ぶところ以外を取得したい、など :not
の中身に属性セレクタを指定することができます。
li:not([disabled]){
background: mediumseagreen;
}
ここでは、ボタンがdisabled
ではない場合に背景色をつけることができます。
:notの組み合わせでできないこと
:notの入れ子
下記のように、 :notを入れ子にすることはできません。
使用したくなるシーンは少ないかもしれませんが、気をつけてください。
// 動かないコードです
li:not(:not(.sample)){
background: mediumseagreen;
}
シンプルセレクター以外をセレクタとして使用する
シンプルセレクターとは下記のセレクタの総称です。
要素型セレクタ(タイプセレクタ)全称セレクタ(ユニバーサルセレクタ)属性セレクタクラスセレクタIDセレクタ擬似クラス
これ以外のセレクタを使用するとすると、動きませんので注意してください。
// 動かないコードです
li:not(::first-line){
background: mediumseagreen;
}
// 動かないコードです
li:not(.a, .b, [c]){
background: mediumseagreen;
}
ポイント
現在、シンプルセレクタ以外にも、 `li:not(.a, .b, [c])` のような形で書いても、CSSがそれを認めるような仕様が出てきています。現在、Firefoxやsafariなどの新しいブラウザで使用することはできますが、そこまでサポートが進んでいないので、今はまだ避けて使うのが良さそうです。
ブラウザサポート
:not
は現在、ほとんどの主要ブラウザで実装されていますが、念のため下記をご確認の上、プロジェクト内で使用するかを決めると良いでしょう。
まとめ
今回は:not否定擬似クラスの使い方とできることをご紹介しました。
:not
を使うことで、わかりやすいコードがかけたり、コード量を短縮することもできるので、使い方をマスターしていただければと思います。
CSSのお仕事に関するご相談
Bageleeの運営会社、palanではCSSに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
3
0
関連記事
2021年12月5日
【CSS】CSSだけでアコーディオンを作る方法
2021年11月29日
Tailwind CSSの概要と導入のメリット
2021年6月7日
FLOCSSとBEMを理解する
2020年12月24日
【CSS】:not否定擬似クラスの使い方とできること
2020年12月21日
デザイン制作・コーディングツール「Hadron」を使ってみた
2018年12月9日
【CSS】3D transformsでコロッとなるエフェクトを作る
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへpalanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー
Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。
やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。
はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。
ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。
Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。
ゲスト bagelee
かっきー
まりな
suzuki
miyagi
ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。
いわもと
デザイナーをしています。 好きな食べ物はラーメンです。
taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。
kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya
aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。
Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
sugimoto
asama
ando
iwasawa ayane
oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!