ビューポートの高さを超えた場合にのみ、固定要素のコンテンツをスクロール可能にするにはどうすればよいですか?


94

私がしているdivに位置しfixed、メニューやナビゲーションリンクを含む、Webページの左側にあります。cssから設定された高さはなく、コンテンツによって高さが決まり、幅は固定されています。問題は、コンテンツが多すぎると、divウィンドウの高さよりも大きくなり、コンテンツの一部が表示されなくなることです。(位置があるので、ウィンドウをスクロールすると、ヘルプがないfixedし、divスクロールしません。)

設定してみました overflow-y:auto;が、それも役に立ちません。divは、その一部がウィンドウの外にあることに気付いていないようです。

divハングがウィンドウの外にぶら下がっている場合、必要な場合にのみコンテンツをスクロール可能にするにはどうすればよいですか?


CSS calc()を使用したソリューションは、stackoverflow.com / q / 29754195/3168107にあります。
Shikkediel 2015

calc()実験的な技術であり、予期ない結果が生じる可能性があります。それを使用することを選択した場合は、ターゲットオーディエンスを知っていることを確認し、それらのブラウザでテストしてください。
c1moore 2015

同じ問題が発生し、max-heightのようなものを使用しました:calc(100vh-100px); 私のナビゲーションバーとパディングが最大100pxを作成していた場所
Zia Ul Rehman Mughal

回答:



41

以下のリンクは、私がこれをどのように達成したかを示しています。それほど難しいことではありません-賢いフロントエンド開発者を使用する必要があります!!

<div style="position: fixed; bottom: 0%; top: 0%;">

    <div style="overflow-y: scroll; height: 100%;">

       Menu HTML goes in here

    </div>

</div>

http://jsfiddle.net/RyanBrackett/b44Zn/


1
過小評価された答え。私のユースケースの場合-外部divスタイルはposition: fixed; bottom: 0%; top: 0%; overflow: scroll; height: 100vh;、コンテンツに基づいて外部divをスクロール可能にします。
kilogic



3

これは、フレックスボックスの魔法で絶対に実行できます。このペンを見てください

このようなCSSが必要です:

aside {
  background-color: cyan;
  position: fixed;
  max-height: 100vh;
  width: 25%;
  display: flex;
  flex-direction: column;
}

ul {
  overflow-y: scroll;
}

section {
  width: 75%;
  float: right;
  background: orange;
}

これはIE10 +で機能します


2

これが純粋なHTMLとCSSのソリューションです。

  1. 位置が固定されたナビゲーションバーのコンテナボックスを作成します。高さ:100%;

  2. 次に、高さが100%の内箱を作成します。オーバーフロー-y:スクロール;

  3. 次に、そのボックスの中にコンテンツを出します。

コードは次のとおりです。

.nav-box{
        position: fixed;
        border: 1px solid #0a2b1d;
        height:100%;
   }
   .inner-box{
        width: 200px;
        height: 100%;
        overflow-y: scroll;
        border: 1px solid #0A246A;
    }
    .tabs{
        border: 3px solid chartreuse;
        color:darkred;
    }
    .content-box p{
      height:50px;
      text-align:center;
    }
<div class="nav-box">
  <div class="inner-box">
    <div class="tabs"><p>Navbar content Start</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content End</p></div>
    </div>
</div>
<div class="content-box">
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
</div>

jsFiddleへのリンク:


0

私はこれを解決ではなく回避策として提示しています。これは常に機能するとは限りません。非常に奇妙な環境で、内部使用のために非常に基本的なHTMLページを作成しているので、このようにしました。本当に素晴らしいナビゲーションバーを実行できるMaterializeCSSのようなライブラリがあることを私は知っています。(私はそれらを使用するつもりでしたが、それは私の環境では機能しませんでした。)

<div id="nav" style="position:fixed;float:left;overflow-y:hidden;width:10%;"></div>
<div style="margin-left:10%;float:left;overflow-y:auto;width:60%;word-break:break-all;word-wrap:break-word;" id="content"></div>


0

あなたの目的のために、あなたはただ使うことができます

position: absolute;
top: 0%;

それでも、サイズ変更、スクロール、応答性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.