質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

1回答

319閲覧

WEBページで、常時固定のフッターを実装したいが、上手くいかない

dwayne_johnson

総合スコア86

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

1クリップ

投稿2018/03/15 13:13

編集2018/03/16 14:19

#常時固定のフッターを作成したい
アプリ等でよく見る、常時固定のフッターです。ボトムナビゲーションを表示させます。

構造は簡単に、<div class="contents"><footer>があるものとします。

##フッターを下部に固定する方法としては2つあると考えています。

  • footerをposition: fixed;で位置指定し、contents下部にmarginなりpaddingで余白を確保

  • display:flex;を使って、contentsをflex:1 1 0;、footerをflex:0 0 4rem;などとすることで、contents領域を可変に、footer領域を固定にする。(もちろんflex-direction: column;を指定する

ですが、position: fixed;によるアプローチは使いたくありません。できる限りDRYにしておきたいです。
そのため、flexレイアウトによる手法をとろうと考えたのですが...

#contents領域が画面のサイズに収まらない場合、footerが画面から消える
つまりcontentsのflex-shrinkが効いていない?のだと思います。

求めている挙動としては、

  • footerは4remで常時固定され、contents部分は4remを引いた残りがheightとして割り当てられる
  • 残りのheightよりcontentsの中身のheightが大きい場合は、フッターは表示されたままコンテンツ部分のみスクロールできるようにする

です。

overflow: scroll;を使えば解決するのですが、スクロールバーの表示は大変いやなので、使いたくないです。親要素をゴニョゴニョしてスクロールバーを隠す方法の存在は知っていますが、それもまたDRYでなく、壁がいつか出てくると思うので避けたい。

どうにかflexを使いながら常時フッターを固定する方法はないのでしょうか?
それとも、一般的な常時固定フッターは全てposition: fixed;を使っているのですか?

そこらへんの事情などもご存じの方がいましたら、教えて頂きたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/17 13:33

position と display は用途が全く違うものだからそれだけで同じ設定ぽくすることは不可能ですよ
yoshinavi

2018/03/17 14:16

アプリの場合が一般的かどうかは知識不足で定かではありませんが、CSSで言えば「fixedで固定」が一般的だと思います。
cheche0830

2018/04/04 09:56

flexを使う理由がないですね。fixedでやるのが普通だと思います。DRYというのもよくわかりません・・・
guest

回答1

0

自己解決

うーん、fixedしかないのかぁ

投稿2018/04/04 12:11

dwayne_johnson

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshinavi

2018/04/05 00:07

質問者さんのDRYの意味が何となく分かりましたが、囲う要素の位置・高さでは無く、中のコンテンツ自体が各デバイスの表示領域に合わせた高さに変動しない以上は、やっぱりfixedでしょうね。 自身で言ってらっしゃる「スクロール(対処も含めて)」「flex対応(GridSystem等も含めて)」もコンテンツ部分では無く、囲う要素を強制的に確保するだけなのでDRYではないような気がします。結局はfixedが無難でDRYなのでは? ・・・DRYの使い方が間違っているかもです(^^;)
dwayne_johnson

2018/04/05 04:30 編集

“DRY”でいろんな人を惑わせたようで。。 “DRY”は何となく覚えたてだったので使いたかったんです笑 すんません 何となく、無理にpaddingを確保して、そこにfixedで要素を重ねるって方法に違和感を感じていて(paddingは余白であって、何かを乗せるためのスペース確保ではないような気が)、誰かご存知ないかと質問した次第なのですが、やはりなさそうですね。 とりあえずfixedで実装は変えずに、何か良い方法見つけたらここに書きます
yoshinavi

2018/04/05 04:59 編集

>無理にmarginを確保して、そこにfixedで要素を重ねる margin設定でなく、その部分にスペース確保用「空のdiv」等でも良いとは思いますが、一般的には不要なコードを書かないためにmarginでスペースを確保していると思います。 個人的な考えですが、marginは外側の「余白」と言うよりは他要素との「間隔」であり、paddingが「余白」と考えるようにしています。 -追記- あれ? marginとpaddingを見間違えていたようで、お恥ずかしい・・・ (>_<;)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問