エフェクト

visibility

visibility は、要素を見えなくします。見えなくしても要素の場所は残るので、まわりのレイアウトは動きません。

構文

visible | hidden | collapse

プレビュー

1234
プリセット
見本
項目
右下の角をドラッグするとサイズを変えられます

コード

.box {
  display: flex;
}

.box > :nth-child(2) {
  visibility: hidden;
}

コントロール

visibilityhidden
visibility
1234

解説

値の書き方

visible(初期値)、hidden、collapse のどれかを書きます。

このページのプレビューは、補助の宣言で箱を display: flex にして、2 番目の項目だけに visibility を書いています(.box > :nth-child(2) は「箱の 2 番目の子」を選ぶセレクタです)。hidden にすると 2 の項目は見えなくなりますが、ほかの項目は動かず、2 の項目があった場所が空きます。

場所は残る

hidden は要素を描かないだけで、レイアウトはそのままです。場所ごと取り除くなら display: none を書きます。

見えなくした要素は、クリックできず(pointer-events: none と同じ)、Tab キーでフォーカスも移らず、スクリーンリーダーにも読まれません。opacity: 0 も見えなくなりますが、こちらはクリックもフォーカスもでき、スクリーンリーダーにも読まれます。

子要素だけを見せられる

visibility は継承するので、hidden を書いた要素の子要素も見えなくなります。ただし、子要素に visibility: visible を書くと、その子要素だけは見えます。opacity: 0 では、子要素だけを見せることはできません。

collapse

フレックスボックスの項目に書くと、項目を詰めて隠します。項目は並びから外れますが、フレックスの行の高さ(交差軸の大きさ)は、項目があったときのまま残ります。これに対応しているのは Firefox だけで、Chrome・Edge・Safari では hidden と同じく、項目の場所が空きます。

表の行(tr など)や列(col など)に書くと、その行や列を詰めて隠します。Safari は列にはまだ対応していません。フレックスボックスの項目、表の行と列、ルビの注釈以外の要素では、hidden と同じです。

transition での切り替わり

visible とほかの値の間を transition すると、途中はずっと visible になります。そのため opacity と一緒に transition すると、消えるときはフェードアウトが終わってから見えなくなり、現れるときは最初から見えるようになって、フェードインが見えます。

コメント