レスポンシブが苦手な方必見!アスペクト比(縦横比)を固定するCSS

この記事は5分で読めます

こんな方におすすめ

  • レスポンシブコーディングが苦手…
  • 要素の縦横の比率を変えずに拡大、縮小できるようにしたい。
  • iframe要素をどのデバイスでも崩れないように表示したい。

ほとんどのブラウザで使える便利なCSSを使ったものや、IEにも対応したやり方もご紹介します!

その0:前提条件

  • 今回あなたはサイトに地図を埋め込みます。
  • 地図のアスペクト比(縦横比)は16:9で固定したい。
  • PCでは最大幅を800pxで固定したい。

以上の条件を満たすにはどうしたらいいのか、コーディングしてみたいと思います!

<div class="sample-map">
  <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d51908.537338077775!2d139.45546210431223!3d35.596070728264486!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x6018fa4bafd5271d%3A0x4ed9e16763a0aa28!2z56We5aWI5bed55yM5bed5bSO5biC6bq755Sf5Yy6!5e0!3m2!1sja!2sjp!4v1651304213950!5m2!1sja!2sjp" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>

こちらの地図を使って実演してみたいと思います!
ぜひ、お手持ちにのパソコンのディベロッパーツールを使って、画面を縮小しながら確かめてみてください!

その1:aspect-ratioプロパティ

aspect-ratioプロパティを使ったコーディングは後述する方法よりも簡単にアスペクト比を固定できるのでとても重宝します。

.sample-map{
  max-width: 800px;
  aspect-ratio: 16/9;/*縦横比が16:9なので16/9です。*/
  margin: 0 auto;
}
.sample-map iframe{
  width: 100%;
  height: 100%;
}

このCSSを実行した結果がこちらです↓

これで最大幅になった後も、マップのアスペクト比は固定されました。
このaspect-ratioプロパティは現在ほとんどのモダンなブラウザで対応しています。
ですがIEなど一部のブラウザでは非対応なので、後述する方法で実装することをおすすめします。案件ごとに使い分けてみてください。

対応しているブラウザはこちらです!

その2:padding-topハック

.sample-map{
  position: relative;
  max-width: 800px;
  margin: 0 auto;
}
.sample-map iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.sample-map::before{
  content: "";
  display: block;
  padding-top: 56.25%;/*9÷16×100%=56.25%のため*/
}

このCSSを実装した結果がこちらです↓

これで上のマップと同じ結果になったかと思います!
この方法はpadding-topハックと呼ばれている方法です。
.sample-mapの擬似要素にpadding-topで数値を指定します。よく使われるアスペクト比を計算した数値を記載しておきますので参考にしてみてください。

  • 16:9 → 9÷16×100=56.25%
  • 4:3 → 3÷4×100=75%
  • 3:2 → 2÷3×100=66.67%
  • 2:1 → 1÷2×100=50%

のんびりですが、初学者の方に役立つ情報を自身のアウトプットも兼ねて発信しております。

もし、この記事が良かった、ためになったという方は、シェアしてくれるととても嬉しいです。

知ってると便利!3分でわかる!position: sticky;の使い方

この記事は3分で読めます!

こんな表現に使えます!

position: sticky;を使うと、使われた要素をを指定した位置に固定することができます。
よくさまざまなサイトでヘッダーやフッター、サイドバーなどが、上下にスクロールしても固定されているのを見かけます。

従来だとposition: fixed;を使用して、要素が被らないように直下の要素に余白を入れなければならなかったですが、その手間が省けます。

早速コードを見ながら解説いたします。

※IEは対応していませんが、polyfillを使うと使用できるのでその方法も載せています。

コードの書き方

ヘッダーやフッターを固定する

まずは、ヘッダーとフッターを固定したパターンです。

See the Pen position: sticky;<2> by だいすけ@Web制作頑張るパパ (@mdmmmk1123) on CodePen.

見出しを規定の位置で固定する

ヘッダーとフッターを固定+規定の高さにきたときに固定する方法です。

See the Pen position: sticky;<2> by だいすけ@Web制作頑張るパパ (@mdmmmk1123) on CodePen.

コードの解説

ヘッダーやフッターを固定する

header {
	position: sticky;
	top: 0;
}

footer {
	position: sticky;
	bottom: 0;
}

固定したい要素にposition: sticky;をつけます。
topもしくはbottomで画面上のどの位置で要素を止めるのかを決めます。
フッターに関しては画面の一番下で固定されますが、すぐ下にコピーライトのdivが存在するのでその要素がスクロールされるタイミングで固定は解除されます。
これにより、固定しつつ表示を邪魔しないようにできます。

見出しを規定の位置で固定する

h2 {
  position: sticky;
  top: 110px;/*ヘッダーの高さの終わりから固定させるため*/
  z-index: 50;/*重なり順をヘッダーより下にする*/
  margin: 0;
}

header {
  z-index: 100;/*重なり順を見出しより上にする*/
}

見出しの箇所にもposition: sticky;をつけますが、要素がスクロールする際に、headerの上に重なってしまうので、headerとh2にz-indexで重なりの順番を決めてあげると解消されます。今回はヘッダーは常に表示されている状態にしたいのでh2よりz-indexの値を小さくしています。

polyfillを使う場合

<script src="https://cdnjs.cloudflare.com/ajax/libs/stickyfill/2.1.0/stickyfill.min.js"></script>
/*上記のcdnより下に記載*/
<script>
  var elements = document.querySelectorAll(".クラス名");
  Stickyfill.add(elements);
</script>

<script>
  var elements = $('.クラス名');
  Stickyfill.add(elements);
</script>

これにより、IE11でも使用することができます。
※表の見出しだけは固定できませんが、表示そのものは崩れません。

要素の固定表示に便利なposition: sticky;是非使ってみてください!

子育て×Web制作ブログを始めたきっかけ

初投稿は、なぜこのブログを開設したのかについて
今までの自分の経験談から発信していきます。

チャレンジするママ、パパを応援したい

チャレンジするのに遅すぎることはありません。
ですが、なかなか時間がとれなかったりして
挫折してしまう方もいらっしゃるのではないでしょうか?

月並みな言葉ではありますが、今日、この日が人生で一番若いのです。

自分の経験から、皆さんを応援できるような記事をあげていきたいと思います。

自分が覚えたことを噛み砕いて理解するため

本や動画で学習を終えるとそこで触ったコードは基本的にまた使うことが少なかった自分


「せっかく学んだのに自分の中に留めておいて、ましてや忘れるなんてもったいない」


そう感じたのでWeb制作に関連することで覚えたことはこまめに発信しようとこのブログを作りました。

他にも自分が読んだ本や実体験から、誰かに役に立つ記事を少しでも発信して、自分が見返したり、誰かの助けになることを目標に記事を書いていきます。
コーディングだけでなく、Adobe製品で学んでいることも記事にしていこうと思っています。

初心者だった自分もつまずいてたくさん調べた経験から、より初学者さんにもわかりやすい記事を書けるように心がけていきます。

「子育てって楽しいよね」を発信していきたいから

4月の末にかわいい息子が生まれました。
もう、本当に可愛くて仕方がないんです。
とてつもない親バカであると自負しています。

ですが、世の中には、親から子への虐待や、未来ある尊い命が失われる悲しい事件がよくニュースになったりしています。

「子育て」は決して楽しいことばかりではありません。

夜泣きをして眠れないこともあります。
自分のしたいこともあるのに子どものことが優先になって辛い時もあります。
怒ってしまって、「言いすぎたかな」と自己嫌悪することもあります。

まだまだ言い表せないくらい大変なことがあります。

辛いことがある中で「楽しさ」や「愛しさ」もあると思います。

自分に笑いかけてくれたこと。
初めて、ママ、パパって呼んでくれた日。
初めて立って歩いた姿。
美味しそうにご飯を食べる姿。

感情が揺さぶられるシーンもまた、数え切れないくらいあると思います。

ふと、子育てが辛い時に、私のブログをみて元気になってくれる人が1人でもいたらいいなと思い、
子育てあるあるや、有益な情報、感動したことなんかを発信していきます。

家事、育児に参加するパパが増えてほしい

現在の日本は、働いている男性の育児参加率はおよそ3割ほどと言われています。
結婚年齢が少しづつ高くなっている傾向にあるので、一人暮らしの経験から家事を分担できる男性は増えてきてると思います。

ですが育児はどうでしょう?
育児は子どもがいて初めて成り立ちます。
なので、みんなが最初の子どもは子育て未経験から始まるのです。
「子どもとどう接して良いかわからない。」
「妻が家にいないと不安になる。」
そういった方は少なくないのではないでしょうか?

そんな方々に向けて家事の上手なやり方や、育児に関するよくある悩みなどに、
フォーカスを当てた記事も書いていきます。

思い

いろんな家庭環境がある中で、
ママやパパが笑顔でイキイキして過ごす毎日が、子どもとっても幸せであると考えています。
そんな家庭が一つでも増えてほしくてこのブログを立ち上げました。
一人でも多くの方に届くように更新頑張っていくのでよろしくお願いします!