[CSS & jQuery]凍結div位置

  • 16555
  • 0

[CSS & jQuery]凍結div位置

前言
這是個算蠻常見的需求,實際需要的知識也不多。但對一開始寫Web的人來說,門檻還是不低。這邊記錄一下,供大家參考。(by the way, 我也是CSS苦手,所以各位前輩有更好的方式或建議,請不要吝嗇指點一二)

範例需求
在MasterPage上,有一個div需要呈現目前程式名稱(或是時間之類的資訊),且此div位置要定住,也就是當頁面scroll bar往下捲時,user仍希望看到這個資訊。

主要Concept
其實很簡單,要定住的div就只是css中,position設成fixed而已。搭配其他的細節,例如下方的div的margin-top,應該設定為上方div的高度加上一點點留白。另外就是,這個div的寬度,要隨著視窗大小而改變。所以除了一開始$(document).ready()要設定以外,$(window).resize()也要設定。

Sample
我們設定一下我們的MasterPage:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src='<%#ResolveUrl("~/Scripts/jquery-1.4.1.min.js") %>'></script>
    
    <style type="text/css">
        .freeze
        {
            top: 0px;
            position: fixed;
            background-color: #7AAFFF;
            height: 20px;
            text-align: center;
            vertical-align: middle;
        }
        
        .main
        {
            margin-top:24px;
        }
    </style>
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
    <script type="text/javascript">
        $(document).ready(freezeFunctionTitle);
        $(window).resize(freezeFunctionTitle);

        function freezeFunctionTitle() {
            $('#header').addClass("freeze").css("width", $('#page').width() + 'px');
        }
    </script>
</head>
<body>
    <form runat="server">
    <div id="page">
        <div class="header" id="header">
            <asp:Label ID="lblFunTitle" Font-Bold="true" Font-Size="16px" runat="server"></asp:Label>
        </div>
        <div class="main" >
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </div>
    </div>    
    </form>
</body>
</html>

.master.cs則只是set label的值與binding Page.Header

    protected void Page_Load(object sender, EventArgs e)
    {
        this.lblFunTitle.Text = string.Format("重新整理頁面時間:{0}", DateTime.Now.ToString());
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Page.Header.DataBind();
    }

 

 

接著我們來看一下畫面:

  1. 查完資料的畫面:
    image

  2. 捲軸往下捲的畫面:
    image

  3. 縮小視窗的時候位置也不會跑掉:
    image

    image

 

 

結論
jQuery還是很好用的,寫網頁CSS還是得懂一些…希望對大家有幫助。


Sample Code : FreezeDiv.zip

 


blog 與課程更新內容,請前往新站位置:http://tdd.best/