2021.02.06

HTML・CSS

高さを判定してoverflow-yプロパティで縦スクロール

画面の高さが要素の高さよりも低くなった場合、要素にoverflow-yプロパティを適用して要素内のコンテンツを縦スクロールで表示します。
デモページはこちら

画面の高さと要素の高さはjQueryでspanタグ内に出力します。

<div class="contents">
<p class="title">resize</p>
<p>画面の高さ:<span class="winh"></span><br>ボックスの高さ:<span class="boxh"></span></p>
<div class="box">
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキストダミーテキストダミーテキストダミーテキスト</p>
	<p>ダミーテキスト終了</p>
</div>
</div>

画面の高さが要素の高さよりも低くなった場合、要素にoverflow-y: auto;とheight: calc(100vh - 181px);を適用します。縦スクロールの表示にはoverflow-yとheight、両方のプロパティが必要です。要素の高さ100vhから181pxを差し引いているのは、要素以外のコンテンツを表示するためです。181pxは要素以外のコンテンツの高さです。jQueryで算出しています。
またbodyタグにクラス名is-fixedを適用して、ウィンドウの縦スクロールを非表示にします。
bodyタグに適用している-webkit-text-size-adjust: 100%;は、スマートフォンを横向きにした時に文字サイズが大きくなってしまうのを防ぐ設定です。デフォルト値のautoから100%に変更することで、文字サイズの自動調整をオフにできます。

body {
	-webkit-text-size-adjust: 100%;
}
.is-fixed {
	position: fixed;
	width: 100%;
	height: 100%;
}
.box {
	max-width: 280px;
	margin: 0 auto;
	border: 1px solid #000;
	padding: 1em;
}
.is-overflow-y {
	overflow-y: auto;
	height: calc(100vh - 181px);
	background: #3bbbff;
}

jQueryはページ読み込み時とリサイズ時の動作を設定します。要素の高さは固定値にして、画面の高さと比較してクラス名を付けるか付けないか判定します。

$(window).on('load resize', function() {
  var winh = $(window).height();

  if( 421 > winh ) {
    $('body').addClass('is-fixed');
    $('.box').addClass('is-overflow-y');
  } else {
    $('body').removeClass('is-fixed');
    $('.box').removeClass('is-overflow-y');
  }

  var boxh = $('.box').outerHeight();
  $('.winh').text(winh + 'px');
  $('.boxh').text(boxh + 'px');

  //ボックス以外のコンテンツの高さ算出用
  //var contentsh = $('.contents').outerHeight();
  //console.log(contentsh - boxh);
});

関連記事

2024.08.16

HTML・CSS

flex-shrinkで文字の改行を防ぐ

flexボックスのレイアウトで、flexアイテムにflex-shrinkプロパティを指定してテキストが改行されるのを防ぎます。デモページはこちら 以下のhtml…

2020.10.30

HTML・CSS

Twitterボタンの設置とカスタマイズ

デモページはこちら Twitterボタンの設置とカスタマイズのまとめです。ボタンのソースコードは以下の公式サイトから生成できます。ただし、jsの読み込みが必要に…

2025.05.08

HTML・CSS

text-decorationを利用した文字の下線

text-decorationプロパティを利用して複数行の文字に下線を引きます。複数行に対応させるため、inline要素に適用します。デモページはこちら 以下の…

2022.05.11

HTML・CSS

CSSのcalc記述時の注意点

CSSのcalcはCSS3で追加された関数です。calc記述時は以下の点に注意が必要です。 加算・減算の演算子の左右には半角スペースが必要 乗算は掛けられる方(…

2024.09.05

HTML・CSS

radial-gradientで作る水玉模様

background-imageプロパティのradial-gradientで水玉模様を作成します。わかりやすいように背景を繰り返し前と繰り返し後で比較します。デ…

上に戻る