
スクロール時サイドバーを左側で固定位置に配置する方法
最近よくみかける、
画面を一定量スクロールした時、ページ途中にあるサイドバーなどを固定位置に配置する方法
を実現させたいと思っています。
で、固定したいサイドバーは左側です。
そして、後述の方法だと可能なのですが、
メイン部分(#main)をfloat:rightからfloat:leftにかえると、
ある程度スクロールしたあとsideとメイン部分のdivが重なってしまいます。
なおまた、IE11だと固定すらしません。
とりあえず、わからなくても実現できればいいので、
画面を一定量スクロールさせたあと、左側のサイドバーが固定される方法をお教えいただけないでしょうか?
(URLだけでもかまいません)
どうも検索しても、右側のサイドバーを固定している例ばかりでして、左側固定を探しています。
よろしくお願い申し上げます。
=====
以下コード(タブを全角空白4つに変換してあります)
================
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画面を一定量スクロールした時、ページ途中にあるサイドバーなどを固定位置に配置する方法 (DEMO)</title>
<style>
* {
margin : 0;
padding : 0;
}
body {
color: black;
background: gray;
}
h1 {
font-size: 14px;
font-weight: bold;
margin: 10px;
}
h3 {
font-size: 14px;
font-weight: bold;
margin-bottom : 10px;
padding : 0;
}
/*********************************************************************/
#side {
background: white;
border-top: 4px solid black;
border-bottom: 4px solid black;
color: black;
display:inline-block;
font-size: 14px;
height: 300px;
padding: 0px;
width: 200px;
float:left;
}
.fixed {
position: fixed;
top: 10px;
float:left;
width: 200px;;
z-index: 10000;
}
/*********************************************************************/
#tops {
background: white;
border: 4px solid black;
border-radius: 6px;
margin: 10px auto;
width: 900px;
}
#main {
background: white;
border: 4px solid black;
border-radius: 6px;
color: black;
font-size: 14px;
float: right;
height: 5000px;
margin-right: 10px;
margin-bottom: 10px;
padding: 10px;
width: 540px;
}
#goal {
margin: auto;
width: 900px;
display: block;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8. …
<script type="text/javascript">
$(function($) {
var tab = $('#glovalnavi'), offset = tab.offset();
$(window).scroll(function () {
if($(window).scrollTop() > offset.top) {
tab.addClass('fixed');
} else {
tab.removeClass('fixed');
}
});
});
</script>
</head>
<body>
<div id="tops">
<h1>画面を一定量スクロールした時、ページ途中にあるサイドバーなどを固定位置に配置する方法 (DEMO)</h1>
</div>
<div id="side">
<h3>side部分</h3>
<p>
この部分がスクロールされても、残ります。
</p>
</div>
<div id="main">
<h3>メイン部分</h3>
<p>
上下にスクロールしてみてください。<br>
あいうえお<br>
あいうえお<br>
あいうえお<br>
あいうえお<br>
あいうえお<br>
あいうえお<br>
あいうえお</p>
</div>
<div id="goal"></div>
</body>
</html>
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.1です。
基本的な考え方は、absoluteとfixedの組み合わせです。
absoluteもfixedも、それが含まれる部分から切り離されるため、他の要素はあたかもそれが存在しなかったように振舞います。
⇒9.3.1 位置決め方式の選択: 'position'プロパティ( http://momdo.s35.xrea.com/web-html-test/spec/CSS … )
absolute
絶対配置のボックスは通常フローの範囲外である。これはボックスが以降の兄弟に影響を与えないことを意味する。
fixed
handheld、projection、screen、tty、tvメディアタイプの場合、ボックスはビューポートに対して固定され、スクロール時に移動しない。
注意点は、absoluteは、staticでない直近のコンテナブロックの位置を基準にし、fixedはビューポート(表示範囲)を基準にするという事です。
absoluteで指定されていたものが、スクロールされて末端まできたら、fixedに切り替わるわけです。
>メイン部分(#main)をfloat:rightからfloat:leftにかえると、
floatは使えないことが分かると思います。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文書構造的には
<body>
<header>
</header>
<section>
<nav>
<ol></ol>
</nav>
</section>
<footer>
</footer>
</body>
とする。
★HTMLより前のHTMLでしたら、それぞれ「id属性及び class属性と併用することで、文書に構造を付加する( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」のですから、<div class="header">と読み替えてください。
詳しい説明や方法は参考ページを挙げておきます。
>画面を一定量スクロールさせたあと、左側のサイドバーが固定される方法をお教えいただけないでしょうか?
なお、この方法は欠点もあります。左側--ナビゲーションをクリックしてリンクしたらナビゲーションの位置が変わってしまうということになり、ユーザーインターフェース的には使いづらいものになります。
当初からfixedにしておいて、そこに収まる程度のメニューにして、必要ならプルダウンにしておくほうが圧倒的に使いやすくなると思います。だから私は使わない。
リンク先のページでは、head内にカレントのメニューは開いたままにするスタイルを追加する。
⇒サイドメニューなどを一定の範囲でのみ position:fixed させる jQuery Ex Flex Fixed - Cyokodog :: Diary( http://d.hatena.ne.jp/cyokodog/20110904/exflexfi … )
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
画像イメージの上下左右、欲し...
-
IEの表示だけおかしい
-
CSSがなぜかfont-sizeだけ効か...
-
CSSと<dl><dd>で間隔をあけて1...
-
cssで「下よせ」ってどうやって...
-
CSS3で角丸写真にシャドーを付...
-
safariでの横並びリスト(List...
-
form input テキストを上下中央...
-
Internet Explorer 6、7のレイ...
-
ページ内リンクがずれてしまう
-
dl,dt,ddタグでdtに対して、row...
-
中点「・」の改行について
-
CSSで画面サイズを縮小するとレ...
-
widthやheightの数値に単位(px...
-
スタイルシートの適応のやり方
-
div内に外部のurlを表示させたい
-
【HTML】【CSS】【Swiper】 元...
-
css初心者 フレックスボックス...
-
CSSで横の段組-センタリングす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
form input テキストを上下中央...
-
<div>と<div>の間の10px程の...
-
【CSS】ヘッダーの高さが不明の...
-
余分な縦スクロールバーが出て...
-
CSSがなぜかfont-sizeだけ効か...
-
css初心者 フレックスボックス...
-
W3Cのソースコードの検証サービ...
-
表示倍率を変えるとレイアウト...
-
div内に外部のurlを表示させたい
-
画像イメージの上下左右、欲し...
-
table周辺の隙間をなくしたい。
-
divで囲まれたpaddingの指定を...
-
CSSで背景画像を一番下にもって...
-
HTMLのiframeの入れ子について
-
footer を横幅いっぱいに広げる...
-
CSSでボックスのheightが0になる
-
テーブル内の画像をマウスオー...
-
スクロールボックスを中央に配...
おすすめ情報