日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

CSS3与页面布局学习总结——多种页面布局

發布時間:2024/6/21 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 CSS3与页面布局学习总结——多种页面布局 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、負邊距與浮動布局

1.1、負邊距

所謂負邊距就是margin取負值的情況,如margin:-40px;margin-left:-100%。當一個元素與另一個元素margin取負值時將拉近距離。常見用法如下:

1.1.1、向上移動

當多個元素同時從標準流中脫離開來時,如果前一個元素的寬度為100%寬度,后面的元素通過負邊距可以實現上移。當負的邊距超過自身的寬度將上移,只要沒有超過自身寬度就不會上移,示例如下:

示例代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            #div1 {
                height: 100px;
                background: lightblue;
                width: 100%;
                float: left;
            }
            
            #div2 {
                height: 100px;
                background: lightgreen;
                width: 30%;
                float: left;
                margin-left: -100%;
            }
        </style>
    </head>

    <body>
        <div id="div1">div1
        </div>
        <div id="div2">div2
        </div>
    </body>

</html>

div2的margin-left:-29%時的運行結果:

div2的margin-left:-30%(為自己自身寬度)時的運行結果:

div2的margin-left:-100%時的運行結果:

1.1.2、去除列表右邊框

開發中常需要在頁面中展示一些列表,如商品展示列表等,如果我們要實現如下布局:

示例代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            #div1 {
                width: 800px;
                margin: 0 auto;
                border: 3px solid lightblue;
                overflow: hidden;
                margin-top: 10px;
            }
            
            .box {
                width: 180px;
                height: 180px;
                margin: 0 20px 20px 0;
                background: lightgreen;
                float: left;
            }
        </style>
    </head>

    <body>
        <div id="div1">
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
        </div>
    </body>

</html>

View Code

運行結果:

但是上面的效果中右邊多出了20px的距離,底下多出20px空白,解決方法如下:將包裹在外層最近的div的右邊距賦值為-20px(margin-right:20px),同時最外層div的寬度也要減去多出的那20px(從800px變為780px),下面多出的20px則給div的高度設小20px即可,代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            #div1 {
                width: 780px;
                height: 380px;
                margin: 0 auto;
                border: 3px solid lightblue;
                overflow: hidden;
                margin-top: 10px;
            }
            .box {
                width: 180px;
                height: 180px;
                margin: 0 20px 20px 0;
                background: lightgreen;
                float: left;
            }
            #div2{
                margin-right: -20px;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            <div id="div2">
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
            </div>
        </div>
    </body>
</html>

方法是使用了邊距折疊,基本原理如下圖所示:

1.1.3、負邊距+定位,實現水平垂直居中

具體參考前面的隨筆:多種垂直居中的辦法

1.1.4、去除列表最后一個li元素的border-bottom

方法一:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                list-style: none;
            }
            #news {
                width: 200px;
                border: 2px solid lightblue;
                margin: 20px 0 0 20px;
            }
            
            #news li{
                height: 26px;
                line-height: 26px;
                border-bottom: 1px dashed   lightblue;
            }
            .lastLi{
                margin-bottom:-1px ;
            }
        </style>
    </head>
    <body>
        <div id="news">
            <ul>
                <li>Item A</li>
                <li>Item B</li>
                <li>Item C</li>
                <li>Item D</li>
                <li class="lastLi">Item E</li>
            </ul>
        </div>
    </body>
</html>

方法二:

使用CSS3中的新增加選擇器,選擇最后一個li,不使用類樣式,好處是當li的個數不確定時更加方便。

如果li的border-bottom顏色與ul的border顏色是一樣的時候,在視覺上是被隱藏了。如果其顏色不一致的時候還是有問題,給ul寫個overflow:hidden;就可以解決這個問題。

1.2、雙飛翼布局

經典三列布局,也叫做圣杯布局【Holy Grail of Layouts】是Kevin Cornell在2006年提出的一個布局模型概念,在國內最早是由淘寶UED的工程師傳播開來,在中國也有叫法是雙飛翼布局,它的布局要求有幾點:

1、三列布局,中間寬度自適應,兩邊定寬;
2、中間欄要在瀏覽器中優先展示渲染;
3、允許任意列的高度最高;
4、要求只用一個額外的DIV標簽;
5、要求用最簡單的CSS、最少的HACK語句;

在不增加額外標簽的情況下,圣杯布局已經非常完美,圣杯布局使用了相對定位,以后布局是有局限性的,而且寬度控制要改的地方也多。在淘寶UED(User Experience Design)探討下,增加多一個div就可以不用相對布局了,只用到了浮動和負邊距,這就是我們所說的雙飛翼布局,實現的代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>雙飛翼布局</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html,body{
                height: 100%;
                font-size: 30px;
                color: white;
            }
            #container{
                width: 90%;
                margin: 0 auto;
                height: 100%;
            }
            #header,#footer{
                height: 12.5%;
                background: lawngreen;
            }
            #main{
                height: 75%;
            }
            #center,#left,#right{
                height: 100%;
                float: left;
            }
            #center{
                width: 100%;
                background: lightblue;
            }
            #left{
                background: palegreen;
                width: 20%;
                margin-left: -100%;
            }
            #right{
                background: pink;
                width: 20%;
                margin-left: -20%;
            }
            #main-inner{
                padding-left: 20%;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <div id="header">
                header
            </div>
            <div id="main">
                <div id="center">
                    <div id="main-inner">
                        center
                    </div>
                </div>
                <div id="left">
                    left
                </div>
                <div id="right">
                    right
                </div>
            </div>
            <div id="footer">
                footer
            </div>
        </div>
    </body>
</html>

View Code

運行結果:

示例中增加一個main-inner的目的是因為當left上移時與center重疊了,left覆蓋了center,通過main-inner的padding將left占用的位置空出。

1.3、多欄布局

1.3.1、柵格系統

欄柵格系統就是利用浮動實現的多欄布局,在bootstrap中用的非常多,這里以一個980像素的寬實現4列的柵格系統,示例代碼如下:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>柵格系統</title>
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
            }
            
            html,
            body {
                height: 100%;
            }
            
            #container {
                width: 980px;
                margin: 0 auto;
                height: 10%;
            }
            
            #container div {
                height: 100%;
            }
            
            .col25 {
                width: 25%;
                background: lightgreen;
                float: left;
            }
            
            .col50 {
                width: 50%;
                background: lightblue;
                float: left;
            }
            
            .col75 {
                width: 75%;
                background: lightcoral;
                float: left;
            }
        </style>
    </head>

    <body>
        <div id="container">
            <div class="col50">
                A
            </div>
            <div class="col50">
                B
            </div>
            <div class="col25">
                C
            </div>
        </div>
    </body>

</html>

View Code

運行結果:

同樣的原理可以輕易擴展到8列,10列,16列的柵格系統。

1.3.2、多列布局

柵格系統并沒有真正實現分欄效果(如word中的分欄),CSS3為了滿足這個要求增加了多列布局模塊,如果需要實現多列布局模塊先看看這幾個CSS3屬性:

column-count:<integer> | auto
功能:設置或檢索對象的列數
適用于:除table外的非替換塊級元素, table cells, inline-block元素
<integer>: 用整數值來定義列數。不允許負值
auto: 根據 <' column-width '> 自定分配寬度

column-gap:<length> | normal
功能:設置或檢索對象的列與列之間的間隙
適用于:定義了多列的元素
計算值:絕對長度值或者normal

column-rule:<' column-rule-width '> || <' column-rule-style '> || <' column-rule-color '>
功能:設置或檢索對象的列與列之間的邊框。與border屬性類似。
適用于:定義了多列的元素

columns:<' column-width '> || <' column-count '>
功能:設置或檢索對象的列數和每列的寬度
適用于:除table外的非替換塊級元素, table cells, inline-block元素
<' column-width '>: 設置或檢索對象每列的寬度
<' column-count '>: 設置或檢索對象的列數

示例代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #content{
                text-indent: 2em;
                column-count: 3;
                column-gap: 30px;
                column-rule: 2px solid lightgreen;
                line-height: 26px;
                font-size: 14px;
            }
        </style>
    </head>
    <body>
        <div id="content">
            CSS即層疊樣式表(Cascading StyleSheet)。 在網頁制作時采用層疊樣式表技術,可以有效地對頁面的布局、字體、顏色、背景和其它效果實現更加精確的控制。 只要對相應的代碼做一些簡單的修改,就可以改變同一頁面的不同部分,或者頁數不同的網頁的外觀和格式。CSS3是CSS技術的升級版本,CSS3語言開發是朝著模塊化發展的。以前的規范作為一個模塊實在是太龐大而且比較復雜,所以,把它分解為一些小的模塊,更多新的模塊也被加入進來。這些模塊包括: 盒子模型、列表模塊、超鏈接方式 、語言模塊 、背景和邊框 、文字特效 、多欄布局等。CSS即層疊樣式表(Cascading StyleSheet)。 在網頁制作時采用層疊樣式表技術,可以有效地對頁面的布局、字體、顏色、背景和其它效果實現更加精確的控制。 只要對相應的代碼做一些簡單的修改,就可以改變同一頁面的不同部分,或者頁數不同的網頁的外觀和格式。CSS3是CSS技術的升級版本,CSS3語言開發是朝著模塊化發展的。以前的規范作為一個模塊實在是太龐大而且比較復雜,所以,把它分解為一些小的模塊,更多新的模塊也被加入進來。這些模塊包括: 盒子模型、列表模塊、超鏈接方式 、語言模塊 、背景和邊框 、文字特效 、多欄布局等。
        </div>
    </body>
</html>

運行結果:

二、彈性布局(Flexbox)

假設在項目中有一個這樣的需求:同一行有3個菜單,每個菜單占1/3的寬度,怎么實現?

可能你會這樣實現:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>flex</title>
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
                list-style: none;
            }
            
            html,
            body {
                height: 100%;
            }
            
            #menu {
                width: 980px;
                margin: 0 auto;
            }
            #menu li{
                width: 33.3%;
                float: left;
            }
        </style>
    </head>

    <body>
        <ul id="menu">
            <li><a href="#" class="item">公司簡介</a></li>
            <li><a href="#" class="item">商品展示</a></li>
            <li><a href="#" class="item">后臺管理</a></li>
        </ul>
    </body>

</html>

View Code

結果:

上面的辦法有明顯的不足就是可擴展性太差,因為如果再添加一項就會有一個菜單項會換行,解決方法是:CSS3中提供了強大的彈性盒布局。示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>flex</title>
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
                list-style: none;
            }
            
            html,
            body {
                height: 100%;
            }
            
            #menu {
                width: 980px;
                margin: 0 auto;
                display: flex;  /*當前塊為彈性盒*/
            }
            #menu li{
                flex: auto;  /*彈性盒中的單項*/
                float: left;
            }
            #menu li a{
                display:block;
                height: 26px;
                line-height: 26px;
                border:1px solid cornflowerblue;
                margin-right: 2px;
                text-decoration: none;
                text-align: center;
            }
        </style>
    </head>

    <body>
        <ul id="menu">
            <li><a href="#" class="item">公司簡介</a></li>
            <li><a href="#" class="item">商品展示</a></li>
            <li><a href="#" class="item">后臺管理</a></li>
            <li><a href="#" class="item">企業文化</a></li>
            <li><a href="#" class="item">在線咨詢</a></li>
        </ul>
    </body>

</html>

View Code

運行結果:

display屬性值flex: 將對象作為彈性伸縮盒顯示

flex:none | <flex-grow> <flex-shrink > || <flex-basis>
功能:設置或檢索彈性盒模型對象的子元素如何分配空間
適用于:flex子項
none: none關鍵字的計算值為: 0 0 auto
<flex-grow>: 用來指定擴展比率,即剩余空間是正值時此「flex子項」相對于「flex容器」里其他「flex子項」能分配到空間比例。
在「flex」屬性中該值如果被省略則默認為「1」
<flex-shrink>: 用來指定收縮比率,即剩余空間是負值時此「flex子項」相對于「flex容器」里其他「flex子項」能收縮的空間比例。
在收縮的時候收縮比率會以伸縮基準值加權
在「flex」屬性中該值如果被省略則默認為「1」
<flex-basis>: 用來指定伸縮基準值,即在根據伸縮比率計算出剩余空間的分布之前,「flex子項」長度的起始數值。
在「flex」屬性中該值如果被省略則默認為「0%」
在「flex」屬性中該值如果被指定為「auto」,則伸縮基準值的計算值是自身的 <width> 設置,如果自身的寬度沒有定義,則長度取決于內容。

示例:如下情況每個元素的計算寬是多少

<ul class="flex">
 <li>a</li>
 <li>b</li>
 <li>c</li>
</ul>
.flex{display:flex;width:800px;margin:0;padding:0;list-style:none;}
.flex :nth-child(1){flex:1 1 300px;}
.flex :nth-child(2){flex:2 2 200px;}
.flex :nth-child(3){flex:3 3 400px;}

本例定義了父容器寬(即主軸寬)為800px,由于子元素設置了伸縮基準值flex-basis,相加300+200+400=900,那么子元素將會溢出900-800=100px;
由于同時設置了收縮因子,所以加權綜合可得300*1+200*2+400*3=1900px;
于是我們可以計算a,b,c將被移除的溢出量是多少:
a被移除溢出量:(300*1/1900)*100,即約等于16px
b被移除溢出量:(200*2/1900)*100,即約等于21px
c被移除溢出量:(400*3/1900)*100,即約等于63px
最后a,b,c的實際寬度分別為:300-16=284px, 200-21=179px, 400-63=337px

可見算法比較麻煩,簡單的做法如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>flex</title>
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
                list-style: none;
            }
            html,
            body {
                height: 100%;
            }
            #menu {
                width: 980px;
                margin: 0 auto;
                display: flex;
                /*當前塊為彈性盒*/
            }
            #menu li {
                float: left;
            }
            #menu li a {
                display: block;
                height: 26px;
                line-height: 26px;
                border: 1px solid cornflowerblue;
                margin-right: 2px;
                text-decoration: none;
                text-align: center;
            }
            .a {
                flex: 1;
            }
            .b {
                flex: 2;
            }
            .c {
                flex: 3;
            }
        </style>
    </head>
    <body>
        <ul id="menu">
            <li class="a">
                <a href="#" class="item">公司簡介</a>
            </li>
            <li class="b">
                <a href="#" class="item">商品展示</a>
            </li>
            <li class="c">
                <a href="#" class="item">后臺管理</a>
            </li>
        </ul>
    </body>
</html>

View Code

運行結果:

Flex容器可以設置屬性flex-flow,取值為row,row-reverse,column,column-reverse四種值
row:顯示在一行中

row-reverse:顯示在一行中,反轉

column:顯示在一列中

column-reverse:顯示在一列中 反轉

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>flex</title>
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
                list-style: none;
            }
            html,
            body {
                height: 100%;
                padding-top :20px;
            }
            #menu {
                width: 980px;
                margin: 0 auto;
                display: flex;
                /*當前塊為彈性盒*/
                flex-flow: row-reverse;
                /*子項在一行中顯示,反轉*/
            }
            #menu li {
                flex: auto;
            }
            #menu li a {
                display: block;
                height: 26px;
                line-height: 26px;
                border: 1px solid cornflowerblue;
                margin-right: 2px;
                text-decoration: none;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <ul id="menu">
            <li class="a">
                <a href="#" class="item">A公司簡介</a>
            </li>
            <li class="b">
                <a href="#" class="item">B商品展示</a>
            </li>
            <li class="c">
                <a href="#" class="item">C后臺管理</a>
            </li>
        </ul>
    </body>
</html>

View Code

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }
            html,body{
                height: 100%;
            }
            #mnue{
                width: 90%;
                height: 300px;
                margin: 0 auto;
                display: flex;/*當前塊為彈性盒*/
                padding-top: 20px;
                /*flex-flow: row-reverse;*//*反轉*/
                flex-flow: column;
            }
            #mnue li{
                /*flex: auto;*//*彈性盒中的單項*/        
                text-align: center;
                border: 1px dashed lightblue;
                margin-bottom: 5px;
            }
            #mnue li a{
                text-decoration: none;
                display: block;
                height: 26px;
                line-height: 26px;
                border: 1px solid lawngreen;
                margin-right: 2px;
                text-align: center;
            }
            .a{ /*按比例*/
                flex: 1;
            }
            .b{
                flex: 2;
            }
            .c{
                flex: 3;
            }
        </style>
    </head>
    <body>
        <ul id="mnue">
            <li class="a"><a href="#" class="item">個人概況</a></li>
            <li class="b"><a href="#" class="item">項目經驗</a></li>
            <li class="c"><a href="#" class="item">自我評價</a></li>
            <!--<li><a href="#" class="item">執有憑證</a></li>
            <li><a href="#" class="item">社會經驗</a></li>
            <li><a href="#" class="item">工作年齡</a></li>-->
        </ul>
    </body>
</html>

View Code

三、流式布局(Fluid)

固定布局和流式布局在網頁設計中最常用的兩種布局方式。固定布局能呈現網頁的原始設計效果,流式布局則不受窗口寬度影響,流式布局使用百分比寬度來限定布局元素,這樣可以根據客戶端分辨率的大小來進行合理的顯示。

固定布局效果:

流式布局效果:

利用前面的知識點可以實現這兩種布局,這里就不去實現了

三、瀑布流布局

瀑布流布局是流式布局的一種。是當下比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。最早采用此布局的網站是Pinterest,逐漸在國內流行開來。

3.1、常見瀑布流布局網站

鼻祖:Pinterest
通用類:豆瓣市集,花瓣網,我喜歡,讀圖知天下
美女圖片:圖麗網
時尚資訊類:看潮網
時尚購物類:蘑菇街,美麗說,人人逛街,卡當網
品牌推廣類:凡客達人
家居o2o類:新巢網小貓家
微博社交類: 都愛看
搞笑圖片類:道趣兒
藝術收藏類:微藝術
潮流圖文分享:荷都分享網

3.2、特點

優點

1、有效的降低了界面復雜度,節省了空間:我們不再需要臃腫復雜的頁碼導航鏈接或按鈕了。

2、對觸屏設備來說,交互方式更符合直覺:在移動應用的交互環境當中,通過向上滑動進行滾屏的操作已經成為最基本的用戶習慣,而且所需要的操作精準程度遠遠低于點擊鏈接或按鈕。

3、更高的參與度:以上兩點所帶來的交互便捷性可以使用戶將注意力更多的集中在內容而不是操作上,從而讓他們更樂于沉浸在探索與瀏覽當中。

缺點

1. 有限的用例:
無限滾動的方式只適用于某些特定類型產品當中一部分特定類型的內容。
例如,在電商網站當中,用戶時常需要在商品列表與詳情頁面之間切換,這種情況下,傳統的、帶有頁碼導航的方式可以幫助用戶更穩妥和準確的回到某個特定的列表頁面當中。

2. 額外的復雜度:
那些用來打造無限滾動的JS庫雖然都自稱很容易使用,但你總會需要在自己的產品中進行不同程度的定制化處理,以滿足你們自己的需求;另外這些JS庫在瀏覽器和設備兼容性等方面的表現也參差不齊,你必須做好充分的測試與調整工作。

3. 再見了,頁腳:
如果使用了比較典型的無限滾動加載模式,這就意味著你可以和頁腳說拜拜了。
最好考慮一下頁腳對于你的網站,特別是用戶的重要性;如果其中確實有比較重要的內容或鏈接,那么最好換一種更傳統和穩妥的方式。
千萬不要耍弄你的用戶,當他們一次次的瀏覽到頁面底部,看到頁腳,卻因為自動加載的內容突然出現而無論如何都無法點擊頁腳中的鏈接時,他們會變的越發憤怒。

5. SEO:

集中在一頁當中動態加載數據,與一頁一頁的輸出相比,究竟那種方式更利于SEO,這是你必須考慮的問題。對于某些以類型網站來說,在這方面進行冒險是很不劃算的。

6. 關于頁面數量的印象:
其實站在用戶的角度來看,這一點并非負面;不過,如果對于你的網站來說,通過更多的內容頁面展示更多的相關信息(包括廣告)是很重要的策略,那么單頁無限滾動的方式對你并不適用。

3.3、masonry實現瀑布流布局

masonry是一個響應式網格布局庫(非jQuery)。(Cascading grid layout library)

如果使用CSS+JavaScript當然可以實現瀑布流布局,但相對麻煩,masonry是一個javascript插件,通過該插件可以輕松實現瀑布流布局,和CSS中float的效果不太一樣的地方在 于,float先水平排列,然后再垂直排列,使用Masonry則垂直排列元素,然后將下一個元素放置到網格中的下一個開發區域。這種效果可以最小化處理 不同高度的元素在垂直方向的間隙。

官網:http://masonry.desandro.com/

源碼:https://github.com/desandro/masonry

3.3.1、下載并引用masonry

可以去官網或github下載“masonry.pkgd.min.js”,將下載到的插件添加到項目中,并在頁面中添加引用,如下所示:

<script src="js/masonry/masonry.pkgd.min.js" type="text/javascript" charset="utf-8"></script>

masonry.pkgd.jsun-minified
masonry.pkgd.min.jsminified

CDN:

<script src="https://unpkg.com/masonry-layout@4.1/dist/masonry.pkgd.js"></script>
<!-- or -->
<script src="https://unpkg.com/masonry-layout@4.1/dist/masonry.pkgd.min.js"></script>

3.3.2、準備內容

在頁面中使用HTML+CSS準備需要使用瀑布流顯示的內容,如下所示:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>瀑布流布局</title>
        <style type="text/css">
            #grid {
                width: 1000px;
                margin: 0 auto;
            }
            
            .grid-item {
                width: 200px;
                float: left;
            }
            
            .a {
                background: lightblue;
                height: 200px;
            }
            
            .b {
                background: lightcoral;
                height: 300px;
            }
            
            .c {
                background: lightgreen;
                height: 500px;
            }
            
            .d {
                background: lightsalmon;
                height: 350px;
            }
            
            .e {
                background: lightseagreen;
                height: 150px;
            }
        </style>
    </head>

    <body>
        <div id="grid">
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item a">
            </div>
            <div class="grid-item b">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
            <div class="grid-item c">
            </div>
            <div class="grid-item d">
            </div>
            <div class="grid-item e">
            </div>
        </div>
        <script src="js/masonry/masonry.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
    </body>

</html>

View Code

沒有使用瀑布流布局時的效果:

3.3.3、初始化插件

使用jQuery:

$('.grid').masonry({
  // options...
  itemSelector: '.grid-item',
  columnWidth: 200
});

原生JavaScript:

// init with element
var grid = document.querySelector('.grid');
var msnry = new Masonry( grid, {
  // options...
  itemSelector: '.grid-item',
  columnWidth: 200
});

使用HTML屬性:

<div class="grid" data-masonry='{ "itemSelector": ".grid-item", "columnWidth": 200 }'>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  ...
</div>

常用屬性如下:

itemSelector : '.item',//瀑布流布局中的單項選擇器
columnWidth : 240 ,//一列的寬度
isAnimated:true,//使用jquery的布局變化,是否啟用動畫
animationOptions:{
//jquery animate屬性 漸變效果 Object { queue: false, duration: 500 }
},
gutterWidth:0,//列的間隙 Integer
isFitWidth:true,//是否適應寬度 Boolean
isResizableL:true,//是否可調整大小 Boolean
isRTL:false,//是否使用從右到左的布局 Boolean

初始化代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>瀑布流布局</title>
        <style type="text/css">
            #grid{
                width: 1000px;
                margin: 0 auto;
            }
            .grid-item{
                width:200px;
                float: left;
            }
            .a{
                height: 200px;
                background: lightblue;
            }
            .b{
                height: 100px;
                background: lightgreen;
            }
            .c{
                height: 250px;
                background: orangered;
            }
            
            .d{
                height: 400px;
                background: lawngreen;
            }
            .e{
                height: 350px;
                background: yellow;
            }
        </style>
    </head>
    <body>
        <div id="grid">
            <div class="grid-item a"></div>
            <div class="grid-item b"></div>
            <div class="grid-item c"></div>
            <div class="grid-item a"></div>
            <div class="grid-item d"></div>
            <div class="grid-item e"></div>
            <div class="grid-item c"></div>
            <div class="grid-item a"></div>
            <div class="grid-item d"></div>
            <div class="grid-item a"></div>
            <div class="grid-item e"></div>
            <div class="grid-item c"></div>
            <div class="grid-item a"></div>
            <div class="grid-item d"></div>
            <div class="grid-item e"></div>
            <div class="grid-item c"></div>
            <div class="grid-item b"></div>
            <div class="grid-item a"></div>
            <div class="grid-item d"></div>
            <div class="grid-item a"></div>
            <div class="grid-item e"></div>
            <div class="grid-item c"></div>
            <div class="grid-item a"></div>
            <div class="grid-item d"></div>
            <div class="grid-item e"></div>
            <div class="grid-item c"></div>
            <div class="grid-item d"></div>
            <div class="grid-item e"></div>
        </div>
        <script src="js/masonry/masonry.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var msnry=new Masonry('#grid',{
                itemSelector:'.grid-item',
                columnWidth:200
            });
        </script>
    </body>
</html>

View Code

運行結果:

3.3.4、使用了圖片的瀑布流

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>瀑布流布局</title>
        <style type="text/css">
            #grid{
                width: 800px;
                margin: 0 auto;
            }
            .grid-item{
                float: left;
            }        
        </style>
    </head>
    <body>
        <div id="grid">
            <div class="grid-item">
                <a href="#">
                    <img src="img/1.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/11546445.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/1257.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/1257.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/2.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/1468119761528.jpeg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/3.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/CR.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/lo.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/Cache_-342b6631b5a9c1b1..jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/i2.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/IMG_20160426_095411.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/psb (1).jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/lo.jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/psb (2).jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/psb (17).jpg" width="200"/>
                </a>
            </div>
            <div class="grid-item">
                <a href="#">
                    <img src="img/QQ.jpg" width="200"/>
                </a>
            </div>
        </div>
        <script src="js/masonry/masonry.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            window.onload=function(){
                var msnry=new Masonry('#grid',{
                    itemSelector:'.grid-item',
                    columnWidth:200
                });
            }
        </script>
    </body>
</html>

View Code

運行結果:

注意:上面的示例中我們使用了window.onload事件,原因是如果圖片沒有加載完成就執行瀑布流布局會引起堆疊的問題,其實就是初始化是沒有檢測到圖片的高度,window.onload在有許多圖片的環境下會有性能問題,這里給大家介紹另一個組件。

3.4、imagesLoaded 圖片加載

imagesLoaded 是一個用于來檢測網頁中的圖片是否載入完成的 JavaScript 工具庫。支持回調的獲取圖片加載的進度,還可以綁定自定義事件。可以結合 jQuery、RequireJS 使用。

官網:http://imagesloaded.desandro.com/

源碼:https://github.com/desandro/imagesloaded

示例代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>imagesLoaded – 檢測網頁中的圖片是否加載</title>
    </head>

    <body>
        <div id="div1">
            <img src="img/h/h(2).jpg" width="300" /><img src="img/h/h(1).jpg" width="300" />
        </div>
        <script src="js/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/imagesloaded-master/imagesloaded.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
        <script>
            imagesLoaded(document.querySelector('#div1'), function(instance) {
                alert('所有的圖片都加載完成了');
            });

            $('#div1').imagesLoaded()
                .always(function(instance) {
                    console.log('all images loaded');
                })
                .done(function(instance) {
                    console.log('all images successfully loaded');
                })
                .fail(function() {
                    console.log('all images loaded, at least one is broken');
                })
                .progress(function(instance, image) {
                    var result = image.isLoaded ? 'loaded' : 'broken';
                    console.log('image is ' + result + ' for ' + image.img.src);
                });
        </script>
    </body>

</html>

3.5、Infinite Scroll滾動分頁

Infinite Scroll也是基于jQuery插件,是一個用于滾動分頁的插件(當移動滾動條時將動態加載更多內容),有網友稱這種效果為”無刷新無分頁完美瀑布流”展現方式。

官網:http://infinite-scroll.com/

源碼:https://github.com/infinite-scroll/infinite-scroll

常用屬性:

$('#masonny-div').infinitescroll({
    navSelector  : "#next",   // 頁面分頁元素(成功后會被隱藏)
    nextSelector : "#next a", // 需要點擊的下一頁鏈接,和2的html要對應
    itemSelector : ".item"  , // ajax回來之后,每一項的selecter
    animate      : true,      //加載完畢是否采用動態效果
    extraScrollPx: 100,       //向下滾動的像素,必須開啟動態效果
    // debug     : true,      //調試的時候,可以打開
    bufferPx     : 5,         //提示語展現的時長,數字越大,展現時間越短
    loading: {
        finishedMsg: '沒有更多內容了', //當加載失敗,或者加載不出內容之后的提示語
        img:  'loading-new.gif',   //自定義loadding的動畫圖
        msgText : '正在加載中...',    //加載時的提示語
        },
    },
    function( newElements, opt ) {
       //成功后執行自定義的函數
       //如果需要對新內容進行加工,就在這里實現
    }
};

屬性與事件官網有詳細的說明這里只列出來了部分,下面是官網列出的選擇:

$('.selector').infinitescroll({
  loading: {
    finished: undefined,
    finishedMsg: "<em>Congratulations, you've reached the end of the internet.</em>",
                img: null,
    msg: null,
    msgText: "<em>Loading the next set of posts...</em>",
    selector: null,
    speed: 'fast',
    start: undefined
  },
  state: {
    isDuringAjax: false,
    isInvalidPage: false,
    isDestroyed: false,
    isDone: false, // For when it goes all the way through the archive.
    isPaused: false,
    currPage: 1
  },
  behavior: undefined,
  binder: $(window), // used to cache the selector for the element that will be scrolling
  nextSelector: "div.navigation a:first",
  navSelector: "div.navigation",
  contentSelector: null, // rename to pageFragment
  extraScrollPx: 150,
  itemSelector: "div.post",
  animate: false,
  pathParse: undefined,
  dataType: 'html',
  appendCallback: true,
  bufferPx: 40,
  errorCallback: function () { },
  infid: 0, //Instance ID
  pixelsFromNavToBottom: undefined,
  path: undefined, // Can either be an array of URL parts (e.g. ["/page/", "/"]) or a function that accepts the page number and returns a URL
  maxPage:undefined // to manually control maximum page (when maxPage is undefined, maximum page limitation is not work)
});

3.5.1、異步加載普通頁面

p1.html頁面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .item {
                height: 200px;
            }
        </style>
    </head>
    <body>
        <h2>產品列表</h2>
        <div id="items">
            <p class="item">產品一</p>
            <p class="item">產品一</p>
            <p class="item">產品一</p>
            <p class="item">產品一</p>
            <p class="item">產品一</p>
            <p class="item">產品一</p>
        </div>
        <a href="p2.html" id="next">下一頁</a>
        <script src="../js/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/infinite-scroll/jquery.infinitescroll.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $('#items').infinitescroll({
                navSelector: "#next",  // 頁面分頁元素(成功后會被隱藏)
                nextSelector: "a#next",  // 需要點擊的下一頁鏈接,和2的html要對應
                itemSelector: ".item",  // ajax回來之后,每一項的selecter,比如每篇文章都有item這個class
                debug: true,  //是否調試
                dataType: 'html',  //數據類型
                maxPage: 3,  //最大頁數
                path: function(index) {  //路徑
                        return "p" + index + ".html";
                }
            }, function(newElements, data, url) {  //成功后的回調
                //console.log("路徑:" + url);
                $(newElements).css('background-color', '#ffef00');
                // $(this).append(newElements);
            });
        </script>
    </body>

</html>

p2.html頁面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>P2</title>
    </head>
    <body>
        <p class="item">產品二</p>
        <p class="item">產品二</p>
        <p class="item">產品二</p>
        <p class="item">產品二</p>
        <p class="item">產品二</p>
        <p class="item">產品二</p>
    </body>
</html>

p3.html頁面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>P3</title>
    </head>
    <body>
        <p class="item">產品三</p>
        <p class="item">產品三</p>
        <p class="item">產品三</p>
        <p class="item">產品三</p>
        <p class="item">產品三</p>
        <p class="item">產品三</p>
    </body>
</html>

運行結果:

3.5.2、異步加載json并解析

m1.html頁面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>相冊</title>
        <style type="text/css">
            .item {
                float: left;
                min-height: 300px;
            }
        </style>
    </head>
    <body>
        <h2>相冊</h2>
        <div id="items">
            <p class="item"><img src="../img/i/1.jpg" /></p>
            <p class="item"><img src="../img/i/2.jpg" /></p>
            <p class="item"><img src="../img/i/3.jpg" /></p>
            <p class="item"><img src="../img/i/4.jpg" /></p>
            <p class="item"><img src="../img/i/5.jpg" /></p>
            <p class="item"><img src="../img/i/6.jpg" /></p>
        </div>
        <a href="m2.json" id="next"></a>
        <script src="../js/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/infinite-scroll/jquery.infinitescroll.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $('#items').infinitescroll({
                navSelector: "#next",
                nextSelector: "a#next",
                itemSelector: ".item",
                debug: true,
                dataType: 'json',
                maxPage: 3,
                appendCallback:false,
                path: function(index) {
                    return "m" + index + ".json";
                }
            }, function(data) {
                
                for(var i=0;i<data.length;i++){
                    $("<p class='item'><img src='../img/i/"+data[i]+".jpg' /></p>").appendTo("#items");
                }
                
            });
        </script>
    </body>
</html>

m2.json數據:

[7,8,9,10,11,12]

m3.json數據:

[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]

運行結果:

因為沒有使用瀑布流布局所以有點不規整,這里主要演示分頁。

3.53、masonry+imagesloaded+infinitescroll實現圖片瀑布流和延遲加載

示例代碼:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="css/test.css" rel="stylesheet" />
</head>
<body>
    <h2>爸爸去哪兒四之萌娃-阿拉蕾</h2>
    <div id="items">
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/1.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>

        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/2.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/3.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>

        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/4.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>

        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/5.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/6.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/7.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/8.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>

        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/9.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/10.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/11.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>

        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/12.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/15.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/14.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/16.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/17.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/18.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/19.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/20.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/21.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/22.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/23.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
        <div class="item">
            <div class="item1">
                <div class="item2"><img src="img/24.png"></div>
                <div class="title">
                    阿拉蕾
                </div>
            </div>
        </div>
    </div>
    <a href="TestHandler.ashx" id="next"></a>

    <script src="js/jquery-3.1.1.js"></script>
    <script src="js/imagesloaded/imagesloaded.pkgd.min.js"></script>
    <script src="js/masonry/masonry.pkgd.min.js"></script>
    <script src="js/infinite-scroll/jquery.infinitescroll.min.js"></script>
    <script type="text/javascript">
        $('#items').imagesLoaded()
                       .always(function (instance) {
                           var msnry = new Masonry('#items', {
                               itemSelector: '.item',
                               //columnWidth: 20   //一列的寬度
                           });

                       })
        $('#items').infinitescroll({
            navSelector: "#next",
            nextSelector: "a#next",
            itemSelector: ".item",
            debug: true,
            dataType: 'json',
            maxPage:10,     //如果不設置最大頁數,則會無限加載,無止境
            appendCallback: false,
            path: function (index) {
                return "TestHandler.ashx";
            }
        }, function (data) {
            console.log(data.length);
            for (var i = 0; i < data.length; i++) {
                $("<div class='item'><div class='item1'><div class='item2'><img src='img/" + data[i].Imgpath + "'/></div><div class='title'>" + data[i].Imgdesc + "</div></div></div>").appendTo("#items");
                $('#items').imagesLoaded()
                    .always(function (instance) {
                        var msnry = new Masonry('#items', {
                            itemSelector: '.item',
                            //columnWidth: 20
                        });

                    })
            }
        });
    </script>
</body>
</html>

View Code

上面的無限加載的數據是通過ajax從后臺數據庫加載過來的,首頁圖片加載完后,滾動鼠標,繼續無限加載(設置了最大頁數的話,加載到最大頁數就不會再就加載了)

運行結果:

四、響應式布局(Responsive)

4.1、媒介類型

@media早在css2.1中就有了,用于判斷媒介類型,如screen屏幕,print打印機,projection投影儀,all表示所有,當然還有許多不常用的。可以指定CSS在什么樣的媒介中應用,如只在打印時應用某些樣式,如:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>打印</title>
        <!--該樣式只會應用在打印時-->
        <style type="text/css" media="print">
            .noprint
            {
                display:none;
            }
            div{
                font-size:30px;
            }
        </style>
    </head>
    <body>
        <div>
            Installing Cordova Cordova command-line runs on Node.js and is available on NPM. Follow platform specific guides to install additional platform dependencies. Open a command prompt or Terminal, and type npm install -g cordova.
        </div>
        <button onclick="print();" class="noprint">打印</button>
    </body>
</html>

不使用媒介時運行效果:

使用媒介時運行效果:

4.2、媒介查詢的應用位置(Media Queries)

a)、內部樣式

@media screen and (800px){ … }

b)、導入樣式

@import url(example.css) screen and (800px);

c)、鏈接樣式
<link media="screen and (800px)" rel="stylesheet" href="example.css" />

d)、XML中應用樣式
<?xml-stylesheet media="screen and (800px)" rel="stylesheet" href="example.css" ?>

4.3、Media Queries Hello World

在頁面上放一個層,當屏幕大小在100-640之間時

示例代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>媒介查詢</title>
        <style type="text/css">
            #div1 {
                background: lightblue;
                height: 100px;
            }
            
            @media only screen and (min- 100px) and (max- 640px) {
                #div1 {
                    background: lightgreen;
                    height: 200px;
                }
            }
        </style>
    </head>

    <body>
        <div id="div1">
            Hello World!
        </div>
    </body>

</html>

全屏時的運行效果:

縮小瀏覽器的效果:

4.4、媒介查詢語法

@media queries是CSS3中引入的,不僅可以實現媒介類型的查詢可以實現設備特性的查詢,可以簡單認為是對CSS2.1中的media的增強,基本語法如下:

@media [not|only] media_type and feature

not:取反操作

only:讓不支持media query的設備但讀取media type類型的瀏覽器忽略這個樣式

media_type:是媒介類型,具體如下:

feature:定義設備特性,多數允許加前綴min-,max-,多個條件可以使用and連接,and兩側需要空格。

常見寫法:

 @media only screen and (min- 320px) and (max- 640px) {
            }
@media (min-device-1024px) and (max-989px),screen and (max-device-480px),(max-device-480px) and (orientation:landscape),(min-device-480px) and (max-device-1024px) and (orientation:portrait) {
   CSS樣式...
}

and表示與,條件要同時滿足;逗號表示或。

4.5、響應式柵格系統(Responsive)

在前面的布局中我們學習柵格系統,這里通過媒介查詢實現響應式柵格系統,腳本如下:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>響應式柵格</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            html,
            body {
                height: 100%;
                font: 20px/20px "microsoft yahei";
            }
            
            div {
                min-height: 100px;
            }
            
            .row {
                width: 800px;
                background: deepskyblue;
                margin: 0 auto;
            }
            
            .row:after {
                content: ' ';
                display: table;
                clear: both;
            }
            
            .col25 {
                width: 25%;
                background: lightgreen;
            }
            
            .col50 {
                width: 50%;
                background: lightcoral;
            }
            
            .col75 {
                width: 75%;
                background: lightblue;
            }
            
            [class*=col] {
                float: left;
            }
            /*0-480手機*/
            
            @media only screen and (max-480px) {
                .row {
                    width: 100%;
                }
                [class*=col] {
                    float: none;
                    margin-top: 5px;
                    width: 100%;
                }
            }
            /*480-960平板,手機橫屏*/
            @media only screen and (min- 480px) and (max- 960px) {
                .row {
                    width: 480px;
                }
            }
            /*960PC屏幕*/
            @media only screen and (min-960px) {
                .row {
                    width: 960px;
                }
            }
        </style>
    </head>

    <body>
        <div id="container">
            <div id="header" class="row">
                header
            </div>
            <div id="main" class="row">
                <div id="left" class="col25">left</div>
                <div id="center" class="col50">center</div>
                <div id="right" class="col25">right</div>
            </div>
            <div id="footer" class="row">
                footer
            </div>
        </div>
    </body>

</html>

示例代碼中通過@media設置了多個斷點,當滿足條件時樣式會應用,達到響應式的目的,屏幕大960時:

480-960之間的效果:

在手機上模擬的效果:

4.6、respond.js

respond.js是一個用于讓IE8以下瀏覽器支持@media queries的插件,也就是使用Respond.js能讓IE6-8支持CSS3 Media Query。Bootstrap里面就引入了這個JS文件,壓縮后只有3KB。該腳本循環遍歷頁面上的所有 CSS 引用,并使用媒體查詢分析 CSS 規則。然后,該腳本會監控瀏覽器寬度變化,添加或刪除與 CSS 中媒體查詢匹配的樣式。最終結果是,能夠在原本不支持的瀏覽器上運行媒體查詢。

要注意的問題:

if CSS files are encoded in UTF-8 with Byte-Order-Mark, they will not work with Respond.js in IE7 or IE8.

微軟的utf-8格式且BOM的文件會出問題,BOM格式文檔頭3個字節就是BOM,會影響程序對文檔的處理。

最近有測試發現IE8還是出現了問題,動畫@keyframe中的@符號造成的影響會使respond.js失效,因此,在使用respond.js時,盡量就不要用CSS3動畫。

下載地址:https://github.com/scottjehl/Respond/

引入方法:

<!--[if lt IE 9]>
<script src="html5shiv.js"></script>
<script src="respond.min.js"></script>
<![endif]-->

4.7、移動優先(Mobile First)

a)、桌面優先(優雅降級)

這是一種傳統的做法,開發項目時優先PC端,然后再通過一些hack的方法讓項目正常運行在移動端,所謂的降級可以簡單認為就是將一些信息隱藏,因為移動端的可視范圍有限,必須給用戶提供簡潔核心的內容。

b)、移動優先(漸進增強)

a)、對于產品設計師,一個新產品先設計移動版,然后才是桌面版。

b)、對于工程師,一個新產品,先開發移動版,然后才是桌面版本。

這樣的好處是能把握好最核心最關鍵內容,讓界面簡潔。

練習1:

請模擬如下的響應式顯示效果,要求兼容各種設備:

實現代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>響應式布局</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html,body{
                height: 100%;
                font-size: 20px/20px "microsoft yahei";
            }
            #container{
                width: 98%;
                height: 100%;
                margin: 0 auto;
            }
            .top{
                height: 5%;
                position: relative;
                margin-bottom: 20px;
            }
            .top .left{
                position: absolute;
                left: 0;
                height: 100%;
                background: #333;
                width: 70%;
            }
            .top .right{
                position: absolute;
                right: 0;
                height: 100%;
                background: #333;
                width: 25%;
            }
            .main div{
                min-height: 150px;
                margin-bottom: 20px;
            }
            .main .header .first{
                background: green;
                text-align: center;
                line-height: 150px;
                /*margin-bottom: 20px;*/
            }
            .content{
                position: relative;
                line-height: 150px;
                text-align: center;
                /*margin-bottom: 20px;*/
            }
            .content .second{
                float: left;
                background: gray;
                width: 25%;
            }
            .content .third{
                float: left;
                width:25%;
                background: gainsboro;
            }
            .content .fourth{
                float: left;
                width:25%;
                background: grey;
            }
            .content .footer{
                background: lawngreen;
                float: left;
                width:25%;
            }
            @media only screen and (max- 500px) {
                .content .second{
                    background: gray;
                    width: 100%;
                }
                .content .third{
                    background: gainsboro;
                    width: 100%;
                }
                .content .fourth{
                    background: grey;
                    width: 100%;
                }
                .content .footer{
                    background: lawngreen;
                    width: 100%;
                }
            }
            @media only screen and (min- 500px) and (max- 640px) {
                .content .second{
                    background: gray;
                    width: 50%;
                    float: left;
                }
                .content .third{
                    background: gainsboro;
                    width: 50%;
                    float: left;
                }
                .content .fourth{
                    background: grey;
                    width: 50%;
                    float: left;
                }
                .content .footer{
                    background: lawngreen;
                    width: 50%;
                    float: left;
                }
            }
            @media only screen and (min- 640px) and (max- 960px) {
                .content .second{
                    background: gray;
                    width: 33.3%;
                    float: left;
                }
                .content .third{
                    background: gainsboro;
                    width: 33.3%;
                    float: left;
                }
                .content .fourth{
                    background: grey;
                    width: 33.3%;
                    float: left;
                }
                .content .footer{
                    background: lawngreen;
                    width: 100%;
                }
            }
        </style>
    </head>
    <body>
        <div id="container">
            <div class="top">
                <div class="left"></div>
                <div class="right"></div>
            </div>
            <div class="main">
                <div class="header">
                    <div class="first">1</div>
                </div>
                <div class="content">
                    <div class="second">2</div>
                    <div class="third">3</div>
                    <div class="fourth">4</div>
                    <div class="footer">5</div>
                </div>
            </div>
            
        </div>
    </body>
</html>

4.8、視區(viewport)

4.8.1、需要設置viewport的原因

viewport也稱視口,PC上是指瀏覽器窗口的可視區域。先了解兩個概念:

可見視口(visual viewport):瀏覽器窗口的可視區域

布局視口(layout viewport):CSS在應用時所設置的布局最大寬度。布局視口可以大于可見視口。

移動設備上的viewport都是要大于瀏覽器可視區域的、這樣就會產生一個默認縮放的結果,請看示例如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>viewport</title>
    </head>
    <body>
        <p>
            viewport也稱視口,PC上是指瀏覽器窗口的可視區域。先了解兩個概念: 可見視口(visual viewport):瀏覽器窗口的可視區域 布局視口(layout viewport):CSS在應用時所設置的布局最大寬度。布局視口可以大于可見視口。
        </p>
    </body>
</html>

運行效果:

在手機上顯示的效果:

以上是iphone5顯示的效果,字體根本看不清楚原因如下:

CSS中的1px并不等于設備的1px,PC中CSS的1個像素往往都是對應著電腦屏幕的1個物理像素
CSS中的像素是邏輯上的px
屏幕上的像素是物理上的px,兩者有區別
要考慮PPI,pixels per inch每英寸像素數
當PPI為90時每個像素為0.011英寸
iPhone4的PPI為326,如果CSS像素再和設備像素保持對應,人眼將很難看清較小的字體或者圖案。

移動設備上的viewport分為layout viewport、visual viewport和ideal viewport 三類,ideal viewport是最適合移動設備的viewport,ideal viewport的寬度等于移動設備的屏幕寬度,也就是寬度為100%的效果。ideal viewport 的意義在于,無論在何種分辨率的屏幕下,那些針對ideal viewport 而設計的網站,不需要用戶手動縮放,也不需要出現橫向滾動條,都可以完美的呈現給用戶。
http://viewportsizes.com/各種設備ideal viewport
就是相同英寸下正常分辨率的PC機的物理像素!一般為72px/英寸,即每英寸寬或高的屏幕有72個物理顏色點。

移動設備默認的viewport是layout viewport,也就是那個比屏幕要寬的viewport,但在進行移動設備網站的開發時,我們需要的是ideal viewport。

4.8.2、設置viewport的方法

利用meta標簽對viewport進行控制,如:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

參數解釋:

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>viewport</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <p>
            viewport也稱視口,PC上是指瀏覽器窗口的可視區域。先了解兩個概念: 可見視口(visual viewport):瀏覽器窗口的可視區域 布局視口(layout viewport):CSS在應用時所設置的布局最大寬度。布局視口可以大于可見視口。
        </p>
    </body>
</html>

效果:

4.8.3、小節

首先如果不設置meta viewport標簽,那么移動設備上瀏覽器默認的寬度(布局視口)值為800px,980px,1024px等這些,總之是大于屏幕寬度(可見視口)的。這里的寬度所用的單位px都是指css中的px,它跟代表實際屏幕物理像素的px不是一回事。

每個移動設備瀏覽器中都有一個理想的寬度(ideal viewport),這個理想的寬度是指css中的寬度,跟設備的物理寬度沒有關系,在css中,這個寬度就相當于100%的所代表的那個寬度。

一般在head中加上如下的meta即可:

<meta name="viewport" content="width=device-width, initial-scale=1" />

五、REM實現響應式布局

rem是CSS3新引進來的一個度量單位,相對長度單位。相對于根元素(即html元素)font-size計算值的倍數,如:

height:2rem;,則高度的大小為32px(字體默認為16px,chrome最小為12px),如果根元素的字體為15px,則結果為30px。

頁面中的尺寸都以html元素的font-size為相對單位,為默認設置為20px,如果需要一個200px的大小則使用10rem,然后當屏幕大小變化時通過javascript或media queries修改字體大小。

5.1、使用javascript設置相對尺寸

示例代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>rem</title>
        <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <style>
            html {
                height: 100%;
                width: 100%;
                font-family: 'Microsoft YaHei';
                font-size: 20px;
                overflow: hidden;
                outline: 0;
            }
            
            body {
                height: 100%;
                margin: 0;
                overflow: hidden;
                -webkit-user-select: none;
                /*取消用戶選擇*/
                width: 100%;
            }
            
            header,
            footer {
                width: 100%;
                line-height: 1.5rem;
                font-size: 1rem;
                color: #000;
                border: 1px solid #ccc;
                text-align: center;
                background-color: #ccc;
            }
            
            .bd {
                margin-top: 1rem;
                margin-bottom: .5rem;
                margin-right: -.5rem;
                font-size: 0;
            }
            
            .bd:after {
                clear: both;
            }
            
            .box {
                width: 5rem;
                height: 5rem;
                display: inline-block;
                margin-right: .5rem;
                margin-bottom: .5rem;
            }
            
            .blue-box {
                background-color: #06c;
            }
            
            .org-box {
                background-color: #1fc195;
            }
        </style>

    </head>

    <body>
        <header>我是頭部</header>
        <div class="bd">
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
        </div>

        <footer>我是頁腳</footer>
        <script>
            //定義一個方法并執行
            (function(doc, win) {
                //獲得文檔的根節點html
                var docEl = doc.documentElement;
                //如果window中存在orientationchange對象,則取orientationchange,否則取resize
                //為了事件綁定
                resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize';
                //定義一個方法,重新計算font-size大小
                var recalc = function() {
                    //頁面的寬度
                    var clientWidth = docEl.clientWidth;
                    //如果沒有寬度則退出
                    if(!clientWidth) return;
                    //重新計算font-size大小,假定320的寬度時字體大小為20;,當頁面變化時重新設置字體大小
                    docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
                };
                //如果瀏覽器不支持添加事件監聽則結束
                if(!doc.addEventListener) return;
                //添加事件監聽,指定事件處理函數的時期或階段(boolean)true表示在捕獲事件執行,false表示冒泡時執行
                win.addEventListener(resizeEvt, recalc, false);
                //當Dom樹加載完成時執行計算,DOMContentLoaded事件要在window.onload之前執行
                doc.addEventListener('DOMContentLoaded', recalc, false);
            })(document, window);
        </script>
    </body>

</html>

View Code

運行效果:

5.2、使用媒介查詢設置字體尺寸

示例代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>rem and media queries</title>
        <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <style>
            html {
                height: 100%;
                width: 100%;
                font-family: 'Microsoft YaHei';
                font-size: 20px;
                overflow: hidden;
                outline: 0;
            }
            
            .box {
                width: 5rem;
                height: 5rem;
                display: inline-block;
                margin-right: .5rem;
                margin-bottom: .5rem;
            }
            
            .blue-box {
                background-color: #06c;
            }
            
            .org-box {
                background-color: #1fc195;
            }
            
            @media only screen and (max- 300px) {
                html {
                    font-size: 10px;
                }
            }
            @media only screen and (min- 300px) and (max- 640px) {
                html {
                    font-size: 20px;
                }
            }
            @media only screen and (min- 640px) and (max- 960px) {
                html {
                    font-size: 30px;
                }
            }
            @media only screen and (min- 960px){
                html {
                    font-size: 40px;
                }
            }
        </style>
    </head>
    <body>
        <div class="bd">
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
            <div class="box org-box"></div>
            <div class="box blue-box"></div>
        </div>
    </body>
</html>

運行結果:

總結

以上是生活随笔為你收集整理的CSS3与页面布局学习总结——多种页面布局的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

一区二区三区在线影院 | 五月婷婷丁香在线观看 | 91人人爽人人爽人人精88v | av高清在线 | 国产一卡在线 | 91精品国产自产在线观看永久 | 日韩av成人在线 | 国产免费又黄又爽 | 91麻豆文化传媒在线观看 | www.天天综合 | 日韩爱爱片 | 国产日本三级 | 丁香视频在线观看 | 99视频在线精品国自产拍免费观看 | 在线综合色| 久久999久久 | 日韩av中文字幕在线免费观看 | 国产亚洲精品无 | 丁香六月婷婷综合 | 成年人在线观看网站 | 免费视频资源 | 免费观看第二部31集 | 狠狠色丁香久久婷婷综 | 在线观看日韩专区 | 亚洲一区日韩在线 | 波多野结衣一区 | 日本久久高清视频 | 最新三级在线 | 日本久久久久 | 精品国产一区二区三区蜜臀 | 婷婷福利影院 | 91九色在线观看 | 国产精品久久久亚洲 | 日韩电影久久 | 久久蜜臀av | 福利av在线| 亚洲精品乱码久久久一二三 | 亚洲精品小区久久久久久 | www色婷婷com| 久久小视频 | 久色婷婷 | 首页国产精品 | 国产亚洲情侣一区二区无 | 国产精品久久久久一区二区三区共 | 久久久亚洲精品 | 亚洲va欧美va人人爽春色影视 | 在线最新av | 激情欧美一区二区免费视频 | 一区二区三区免费在线观看视频 | 五月婷婷另类国产 | 手机成人在线 | 亚洲精品久久久久久久不卡四虎 | 青春草免费视频 | 美女福利视频在线 | 中文字幕在线观看播放 | 在线观看av网 | 99爱视频 | 在线观看中文字幕第一页 | 欧美日韩三级在线观看 | 国产精品久久久久久久久久妇女 | 99精品热视频只有精品10 | 国产一区二区三区黄 | 国产精品免费一区二区三区 | 亚洲精品字幕 | 激情深爱 | 久久综合成人网 | 99久热在线精品视频成人一区 | 在线观看中文字幕av | 久久九九影视 | 久久精品在线 | 91天天视频| 一区二区中文字幕在线观看 | 综合激情 | 国产精品99久久久精品 | 久久综合久久久 | 精品久久国产一区 | 国产又粗又猛又爽又黄的视频免费 | 日韩欧美在线观看一区二区三区 | 美女网站在线播放 | 久草在线国产 | 国产免费人成xvideos视频 | 日韩精品专区在线影院重磅 | 激情伊人五月天 | av中文字幕av | 一区二区免费不卡在线 | 91在线亚洲| 色吊丝在线永久观看最新版本 | 黄色软件视频大全免费下载 | 亚洲一区二区天堂 | 人人爽人人香蕉 | 日韩国产欧美在线视频 | 美女网站视频色 | 日韩免费在线观看视频 | 97超碰人人模人人人爽人人爱 | 亚洲日本va午夜在线影院 | 国产精品婷婷午夜在线观看 | 日本夜夜草视频网站 | 麻豆va一区二区三区久久浪 | 亚洲一区二区观看 | 成人小视频在线免费观看 | 又爽又黄在线观看 | 在线观看中文字幕av | a黄色影院| 中文字幕一区二区三区久久 | 激情五月在线视频 | 亚洲最大av网站 | 91在线观看视频网站 | 日韩在线精品 | 奇米影视在线99精品 | 六月丁香久久 | 日韩久久精品一区二区三区下载 | 91x色| 成人在线黄色电影 | 日韩av电影免费在线观看 | 日日夜夜艹| 91亚洲成人 | 黄色网址国产 | 黄免费网站| 成人黄色免费观看 | 久久久久久久久免费视频 | 久久久久久久久福利 | 深爱激情五月综合 | 日韩激情视频在线观看 | 国产免费专区 | a视频在线观看免费 | 成人在线播放网站 | 久久黄视频 | 亚洲黄色片| 天天操天天怕 | 婷婷 中文字幕 | 国产黄色免费电影 | 久久免费精品视频 | 波多野结衣久久精品 | av免费观看高清 | 夜夜夜草| 日日爽日日操 | 成人三级视频 | 狠狠伊人 | 色婷婷九月 | 一 级 黄 色 片免费看的 | 99精品欧美一区二区三区黑人哦 | 日韩在线免费 | 欧美电影黄色 | 最近能播放的中文字幕 | 天天摸天天舔 | 懂色av懂色av粉嫩av分享吧 | 国产96在线| 亚洲精品资源在线观看 | 欧美不卡视频在线 | 日韩中文字幕视频在线观看 | 久久久久久久影视 | 在线观看国产v片 | 久久精品波多野结衣 | 成人电影毛片 | 国产在线视频一区二区 | 中文字幕在线观看的网站 | 婷婷综合av| 色综合小说 | 开心激情婷婷 | 91污在线 | 国产色a在线观看 | 激情综合网在线观看 | 综合视频在线 | 亚洲精品午夜久久久久久久 | 成人黄色小说在线观看 | 日韩中字在线观看 | 99免费看片| 亚洲一级电影在线观看 | 欧美了一区在线观看 | 日韩最新在线视频 | 久久在线精品视频 | 国产xxxx | 久久刺激视频 | 午夜国产一区二区 | 看污网站 | 91精品在线免费观看 | 黄色网中文字幕 | 91在线看视频免费 | 亚洲国产一区av | 国产一区黄色 | www国产亚洲精品久久麻豆 | av九九九| 亚洲精品在线视频观看 | 人人舔人人 | 婷婷视频在线播放 | 国产精品一区二区久久精品爱微奶 | 亚洲综合色站 | 最近中文字幕高清字幕在线视频 | 成人免费电影 | 中文字幕二区三区 | 亚洲在线综合 | 999毛片| 成人小视频在线免费观看 | 成人免费观看网站 | 国产精品黄色影片导航在线观看 | 天天色天天射天天综合网 | 国产精品18久久久久久不卡孕妇 | 国产另类xxxxhd高清 | 久久社区视频 | 人人干人人做 | 亚洲精品五月天 | 欧美男同网站 | 在线观看日韩国产 | 国产精品99久久久久的智能播放 | 97视频在线免费观看 | 欧美在线视频二区 | 97超碰人人看 | 操操操日日日 | 六月丁香婷 | 激情欧美一区二区三区免费看 | 欧美成人a在线 | 国产精品一区二区电影 | 日本精品视频在线播放 | 亚洲v精品 | 午夜精品福利一区二区三区蜜桃 | 一区二区三区四区免费视频 | 日韩欧美精品一区二区 | www.色综合.com | 中文字幕资源在线 | 久久久久综合精品福利啪啪 | 国产69精品久久99的直播节目 | 在线播放视频一区 | 五月婷婷六月丁香 | 黄色国产高清 | 精品国产美女在线 | 久久一区二区三区超碰国产精品 | 免费在线观看日韩视频 | 欧美大荫蒂xxx | 涩涩资源网 | 九九视频精品免费 | 伊甸园永久入口www 99热 精品在线 | 奇米先锋| 一区二区三区在线观看 | 狂野欧美激情性xxxx | 久久久人人人 | 粉嫩av一区二区三区四区五区 | 国产午夜在线观看 | 日本中文在线播放 | 在线观看视频一区二区 | 伊人亚洲精品 | 国产伦精品一区二区三区在线 | 99久久精品午夜一区二区小说 | 中文字幕在线观看网站 | 国产精品久久久久999 | 亚洲欧美视频一区二区三区 | 99在线视频网站 | 天天操天天爽天天干 | 亚洲精品一区二区三区四区高清 | 在线观看国产中文字幕 | 91九色在线视频观看 | 久久99精品一区二区三区三区 | 奇米影音四色 | 亚洲精品美女免费 | 国产一区二区三区四区在线 | 国产人成看黄久久久久久久久 | 久久精品国产久精国产 | 99免费在线播放99久久免费 | 二区中文字幕 | 99精品一区二区 | 99精品视频在线观看播放 | www.日日操.com| 91在线视频观看 | 色播99| 久久无码av一区二区三区电影网 | 国产在线精品观看 | 久久国产成人午夜av影院宅 | 在线视频日韩精品 | av色影院| 在线免费精品视频 | 日本久久久久久久久久久 | 日韩中文字幕免费视频 | 国产亚洲精品久久久久久无几年桃 | 丁香视频五月 | 午夜性福利 | 最近2019年日本中文免费字幕 | 国产精品免费观看久久 | 亚洲资源在线观看 | 久久国产a | 91豆麻精品91久久久久久 | 人人澡人人模 | 久久影院中文字幕 | www.色午夜| 欧美激情在线网站 | 99视频+国产日韩欧美 | 97电影在线观看 | 日韩伦理片hd | 国产一区在线免费 | 日韩欧美成 | 曰韩精品 | 久久一区二区三区日韩 | av国产网站| 国产精品免费大片视频 | 激情五月婷婷激情 | 最新中文字幕视频 | 成人三级视频 | 午夜丁香网 | 亚洲永久av | 久草精品在线播放 | 国产一区二区三区网站 | 中文字幕国产一区 | 亚洲免费色 | 99免在线观看免费视频高清 | 国产理论片在线观看 | 国产精品一区二区吃奶在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 国产一区二区三区网站 | 国产福利精品视频 | 在线观看资源 | 久久这里只有精品视频首页 | 国产不卡精品视频 | 色99在线 | 国产又粗又猛又色又黄视频 | 国产精品久久久久久久午夜 | 一级黄色电影网站 | 永久免费看av | 在线激情影院一区 | av日韩精品 | 久久久久女人精品毛片 | 99精品国产兔费观看久久99 | 国产在线免费观看 | 日韩三级视频在线观看 | 永久免费视频国产 | 精品久久久999 | 国产精品入口久久 | 日本狠狠色 | 国产成人精品久久亚洲高清不卡 | 亚洲精品美女久久久久网站 | 99色视频在线 | 日日夜操 | 成人小视频在线免费观看 | 久久国产精品久久精品 | 色综合久久中文综合久久牛 | 国产最新91 | 国产成人精品一区二区在线 | 国产国产人免费人成免费视频 | 欧美激情精品一区 | 91av在线免费观看 | 国产精品2020 | 精品国产91亚洲一区二区三区www | www狠狠操 | 在线播放国产精品 | av中文字幕免费在线观看 | 日本精品免费看 | 欧美一级黄色视屏 | 337p日本大胆噜噜噜噜 | 青青草在久久免费久久免费 | 国产精品第2页 | 国产精品久一 | 免费高清看电视网站 | 草久久久 | 91干干干 | 国产剧情在线一区 | 日韩免费看视频 | 最近中文字幕视频网 | 91一区一区三区 | 免费在线黄 | 国产二级视频 | 日韩一区二区三区不卡 | 久久看片网站 | a午夜在线 | 精品国产观看 | 91精品国产综合久久福利 | www视频免费在线观看 | 国产人成在线视频 | 在线观看视频一区二区三区 | 韩国av一区二区三区在线观看 | 久久成年人视频 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 在线视频日韩一区 | 日韩高清毛片 | 国产一区二区三区免费在线 | 久久av中文字幕片 | 天堂网一区二区三区 | 最新午夜| 国产成人久久精品亚洲 | 中文字幕在线有码 | 亚洲欧洲精品一区二区 | 开心色激情网 | 久久女教师 | 在线亚洲小视频 | 中文字幕久久精品一区 | 久久久久久久久久久久国产精品 | 亚洲理论片 | 久久线视频| 亚洲精品综合在线 | 亚洲精品视频免费在线 | 亚洲国产精品久久久久 | 国产免费不卡av | 超碰在线人人 | 亚洲综合欧美激情 | 久草久草在线观看 | 久久久免费观看视频 | 亚洲国产一区av | 中文av在线免费观看 | 亚洲传媒在线 | 精品国产一区二区三区av性色 | 国产免码va在线观看免费 | 欧美激情在线网站 | 伊人婷婷激情 | 久保带人| 亚洲专区视频在线观看 | 91精品免费在线视频 | 伊人久久电影网 | 亚洲精品在线二区 | 69热国产视频 | 狠狠色狠狠色综合日日92 | 在线观看视频国产一区 | www免费黄色 | 亚洲精品视频播放 | 免费又黄又爽视频 | 精品一区av | 国产精品亚州 | 粉嫩av一区二区三区入口 | 中文字幕在线看视频 | 国产一区成人 | 亚洲成av人片一区二区梦乃 | 久久女同性恋中文字幕 | 99久久精品网 | 在线播放av网址 | 欧洲色综合 | 超碰99在线| 福利视频网站 | 人人模人人爽 | 亚洲 欧美 综合 在线 精品 | 国产一区二区三区四区大秀 | 成年人视频在线观看免费 | 韩国av免费观看 | 91女人18片女毛片60分钟 | 97超碰人人澡 | 97色se | 日日夜夜草 | 五月综合| 在线国产能看的 | 国产精品福利小视频 | avlulu久久精品 | 国产一二三区av | 国产一区精品在线观看 | 日韩三区在线 | 久久精品欧美一区二区三区麻豆 | 欧美精品一区二区在线观看 | 成人黄色免费在线观看 | 婷婷福利影院 | 欧美日韩免费观看一区二区三区 | 成人精品在线 | 黄色软件在线观看 | 国产在线欧美日韩 | 一区二区三区免费看 | 区一区二在线 | 欧美激情视频一区二区三区 | 99视频这里有精品 | 天天鲁一鲁摸一摸爽一爽 | 久久精品网| 国产在线 一区二区三区 | 五月激情综合婷婷 | 欧美激情综合网 | 国产精品女同一区二区三区久久夜 | 亚洲资源在线观看 | 色综合久 | 日韩三区在线观看 | 四虎在线免费观看视频 | 成人免费一区二区三区在线观看 | 午夜.dj高清免费观看视频 | 91免费视频黄 | 久久伊人精品一区二区三区 | 免费亚洲精品 | 三级黄色免费 | 亚洲精品欧美精品 | 国产四虎在线 | 国产在线精品视频 | 久久视频这里只有精品 | 999久久a精品合区久久久 | 麻豆视频免费在线观看 | 成人黄色免费在线观看 | av丁香花 | 91三级视频 | 国产裸体bbb视频 | 在线看成人av| 国产一区二区在线观看视频 | av888.com| 国产亚洲精品久久久久久 | 亚洲国产字幕 | 精品1区2区 | 久久精品久久久久 | 日韩中文在线电影 | 色在线免费 | 天天干夜夜爱 | 欧美日韩亚洲在线 | 九九热免费精品视频 | 亚洲经典中文字幕 | 久久国产精品久久久 | 波多野结衣视频一区二区三区 | 日本精品在线看 | 日韩一三区 | 国产久草在线观看 | 91成人天堂久久成人 | 在线观看国产永久免费视频 | 国产一区二区精品久久 | 超碰成人av | 天天色影院 | 人人爽久久涩噜噜噜网站 | 久久视频国产精品免费视频在线 | 四虎成人网 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 在线视频一二三 | 久久久久久久久久久久国产精品 | 天天视频亚洲 | 久久久黄色免费网站 | 色吧av色av | 国产精品欧美久久久久无广告 | 18国产精品福利片久久婷 | 日韩,精品电影 | 999在线视频 | 91日韩精品 | 国模一二三区 | 91福利视频免费观看 | 国产一级不卡视频 | 中文字幕在线观看视频一区 | 日韩免费av在线 | 91视频 - 114av | 免费高清在线观看成人 | 国产精品国产三级国产不产一地 | 欧美analxxxx| 激情久久影院 | 久久国产视频网站 | 中文字幕 第二区 | 亚洲欧美日韩国产精品一区午夜 | 天堂网一区 | 91久久久久久久 | 国内精品久久久久影院日本资源 | 亚洲精品视频在线免费 | 亚洲年轻女教师毛茸茸 | 在线观看日本高清mv视频 | 亚洲国产片 | 亚洲精品午夜久久久久久久 | 国产午夜视频在线观看 | 免费av在线网 | 天天操天天干天天操天天干 | 欧美少妇的秘密 | av在线网站免费观看 | 人人插人人舔 | 9999精品免费视频 | 中文字幕中文字幕中文字幕 | 激情视频在线观看网址 | 国产精品xxxx18a99 | 97超碰站| 国产精品美女免费看 | 欧美另类亚洲 | 天天射天天 | 日韩久久在线 | 黄视频网站大全 | 久久精品国产一区二区电影 | 欧美日韩在线精品 | 色六月婷婷 | 热精品 | 欧美日韩在线视频一区 | 久久深夜| 中文字幕一区二区三区乱码不卡 | 欧美日韩二区三区 | 日本三级在线观看中文字 | 国产激情久久久 | 2022国产精品视频 | 中文字幕乱码电影 | 美女网站在线免费观看 | 青春草视频在线播放 | 国内精品久久影院 | 国产呻吟在线 | 狠狠网亚洲精品 | 日韩免费中文 | 中文字幕av专区 | 国产日韩欧美在线免费观看 | 国产999在线 | 黄色成人在线观看 | 91原创在线观看 | 免费看片在线观看 | 在线你懂的视频 | 日日干日日操 | 亚洲精品免费在线播放 | av高清网站在线观看 | 久久国产剧场电影 | 免费毛片一区二区三区久久久 | 久久久久久久久久电影 | 日韩在线理论 | 亚洲作爱| 99免费观看视频 | 亚洲精品午夜久久久久久久 | 人人爱爱| 国产精品免费视频一区二区 | 国产成人精品一区二区三区福利 | 成人小视频在线免费观看 | 81国产精品久久久久久久久久 | 欧美日韩性视频在线 | 美女视频免费精品 | 青青色影院 | 欧美精品国产综合久久 | 久久高清免费 | 99精品欧美一区二区 | 日韩免费不卡av | 欧美日韩亚洲精品在线 | 国产精品久久久久9999吃药 | 欧美日韩高清一区二区 国产亚洲免费看 | 九九久久精品 | 国产精品福利在线观看 | 天天想夜夜操 | 久久精品电影网 | 国产专区在线看 | 午夜精品视频免费在线观看 | www.天天色.com | 色综合久久88色综合天天6 | 免费大片av| 日韩久久久久久久久久 | 九九综合九九 | 97超碰色| 国产高清视频在线播放一区 | 国产一区二区三区免费在线 | 91av视频网站 | 91精品久久久久久久久久入口 | 久久99九九99精品 | 国产精品久久久久久久久久久不卡 | 超级碰碰碰碰 | 亚洲精品一区二区网址 | 免费观看性生活大片 | 国产黄色片在线免费观看 | 天天操夜夜操 | 99视频久久| 狠狠久久综合 | 天天插天天射 | 日韩精品一区不卡 | 国产伦精品一区二区三区… | 日韩电影中文字幕在线 | 91在线视频观看免费 | 欧美日韩不卡在线 | 午夜视频久久久 | 69久久久久久久 | 欧美色就是色 | 伊人成人激情 | 亚洲欧美视频在线播放 | 日韩网| 91高清完整版在线观看 | 国产永久免费观看 | 五月天综合激情 | 四虎在线观看精品视频 | 久草久热 | av网站地址 | 亚洲另类在线视频 | 天天天干天天射天天天操 | 成年美女黄网站色大片免费看 | 色综合久久五月 | 在线中文字幕av观看 | 欧美日韩一区二区三区不卡 | 天天干天天操 | 免费av网址在线观看 | 中文字幕在线一二 | 国产男女无遮挡猛进猛出在线观看 | 亚洲性少妇性猛交wwww乱大交 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲欧美日韩国产一区二区三区 | 亚洲经典在线 | 中国一级片在线播放 | 久久免费的视频 | 欧美成人精品在线 | 在线免费精品视频 | 国产成人a v电影 | 天天干,天天射,天天操,天天摸 | 日韩欧美精品在线视频 | 玖玖精品在线 | 毛片一级免费一级 | av在线官网 | 99久久超碰中文字幕伊人 | 亚洲精品高清一区二区三区四区 | 91香蕉久久| 制服丝袜欧美 | 亚洲人成免费网站 | 色婷婷免费视频 | 99re国产视频| 日韩高清一二三区 | 免费观看v片在线观看 | 成人黄大片视频在线观看 | 免费a网址 | 亚洲欧美综合 | 黄在线免费观看 | 又黄又爽又无遮挡免费的网站 | 91精品在线麻豆 | 欧美久久久影院 | 狂野欧美激情性xxxx欧美 | 国产高清视频在线观看 | 69国产在线观看 | 最近日韩中文字幕中文 | 精品国产一二三四区 | 日韩精品久久久久久久电影竹菊 | 天天操天天射天天爱 | av五月婷婷| 国产 日韩 欧美 自拍 | 精品国产99国产精品 | 91大神精品视频 | 午夜免费久久看 | 在线成人免费电影 | 在线中文字幕一区二区 | 狠狠干天天射 | 97福利社 | 免费h视频| 国产视频 亚洲精品 | 91伊人| 国产福利在线免费观看 | 91av精品| 日日麻批40分钟视频免费观看 | 日韩一区二区三区观看 | 亚洲激情婷婷 | 人人爱人人爽 | 国内视频1区 | 激情网站免费观看 | 91精品国产高清自在线观看 | 国产99久久久国产精品免费二区 | 亚洲欧洲xxxx | 美女网站免费福利视频 | www.天天操 | 亚洲伦理电影在线 | 精品久久久久一区二区国产 | 精品少妇一区二区三区在线 | 成人性生交大片免费观看网站 | 国产高清精品在线 | 国产成人av网站 | 久久久片| 中日韩在线视频 | 免费观看黄色av | 色综合网 | 女女av在线 | 国产精久久久久久久 | 亚洲 欧美 日韩 综合 | 高清av免费看 | 91视频91蝌蚪 | 92精品国产成人观看免费 | 亚洲精品国产精品国自产在线 | 天天操夜操视频 | 色婷婷久久久 | 成人四虎| 欧美日韩精品区 | 午夜精品影院 | 久久99久国产精品黄毛片入口 | 国产手机精品视频 | 成人国产精品av | 在线播放亚洲 | 国产精品久久久久一区二区三区 | 在线视频app | 日日夜夜天天 | 国产一级片一区二区三区 | 日韩欧美在线第一页 | 亚洲国产精品久久久久久 | 91mv.cool在线观看 | 亚洲永久字幕 | 亚洲精品www久久久久久 | www.福利| 国产精品xxxx18a99| 91黄色在线观看 | 精品一区二区日韩 | 色综合色综合久久综合频道88 | 开心激情五月网 | 天天天天爱天天躁 | 西西人体www444 | 91高清完整版在线观看 | 国产福利在线免费 | 中文av在线免费观看 | 精品国产乱码久久 | 欧美日韩综合在线观看 | 亚洲人成人在线 | 又黄又爽免费视频 | 黄色毛片视频 | 免费黄色a网站 | 91精选在线观看 | 久久一本综合 | 亚洲激情在线观看 | 园产精品久久久久久久7电影 | 免费日韩 精品中文字幕视频在线 | 成人网页在线免费观看 | 天天激情天天干 | 精品在线视频播放 | av在线播放网址 | 久久久久久久久电影 | 99久久99视频只有精品 | 国产成人91 | 成人av电影在线观看 | 欧美日韩性 | 天天综合网在线观看 | 免费看黄色小说的网站 | 黄色国产高清 | 国产69精品久久久久9999apgf | 91福利影院在线观看 | 九九九免费视频 | 又爽又黄又无遮挡网站动态图 | 国产黄在线免费观看 | 色吧久久 | 在线观看中文字幕一区 | 成人av网站在线观看 | 中文不卡视频 | 玖玖玖影院 | 波多野结衣在线视频一区 | 国产精品剧情在线亚洲 | 欧美日韩中文在线观看 | 在线看中文字幕 | 97在线观看免费高清完整版在线观看 | 美女视频永久黄网站免费观看国产 | 久久婷婷精品视频 | 激情电影影院 | 日韩在线中文字幕视频 | 久久狠狠亚洲综合 | www.久久久.com | 西西444www大胆无视频 | 九九免费在线观看 | wwwwwww色| 黄色大片日本免费大片 | 国产剧情一区二区 | 久久精品永久免费 | 久久久免费少妇 | 一区二区三区三区在线 | 这里只有精品视频在线 | 日韩在线观看精品 | 欧美一级性生活 | 麻豆久久一区二区 | 500部大龄熟乱视频 欧美日本三级 | 欧美在线一二 | 亚洲视频综合在线 | 久久综合免费视频 | 69国产精品成人在线播放 | 精品久久美女 | 久久99精品国产麻豆宅宅 | 午夜久久福利影院 | 波多野结衣视频一区二区 | 亚洲精品成人网 | 免费观看国产精品视频 | 成人av电影免费观看 | 中文字幕在线观看av | 日日碰夜夜爽 | 亚洲一二三区精品 | 色综合久久久久久久 | 欧美极品一区二区三区 | 久久精品毛片 | 亚洲精品视频在 | 九色porny真实丨国产18 | 91探花在线视频 | 天天射天天搞 | 天堂av影院 | 国产不卡免费 | 精品久久久精品 | 夜夜澡人模人人添人人看 | 国产精品男女 | 一区二区精品在线视频 | 狠狠色狠狠色综合系列 | 成人av播放| 国产小视频免费观看 | 99久国产 | 久久精品久久精品久久39 | 欧美最爽乱淫视频播放 | 亚洲成成品网站 | 五月天综合在线 | 久久综合色婷婷 | 热久久影视 | 欧美成人在线网站 | 色欧美成人精品a∨在线观看 | 一区二区三区中文字幕在线 | 精品国产一区二区三区在线 | 91综合视频在线观看 | 亚洲国产免费看 | 最近中文字幕国语免费高清6 | 国产色在线观看 | 91精品国产自产在线观看永久 | 久久亚洲免费视频 | 婷婷综合伊人 | 亚洲成a人片综合在线 | 久草网在线观看 | 婷婷在线色 | 日韩av成人在线 | 国产亚洲在线观看 | 国产精品麻豆果冻传媒在线播放 | 九九爱免费视频在线观看 | 亚洲一级片av | a色视频| 亚州精品天堂中文字幕 | 久久天天躁 | 黄色91在线观看 | 国产做aⅴ在线视频播放 | 一级特黄aaa大片在线观看 | 亚洲精品小视频 | 亚洲精品动漫久久久久 | 久久视讯| 久久国产精品视频 | 久草在线免费看视频 | 91日韩免费 | 日韩久久久久久久久久 | 国产不卡毛片 | 国产在线观看地址 | 四虎影院在线观看av | 国产精选视频 | 四虎国产精品免费观看视频优播 | 中文字幕第一页在线播放 | 二区三区在线观看 | 在线免费av电影 | 三级黄色a| 成年人在线视频观看 | 日韩欧美国产精品 | 99re6热在线精品视频 | 国产只有精品 | 丰满少妇在线观看网站 | 久久一区二区三区国产精品 | 又紧又大又爽精品一区二区 | 成人午夜精品福利免费 | 热久久免费视频精品 | 婷久久 | 99免在线观看免费视频高清 | 国产亚洲精品福利 | 菠萝菠萝在线精品视频 | 精品一区二区在线观看 | 亚洲黄色在线免费观看 | 免费黄色网止 | 国产免费专区 | 丁香激情网 | 国产中文字幕一区二区 | 成人免费观看a | 久久国产精品一区二区 | 美女免费网站 | 最近中文字幕免费视频 | 亚洲日本va中文字幕 | 96视频免费在线观看 | 久久久久免费网 | 91精品国产91 | 久久精品中文字幕一区二区三区 | 很黄很色很污的网站 | 久久爱www.| 国产精品午夜在线观看 | 天天爽夜夜爽人人爽一区二区 | 丝袜美腿亚洲 | 久久久久久久久久久久久久电影 | 亚洲精品美女在线观看 | 成人黄色电影视频 | 成人免费亚洲 | 国产精品一区二区三区在线 | 久久精品婷婷 | 欧美日韩伦理在线 | 四虎影视成人永久免费观看视频 | 中文字幕国产在线 | 精品国产免费av | 欧美91精品久久久久国产性生爱 | 国产精品毛片一区 | 伊人国产在线播放 | 亚洲精品国产品国语在线 | 黄视频色网站 | 探花视频在线版播放免费观看 | 国产精品免费久久久久影院仙踪林 | 日韩激情片在线观看 | 亚洲爱av| 成人av免费在线播放 | 久久久久草 | 日日夜夜狠狠干 | 国产精品对白一区二区三区 | 最近中文字幕免费 | 美女久久久久久久久久久 | 正在播放 久久 | 又黄又刺激的视频 | 日韩欧美一区二区在线 | 九九热re| 久久精品欧美视频 | 国产一级高清 | 久久免费美女视频 | 国产精品私拍 | 国产精品大全 | av3级在线| 日韩有码在线观看视频 | 日韩精品欧美专区 | 免费精品在线 | 99r在线观看| 久久无码精品一区二区三区 | 国产免费叼嘿网站免费 | 国内精品久久久久影院一蜜桃 | 国产一区在线免费观看视频 | 韩国一区视频 | 在线观看免费视频你懂的 | 一区二区三区动漫 | 成年人黄色免费看 | 国产小视频在线免费观看视频 | 2024av在线播放| 免费中文字幕视频 | 亚洲国产字幕 | 欧亚日韩精品一区二区在线 | 日韩二区三区在线 | 亚洲另类交 | 波多野结衣在线播放一区 | 五月天婷亚洲天综合网精品偷 | 激情综合亚洲精品 | 成人在线视频论坛 | 国产精品黄色在线观看 | 亚洲情感电影大片 | 在线免费观看视频一区二区三区 | 人人干网 | www.亚洲精品 | 国产色爽| 国产精品乱码久久 | 免费视频一二三区 | 色综合久久悠悠 | 亚洲色视频| 国产精品亚洲成人 |