tag:crieit.net,2005:https://crieit.net/tags/CSS3/feed 「CSS3」の記事 - Crieit Crieitでタグ「CSS3」に投稿された最近の記事 2022-04-28T00:04:15+09:00 https://crieit.net/tags/CSS3/feed tag:crieit.net,2005:PublicArticle/18178 2022-04-28T00:04:15+09:00 2022-04-28T00:04:15+09:00 https://crieit.net/posts/bootstrap5-scroll-margin-top-darkmode-parallax-demo-20220430 Bootstrap 5 + scroll-margin-top + ダークモード + パララックス についてメモ <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://labor.ewigleere.net/">Bootstrap 5 で JavaScript の記述なしにアンカーリンクへのアニメーション付きスクロールが <code>scroll-behavior</code> で実装されていることを最小限構成で確認した</a>ので、改めて Bootstrap 5 で検証したいと思います。</p> <h2 id="デモ"><a href="#%E3%83%87%E3%83%A2">デモ</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://arm-band.github.io/test-scroll-mt-vault-celestia/">Home - Vault Celestia</a></li> </ul> <p>早速ですがデモを。</p> <h2 id="scroll-margin-top"><a href="#scroll-margin-top">scroll-margin-top</a></h2> <p>上述の通り、 Bootostrap 5 ではアンカーリンクへのアニメーション付きスクロールは <code>scroll-behavior: smooth;</code> で実装されているのでこの部分はそちらに任せて、 <code>scroll-margin-top</code> のみ自前で記述。</p> <pre><code class="scss">// foundation/_variable.scss $navbar-height: 56px; /* css変数 + Scss変数 */ :root { --navbar-height: #{$navbar-height}; } // object/utility/_u-ssnapmt.scss .u-ssnapmt { scroll-margin-top: var(--navbar-height); } </code></pre> <p>今回は css変数 + Scss の併用で記述してみました。</p> <h2 id="css変数 + ページごとのキービジュアル画像の変更"><a href="#css%E5%A4%89%E6%95%B0+%2B+%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%94%E3%81%A8%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E7%94%BB%E5%83%8F%E3%81%AE%E5%A4%89%E6%9B%B4">css変数 + ページごとのキービジュアル画像の変更</a></h2> <p>キービジュアル (ページ最上部にある画像 + 見出し + キャッチコピー等のパーツ) の背景画像について、ページごとに異なる画像を表示させたい、というのはよくある話だとは思います。</p> <pre><code class="html"><head> <style> .c-eyecatch { /* css変数で キービジュアル の画像をページごとに切替 */ background-image: var(--img); } </style> </head> <body> <!-- css変数で キービジュアル の画像をページごとに切替 --> <div class="p-3 p-sm-5 c-eyecatch" style="--img:url('https://source.unsplash.com/ROVBDer29PQ/1920x1080')"> <div class="container"> <h1 class="display-4">ほげ</h1> <p class="lead">ふがふが</p> </div> </div> <main class="l-main"> <section class="container py-5"> <h1 class="display-4">ぴよ</h1> <p>ほげら</p> </section> <!-- 流用 --> <div class="p-3 p-sm-5 mb-4 c-eyecatch" style="--img:url('https://source.unsplash.com/lNxMcE8mvIM/1920x1080')"></div> </body> </code></pre> <p>今回は css変数 を使って</p> <ul> <li>予め <code>head</code>タグ 内の <code>style</code>タグ では <code>background-image: var(--img);</code> でcss変数で指定しておく</li> <li>各要素で変数の値を都度差し替える</li> </ul> <p>という形で画像を切り替える形式を採ってみました。</p> <p>なお、今回はデモなので Jumbotron風 の実装で。</p> <h2 id="ダークモード"><a href="#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89">ダークモード</a></h2> <pre><code class="scss">// layout/_l-main.scss @charset "utf-8"; @use "../foundation" as f; .l-main { background-color: f.$bg-color; color: f.$color; #dark > & { /* ダークモード対応 */ @media (prefers-color-scheme: dark) { background-color: f.$color; color: f.$bg-color; } } } </code></pre> <p>メディアクエリ <code>@media (prefers-color-scheme: dark)</code> によるダークモードを試しに記述。</p> <p>ブログのような色に対して中立性の高いコンテンツの場合は使えそうですが、ブランドカラーが決まっている場合は難しそうな感。</p> <p>個人的には基本ダークモードの方がありがたいのですが……。</p> <h2 id="パララックス"><a href="#%E3%83%91%E3%83%A9%E3%83%A9%E3%83%83%E3%82%AF%E3%82%B9">パララックス</a></h2> <p>最後はパララックス。これについてはパッケージを利用しました。</p> <pre><code class="json"> "dependencies": { "ukiyojs": "^3.0.0" }, </code></pre> <pre><code class="js">import Ukiyo from 'ukiyojs'; window.addEventListener( 'load', () => { const ukiyoParallaxes = document.querySelectorAll( '.ukiyo' ); ukiyoParallaxes.forEach( ( ukiyoParallax ) => { new Ukiyo( ukiyoParallax, { scale: 1.75, speed: 1.75, } ); }); }); </code></pre> <p>公式のドキュメント通りです。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/yitengjun/ukiyo-js">GitHub - yitengjun\/ukiyo-js: ⛰️Modern parallax library for picture elements and any images</a></li> </ul> <p>検索すると自前実装も出てくるのですが、後々を考えるとパッケージの方が良さそうな気がするので。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="scroll-margin-top"><a href="#scroll-margin-top">scroll-margin-top</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.aizulab.com/blog/sticky-header-overlap/">アンカーリンクの遷移先が隠れる…。追従ヘッダーの重なりを回避するCSS | 会津ラボ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://tech.arms-soft.co.jp/entry/2020/01/29/090000">アンカーリンクのズレをscroll-snapを使って直せるか試してみた - arms inc. Engineers' Blog</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wb-hp.com/blog/2021/10/04/google-ie-support-ended.html">scroll-margin-top でヘッダー固定されたページのアンカーリンクの座標を調整する | ホワイトボードオフィシャルブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/catnose99/articles/75d3c69bf71bad">【追記: Safariでも動くようになった!】scroll-margin-topがsafariでうまく効かない問題と現状のワークアラウンド</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/CSS/scroll-margin-top">scroll-margin-top - CSS: カスケーディングスタイルシート | MDN</a></li> </ul> <h3 id="Bootstrap 5 での jumbotron"><a href="#Bootstrap+5+%E3%81%A7%E3%81%AE+jumbotron">Bootstrap 5 での jumbotron</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://bootstrap-guide.com/sample/jumbotron-bgimage">背景が画像のジャンボトロンの実例~Bootstrap5設置ガイド</a></li> </ul> <h3 id="css変数 で背景画像指定"><a href="#css%E5%A4%89%E6%95%B0+%E3%81%A7%E8%83%8C%E6%99%AF%E7%94%BB%E5%83%8F%E6%8C%87%E5%AE%9A">css変数 で背景画像指定</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sygnas/items/5a08d2462b6fc46850d7">CSS変数でbackground-imageを指定するとChromeとSafariで挙動が異なるのを解決する - Qiita</a></li> </ul> <h3 id="ダークモード"><a href="#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89">ダークモード</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.webcreatorbox.com/tech/dark-mode">Webサイトをダークモードに対応させよう | Webクリエイターボックス</a></li> </ul> <h3 id="パララックス"><a href="#%E3%83%91%E3%83%A9%E3%83%A9%E3%83%83%E3%82%AF%E3%82%B9">パララックス</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/nye/articles/b3cbcf347a0291">モダンアニメーションのパララックス(視差効果)背景のライブラリを作った</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/yitengjun/ukiyo-js">GitHub - yitengjun\/ukiyo-js: ⛰️Modern parallax library for picture elements and any images</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.npmjs.com/package/ukiyojs">ukiyojs - npm</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/18177 2022-04-27T23:58:57+09:00 2022-04-27T23:58:57+09:00 https://crieit.net/posts/css-scroll-behavior-and-scroll-margin-top-note-20220428 (css) scroll-behavior と scroll-margin-top についてメモ <p>css の <code>scroll-behavior</code> と <code>scroll-margin-top</code> について検証したのでメモ。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>Bootstrap 5 で何気なく検証をしていたら、特に何をしたわけでもないのに同一ページ内のアンカーリンクにアニメーション付きでスクロールしたので気になりました。</p> <p>自前の JavaScript では何も記述していないプレーンな状態だったので、 Bootstrap 5 の JavaScript かと思ったのですが、該当の CDN からの読み込みの <code>script</code>タグ を削除しても動作したので「すわ css 側か?」となり調べてみることにしました。</p> <h2 id="調査結果"><a href="#%E8%AA%BF%E6%9F%BB%E7%B5%90%E6%9E%9C">調査結果</a></h2> <p>結果、 <code>scroll-behavior</code>プロパティ に依るものと分かりました。具体的には、</p> <pre><code class="css">html { scroll-behavior: smooth; } </code></pre> <p>この記述でページ全体にスクロールアニメーションが付与されていました。</p> <p>しかも調べてみると、別ページのアンカーリンクに遷移する場合は</p> <ol> <li>ページ遷移</li> <li>遷移先のページでアンカーリンクまで自動的にアニメーション付きでスクロール</li> </ol> <p>という挙動をすることが分かりました。</p> <p>css で別ページのアンカーリンクまで対応しているのであれば、上述の挙動が気になる場合を除けばもはやこれ1つで済んでしまうのではないでしょうか……。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://caniuse.com/?search=scroll-behavior">"scroll-behavior" | Can I use... Support tables for HTML5, CSS3, etc</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/yoshitake_1201/items/05a13fd77c18ff380eb6">iOSのバージョンと Safariバージョンの対応表(2022\/4\/6 現在 - Qiita</a></li> </ul> <p>注意点としては、 iOS Safari が15.4(2022/3/14リリース、2022/4/27記事執筆時点で最新版) のみサポートとなっているため、最新版以外の Safari のサポートが必要な場合は polyfill 等の代替手段を講じる必要性がありそうです。</p> <p>PJAX 等のデフォルトではない遷移をした際の挙動については未検証なので何ともですが少し気になります。</p> <p>それと、もう一点気になったのは Bootstrap のケースで言うとナビゲーションバーに <code>.fixed-top</code> を付けていた場合。つまりナビゲーションバーが画面上部に固定表示で追従するパターンですね。</p> <p>頻出するパターンですが、このケースでは工夫しないとアンカーリンク移動時にナビゲーションバーの裏側にコンテンツが隠れてしまうという課題がありました。</p> <p>かつてはこれを <code>margin-top: -80px; padding-top: 80px;</code> 等とネガティブマージンとパディングで調整・相殺するテクニックを使っていましたが……。</p> <h2 id="scroll-margin-top"><a href="#scroll-margin-top">scroll-margin-top</a></h2> <p>ここで兼ねてより目を付けていたのが <code>scroll-margin-top</code> 。 <code>scroll-snap</code> と呼ばれるスクロール時に特定の位置で止めたり誘導するプロパティの1つで、上述のアンカーリンク遷移時にナビゲーションバーの裏側に隠れてしまう問題を解決する方法として利用できます。</p> <pre><code class="css">.anchor-link { scroll-margin-top: 80px; } </code></pre> <p>これまで上述のようなネガティブマージョンとパディングの相殺や、あるいは <code>before</code>疑似要素 を利用した方法で調整していた手間が、上述の通り1行指定するだけで解決できます。</p> <p>css変数を使用するならば、</p> <pre><code class="css">:root { /* 変数定義 */ --navbar-height: 80px; } html { /* スムーススクロール */ scroll-behavior: smooth; } .header { /* ナビゲーションバーを上部固定表示 */ position: fixed; top: 0; left: 0; width: 100%; z-index: 10; /* css変数を使用して高さを指定 */ height: var(--navbar-height); } .main { /* スクロール可能なコンテンツ領域の上端部分はめり込むのでここは普通に margin-top でナビゲーションバー分下げる。css変数使用。 */ margin-top: var(--navbar-height); } .anchor-link { /* アンカーリンクが裏側に隠れるのを抑止。css変数使用。 */ scroll-margin-top: var(--navbar-height); } </code></pre> <p>このようなイメージですね。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://caniuse.com/?search=scroll-margin-top">"scroll-margin-top" | Can I use... Support tables for HTML5, CSS3, etc</a></li> </ul> <p>ちなみにこちらは iOS Safari 14.7 以降で有効ですが、やはりそこそこ新しめの Safari である必要があるので、こちらもケースによっては注意が必要そうです。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="scroll-behavior"><a href="#scroll-behavior">scroll-behavior</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://coliss.com/articles/build-websites/operation/work/scroll-page-smoothly-by-css-and-javascript.html">CSSだけでも実装できる!ページ内アンカーやページ上部にアニメーションでスクロールさせるCSS, JavaScriptのまとめ | コリス</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://web.havincoffee.com/design/2020/09/2009281.html#inpage-ank21">CSSでページ内リンクをなめらかにスクロールする|web design-havin' a coffee break|珈琲とウェブデザイン</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://caniuse.com/?search=scroll-behavior">"scroll-behavior" | Can I use... Support tables for HTML5, CSS3, etc</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/yoshitake_1201/items/05a13fd77c18ff380eb6">iOSのバージョンと Safariバージョンの対応表(2022\/4\/6 現在 - Qiita</a></li> </ul> <h3 id="ネガティブマージョンとパディングの調整"><a href="#%E3%83%8D%E3%82%AC%E3%83%86%E3%82%A3%E3%83%96%E3%83%9E%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%A8%E3%83%91%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%AE%E8%AA%BF%E6%95%B4">ネガティブマージョンとパディングの調整</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://designsupply-web.com/media/programming/1999/">ネガティブマージン・パディングで固定ヘッダー使用時のアンカーリンクに対応する</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.softel.co.jp/blogs/tech/archives/6083">【CSS】ページ内リンクのジャンプ先の位置を調整する at softelメモ</a> <ul> <li>疑似要素を使う手法もあり</li> </ul></li> </ul> <h3 id="scroll-margin-top"><a href="#scroll-margin-top">scroll-margin-top</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.aizulab.com/blog/sticky-header-overlap/">アンカーリンクの遷移先が隠れる…。追従ヘッダーの重なりを回避するCSS | 会津ラボ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://tech.arms-soft.co.jp/entry/2020/01/29/090000">アンカーリンクのズレをscroll-snapを使って直せるか試してみた - arms inc. Engineers' Blog</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wb-hp.com/blog/2021/10/04/google-ie-support-ended.html">scroll-margin-top でヘッダー固定されたページのアンカーリンクの座標を調整する | ホワイトボードオフィシャルブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/catnose99/articles/75d3c69bf71bad">【追記: Safariでも動くようになった!】scroll-margin-topがsafariでうまく効かない問題と現状のワークアラウンド</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/CSS/scroll-margin-top">scroll-margin-top - CSS: カスケーディングスタイルシート | MDN</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://caniuse.com/?search=scroll-margin-top">"scroll-margin-top" | Can I use... Support tables for HTML5, CSS3, etc</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/15327 2019-08-16T15:05:02+09:00 2019-08-16T15:06:16+09:00 https://crieit.net/posts/CSS-Property-Value-Selector-50 俺的CSS便利Property・Value・Selector 50連発! <p>最近すごくHTMLやCSSを書いている気がするので、ここらでCSSのよく使うプロパティや知っていると便利なプロパティをまとめてみることにしました。早速行ってみましょう!</p> <h1 id="よく使うもの"><a href="#%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86%E3%82%82%E3%81%AE">よく使うもの</a></h1> <h2 id="1. ::before, ::after"><a href="#1.+%3A%3Abefore%2C+%3A%3Aafter">1. ::before, ::after</a></h2> <p>これを指定した要素の子要素として挿入される疑似要素。子要素を持てない要素(img, inputなど)には指定不可能。<code>content</code>プロパティを指定しない限り挿入されない。なにも入れるcontentがない場合は<code>content: ""</code>を指定する。</p> <h2 id="2. min-height, min-width"><a href="#2.+min-height%2C+min-width">2. min-height, min-width</a></h2> <p>高さや幅の最小値を指定する。mainコンテナのように、必ずある大きさ以上の大きさが必要な要素に指定すると、コンテンツの大きさにかかわらず設定した大きさより小さくならない。</p> <h2 id="3. max-height, max-width"><a href="#3.+max-height%2C+max-width">3. max-height, max-width</a></h2> <p>上の<code>min-</code>系とは逆に、高さや幅の最大値を設定する。指定すると、コンテンツの大きさにかかわらず、設定した大きさより大きくならない。</p> <h2 id="4. order"><a href="#4.+order">4. order</a></h2> <p>HTMLの要素の兄弟順をオーバーライドする。これを指定すると、強制的に兄弟要素の中でその順番になるように表示される。<code>nth-</code>系には影響しない。</p> <h2 id="5. visibility"><a href="#5.+visibility">5. visibility</a></h2> <p><code>display: none</code>と違って、表示したくないけれど領域は確保したいという場合に使える。</p> <h2 id="6. z-index"><a href="#6.+z-index">6. z-index</a></h2> <p>要素の描画順を設定するプロパティ。<code>position: fixed;</code>と使うことが多い。</p> <h2 id="7. clip-path"><a href="#7.+clip-path">7. clip-path</a></h2> <p>要素の見かけの外形を設定するプロパティ。うまく使えばCSSだけでいろんな表現が可能に。</p> <h2 id="8. will-change"><a href="#8.+will-change">8. will-change</a></h2> <p>要素のCSSプロパティがアニメーションで変化することをあらかじめブラウザに知らせる。パフォーマンス爆上がり。</p> <h2 id="9. transform"><a href="#9.+transform">9. transform</a></h2> <p>要素を移動、回転、拡縮、変形させるプロパティ。ちょっと場所がずれるときとか、アニメーションで動かしたいときに便利。</p> <h2 id="10. :root"><a href="#10.+%3Aroot">10. :root</a></h2> <p>root疑似クラス。document.documentElementを指し示すセレクタ。カスタムプロパティと組み合わせると応用範囲は無限大。メディアクエリと組み合わせるとモバイルビュー判定にも使える。</p> <pre><code class="css">@media screen and (max-width: 960px) { :root { --is-mobile: yes; } } @media screen and (min-width: 961px) { :root { --is-mobile: no; } } </code></pre> <h2 id="11. transform-origin"><a href="#11.+transform-origin">11. transform-origin</a></h2> <p>transformプロパティの基準になる点を指定するプロパティ。ローディング画面のスピナなどを作るときなど、意外と使える場面が多い。</p> <h2 id="12. position: relative"><a href="#12.+position%3A+relative">12. position: relative</a></h2> <p><code>position: absolute</code>が親要素を基準とした位置取りにならない!?って思ったときは大概こいつの設定忘れが原因。これが設定された要素の子要素に<code>position: absolute</code>が指定された場合、これが設定された要素を基準とした位置取りになる。</p> <h2 id="13. appearance: none"><a href="#13.+appearance%3A+none">13. appearance: none</a></h2> <p>デフォルトの見た目をなくすプロパティ。input要素に独自のスタイルを当てたいときなど、これを設定するとうまくいくことが多い。</p> <h2 id="14. box-shadow"><a href="#14.+box-shadow">14. box-shadow</a></h2> <p>要素が落とす影を設定するプロパティ。背景が設定されていない要素につけると違和感マシマシ。そういうインラインなテキスト要素に影をつけたい場合は、<code>text-shadow</code>プロパティを使うこと。</p> <h2 id="15. background-clip"><a href="#15.+background-clip">15. background-clip</a></h2> <p>きれいなタイトル文字の修飾をしたいときに。ヘッディング要素の<code>background-image</code>プロパティに適当な画像を設定して、このプロパティの値を<code>text</code>にすると、背景が文字の形で切り抜かれる。</p> <h2 id="16. background-attachment: fixed"><a href="#16.+background-attachment%3A+fixed">16. background-attachment: fixed</a></h2> <p>要素内のコンテンツが動いても、背景を動かしたくない場合に使う。サイトの背景に設定するといい感じになるかも。</p> <h2 id="17. border-radius"><a href="#17.+border-radius">17. border-radius</a></h2> <p>要素を角丸にできる。もはや説明不要。</p> <h2 id="18. :not"><a href="#18.+%3Anot">18. :not</a></h2> <p>セレクタにマッチしない要素にマッチする。例えば、<code>:not(.not-select)</code>というセレクタは、not-selectクラスを持たない要素にマッチする。</p> <h2 id="19. :first-child, :last-child, :nth-child, :nth-last-child"><a href="#19.+%3Afirst-child%2C+%3Alast-child%2C+%3Anth-child%2C+%3Anth-last-child">19. :first-child, :last-child, :nth-child, :nth-last-child</a></h2> <p>指定された順番にある兄弟要素にマッチする疑似クラス。</p> <h2 id="20. :first-of-type, :last-of-type, :nth-of-type, nth-last-of-type"><a href="#20.+%3Afirst-of-type%2C+%3Alast-of-type%2C+%3Anth-of-type%2C+nth-last-of-type">20. :first-of-type, :last-of-type, :nth-of-type, nth-last-of-type</a></h2> <p>指定された順番にある同じタグ(spanどうし、divどうしなど)の兄弟要素にマッチする疑似クラス。</p> <h2 id="21. :required"><a href="#21.+%3Arequired">21. :required</a></h2> <p>required属性のあるformパーツにマッチする。</p> <h2 id="22. :invalid"><a href="#22.+%3Ainvalid">22. :invalid</a></h2> <p>入力された値が要求された形式に従っていないformパーツにマッチする。</p> <h2 id="23. outline"><a href="#23.+outline">23. outline</a></h2> <p>borderの外側に描画されるborderみたいなやつ。borderと違って、それ専用に場所が確保されない。</p> <h2 id="24. attr()"><a href="#24.+attr%28%29">24. attr()</a></h2> <p>print画面でだけ<code>::after</code>疑似要素にurlを表示したいときなど、CSSのプロパティに特定のHTML属性を設定したいときに使用する。</p> <h2 id="25. user-select"><a href="#25.+user-select">25. user-select</a></h2> <p>ユーザーが要素を選択可能かどうかを設定する。spanにclickイベントを設定したときなど、選択されるのが鬱陶しかったり、要素を選択してほしくないときに使う。</p> <h2 id="26. pointer-events"><a href="#26.+pointer-events">26. pointer-events</a></h2> <p>要素のどこがマウスイベントをキャプチャするか指定するプロパティ。オーバーレイなど、ほかの要素より前に出るがマウスイベントをキャプチャしたくない要素には<code>none</code>を設定すると吉。</p> <h2 id="27. cursor"><a href="#27.+cursor">27. cursor</a></h2> <p>要素の上に乗ったカーソルの表示の種類を設定する。ユーザビリティが上がるらしい。</p> <h2 id="28. :checked"><a href="#28.+%3Achecked">28. :checked</a></h2> <p>チェックが入っているチェックボックスにマッチする。うまく活用するとHTML/CSSだけで開閉するメニューなどの2つの状態を持つUIが記述できる。</p> <h2 id="29. display: flex"><a href="#29.+display%3A+flex">29. display: flex</a></h2> <p>要素をflexboxにする。子要素の数によって、自動でいい感じに配置を決めてくれる。すごく便利。ついつい多用しがち。</p> <h2 id="30. justify-content"><a href="#30.+justify-content">30. justify-content</a></h2> <p>要素の配置を決めるプロパティ。上の<code>display: flex</code>と組み合わせて使うことが多い。</p> <h2 id="31. flex-flow"><a href="#31.+flex-flow">31. flex-flow</a></h2> <p>flexboxで、要素を配置する向きを決める。</p> <h2 id="32. flex"><a href="#32.+flex">32. flex</a></h2> <p>flexboxの子要素に指定するプロパティ。flex-grow、flex-shrink、flex-basisの3つを一気に指定できる。flex-growは要素がコンテナより小さいときにどれくらい大きくするか、flex-shrinkは逆に要素がコンテナより大きいときにどれくらい小さくするか、flex-basisは要素がコンテナの中でどれくらいの初期サイズを持っているのかを指定する。</p> <h1 id="そこまで使うわけでもないけど知っていたら便利なもの"><a href="#%E3%81%9D%E3%81%93%E3%81%BE%E3%81%A7%E4%BD%BF%E3%81%86%E3%82%8F%E3%81%91%E3%81%A7%E3%82%82%E3%81%AA%E3%81%84%E3%81%91%E3%81%A9%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E3%82%89%E4%BE%BF%E5%88%A9%E3%81%AA%E3%82%82%E3%81%AE">そこまで使うわけでもないけど知っていたら便利なもの</a></h1> <h2 id="33. position: sticky"><a href="#33.+position%3A+sticky">33. position: sticky</a></h2> <p>これを設定された要素が親要素の中でrelative + fixedのような振る舞いをするようになる。Qiitaのいいねボタンやストックボタンのスマホ版みたいな振る舞いがこれ(とtop, bottom, right, leftプロパティのどれか1つ以上)だけで記述可能。</p> <h2 id="34. text-indent"><a href="#34.+text-indent">34. text-indent</a></h2> <p>行頭字下げをするプロパティ。パラグラフの先頭で字下げしたいときに有効。</p> <h2 id="35. ::first-letter"><a href="#35.+%3A%3Afirst-letter">35. ::first-letter</a></h2> <p>ある要素の中で、最初の文字にマッチする疑似要素。パラグラフの最初の文字だけ大きくするような表現に使える。</p> <h2 id="36. ::select"><a href="#36.+%3A%3Aselect">36. ::select</a></h2> <p>ある要素の中で、現在選択されているものにマッチする疑似要素。選択部分の強調などに使える。</p> <h2 id="37. ::target"><a href="#37.+%3A%3Atarget">37. ::target</a></h2> <p>urlのターゲットになっている要素にマッチする。ページ内リンクで飛んだ先の要素を強調するのに使える。</p> <h2 id="38. perspective"><a href="#38.+perspective">38. perspective</a></h2> <p>transformと組み合わせて使う。遠近法をどの程度かけるか指定するプロパティ。</p> <h2 id="39. transform-style: preserve-3d"><a href="#39.+transform-style%3A+preserve-3d">39. transform-style: preserve-3d</a></h2> <p>これを三次元の移動回転変形を指定したtransformプロパティを持つ要素の親に指定することで、3次元的な描写を可能にすることができる。</p> <h2 id="40. filter"><a href="#40.+filter">40. filter</a></h2> <p>要素に指定したSVGフィルタをかける。<code>::before</code>に指定して背景をぼかしたり、グレイスケール化したり、いろいろな視覚効果を追加することができる。</p> <h2 id="41. ::marker"><a href="#41.+%3A%3Amarker">41. ::marker</a></h2> <p>::marker<br /> リストのマーカーにマッチする疑似要素。</p> <ul> <li>←これがリストのマーカー。</li> </ul> <h2 id="42. ::placeholder"><a href="#42.+%3A%3Aplaceholder">42. ::placeholder</a></h2> <p>formパーツ要素のplaceholderにマッチする。placeholderの色やフォントなどを変えたいときに便利。</p> <h2 id="43. :defined"><a href="#43.+%3Adefined">43. :defined</a></h2> <p>任意のCustomElementにマッチする。</p> <h2 id="44. quotes"><a href="#44.+quotes">44. quotes</a></h2> <p><code><q>~</q></code>のタグを使ったときに表示される引用符を制御できる。それ以外のタグの場合も、以下のようにして利用できる。</p> <pre><code class="css">blockquote { quotes: "「" "」"; } blockquote::before { content: open-quote; } blockquote::after { content: close-quote; } </code></pre> <p>より正確な動作の説明としては「<code>open-quote</code>と<code>close-quote</code>の値を制御する」ということになる。</p> <h2 id="45. text-overflow"><a href="#45.+text-overflow">45. text-overflow</a></h2> <p>文字がコンテナのサイズを超過したときの処理を設定する。<code>...</code>のような記号で省略したり、それ以外の文字で省略したり、あるいはそれ以上を表示しなかったりするような表現が可能。</p> <h2 id="46. writing-mode"><a href="#46.+writing-mode">46. writing-mode</a></h2> <p>文字を縦書きにするか横書きにするか設定できる。サイトの種類によっては多用することもあるかも。</p> <h2 id="47. text-orientation"><a href="#47.+text-orientation">47. text-orientation</a></h2> <p><code>writing-mode</code>を<code>vertical-rl</code>または<code>vertical-lr</code>にしたときに、文字をどの向きで配置するか設定する。</p> <h2 id="48. clear"><a href="#48.+clear">48. clear</a></h2> <p>浮動要素のまわりの固定要素の配置(回り込み)を指定する。浮動要素しか含まないような要素の高さを維持するために使うこともできる。</p> <pre><code class="css">.float-only::after { content: ""; display: block; clear: both; } </code></pre> <h2 id="49. all"><a href="#49.+all">49. all</a></h2> <p>すべてのプロパティを一気に設定できる。親要素からすべてのスタイルを継承したいときや、逆に継承したくないとき、デフォルトの見た目にしたいときに使える。</p> <h2 id="50. touch-action"><a href="#50.+touch-action">50. touch-action</a></h2> <p>要素に対して可能なタッチアクションの種類を制限できる。たとえば、ズームしてほしくないとか、縦方向のスクロールを制限したいとかそういう場合に便利。Cookie Clickerのタッチ領域にこれを指定してほしいと何度思ったことか。</p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>CSS難しい……。MDNの解説ってプロパティごとに内容の質にけっこうばらつきが大きいんですね。</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <ul> <li>https://developer.mozilla.org/en-US/docs/Web/CSS</li> <li>https://www.w3schools.com/cssref/</li> </ul> <p>Happy Hacking!</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.tech-frodo.xyz/2019/08/useful-css.html">この記事はブログにも投稿しています。</a></p> frodo821