1. 程式人生 > >從零開始學 Web 之 CSS3(八)CSS3三個案例

從零開始學 Web 之 CSS3(八)CSS3三個案例

一、CSS3三個案例

1、案例一:攜程網首頁

需求:頁面無橫向滾動條,頁面隨著寬度的改變自動伸縮。

程式碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        header {
            width: 100%;
            display: flex;
        }
        header > a  {
            flex: 1;
        }
        header > a > img {
            width: 100%;
        }
        main {
            width: 100%;
            padding: 0 10px;
            box-sizing: border-box;
        }
        main > .item {
            width: 100%;
            height: 100px;
            background-color: pink;
            border-radius: 10px;
            margin-top: 10px;
            display: flex;
            
        }
        main > .item:nth-of-type(1) {
            background-color: rgb(78, 50, 182);
        }
        main > .item:nth-of-type(2) {
            background-color: rgb(31, 153, 209);
        }
        main > .item:nth-of-type(3) {
            background-color: rgb(240, 147, 7);
        }
        main > .item:nth-of-type(4) {
            background-color: rgb(187, 19, 131);
        }
        .item > .left {
            flex: 1;
        }
        .item > .right {
            flex: 2;
            flex-wrap: wrap;
            display: flex;
        }
        .item > .right > a {
            display: block;
            width: 50%;
            color: #fff;
            text-decoration: none;
            line-height: 50px;
            text-align: center;
            border-left: 1px solid #ccc;
            border-bottom: 1px solid #ccc;
            box-sizing: border-box;
        }
        .item > .right > a:nth-last-of-type(-n+2) {
            border-bottom: none;
        }

        .extra {
            width: 100%;
            display: flex;
        }
        .extra > a {
            flex: 1;
        }
        .extra > a > img {
            width: 100%;
        }
        footer {
            width: 100%;
        }
        footer > .nav {
            width: 100%;
            height: 30px;
            border-top: 2px solid #ccc;
            border-bottom: 2px solid #ccc;
            display: flex;
        }
        footer > .nav > a {
            flex: 1;
            text-align: center;
            line-height: 30px;
            text-decoration: none;
            color: #666;
        }
        footer > .link {
            text-align: center;
            margin-top: 5px;
        }
        footer > .copyright {
            text-align: center;
            margin-top: 5px;
        }

    </style>
</head>

<body>
    <div class="container">
        <header>
            <a href="javascript:;"><img src="./images/banner.jpg"></a>
        </header>
        <main>
            <section class="item">
                <div class="left"></div>
                <div class="right">
                    <a href="javascript:;">海外酒店</a>
                    <a href="javascript:;">團購</a>
                    <a href="javascript:;">特價機票</a>
                    <a href="javascript:;">民宿客棧</a>
                </div>
            </section>
            <section class="item">
                <div class="left"></div>
                <div class="right">
                    <a href="javascript:;">海外酒店</a>
                    <a href="javascript:;">團購</a>
                    <a href="javascript:;">特價機票</a>
                    <a href="javascript:;">民宿客棧</a>
                </div>
            </section>
            <section class="item">
                <div class="left"></div>
                <div class="right">
                    <a href="javascript:;">海外酒店</a>
                    <a href="javascript:;">團購</a>
                    <a href="javascript:;">特價機票</a>
                    <a href="javascript:;">民宿客棧</a>
                </div>
            </section>
            <section class="item">
                <div class="left"></div>
                <div class="right">
                    <a href="javascript:;">海外酒店</a>
                    <a href="javascript:;">團購</a>
                    <a href="javascript:;">特價機票</a>
                    <a href="javascript:;">民宿客棧</a>
                </div>
            </section>
            <section class="extra">
                <a href="javascript:;"><img src="./images/extra_1.png"></a>
                <a href="javascript:;"><img src="./images/extra_2.png"></a>
            </section>
        </main>
        <footer>
            <div class="nav">
                <a href="javascript:;">電話預定</a>
                <a href="javascript:;">下載客戶端</a>
                <a href="javascript:;">我的</a>
            </div>
            <p class="link">
                <a href="javascript:;">網站地圖</a>
                <a href="javascript:;">English</a>
                <a href="javascript:;">電腦版</a>
            </p>
            <p class="copyright">&copy; 攜程旅行</p>
        </footer>
    </div>
</body>

</html>

案例截圖:

2、案例二:切割輪播圖

示例程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            width: 560px;
            height: 300px;
            margin: 100px auto;
            position: relative;
        }
        .container > ul {
            width: 100%;
            height: 100%;
            list-style: none;
            /* transform: rotate3d(1,1,0,-45deg); */
            transform-style: preserve-3d;
        }
        ul > li {
            width: 20%;
            height: 100%;
            float: left;
            position: relative;
            transform-style: preserve-3d;
            transition: transform 0.5s;
        }
        ul > li > span {
            position: absolute;
            width: 100%;
            height: 100%;
        }
        ul > li:nth-of-type(2) > span { 
            background-position: -100%;
        }
        ul > li:nth-of-type(3) > span { 
            background-position: -200%;
        }
        ul > li:nth-of-type(4) > span { 
            background-position: -300%;
        }
        ul > li:nth-of-type(5) > span { 
            background-position: -400%;
        }
        ul > li > span:nth-of-type(1) {
            background-image: url("./images/q1.jpg");
            transform: translateZ(150px);
        }
        ul > li > span:nth-of-type(2) {
            background-image: url("./images/q2.jpg");
            transform: translateY(-150px) rotateX(90deg);
        }
        ul > li > span:nth-of-type(3) {
            background-image: url("./images/q3.jpg");
            transform: translateZ(-150px) rotateX(180deg);
        }
        ul > li > span:nth-of-type(4) {
            background-image: url("./images/q4.jpg");
            transform: translateY(150px) rotateX(-90deg);
        }
        .left {
            width: 60px;
            height: 60px;
            background-color: rgba(0,0,0,0.5);
            line-height: 60px;
            color: #fff;
            text-align: center;
            font-family: "Consolas";
            font-size: 40px;
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            cursor: pointer;
            z-index: 10;
        }
        .right {
            width: 60px;
            height: 60px;
            background-color: rgba(0,0,0,0.5);
            line-height: 60px;
            color: #fff;
            text-align: center;
            font-family: "Consolas";
            font-size: 40px;
            position: absolute;
            right: 0;
            top: 50%;
            transform: translateY(-50%);
            cursor: pointer;
            z-index: 10;
        }
    </style>
</head>
<body>
    <div class="container">
        <ul>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
        </ul>
        <span class="left"><</span>
        <span class="right">></span>
    </div>
</body>
<script>
    var index = 0;
    // 新增節流閥
    var flag = true;
    document.querySelector(".left").onclick = function () {
        if(flag) {
            flag = false;
            index++;
            var liObjs = document.querySelectorAll("li");
            for(var i=0; i<liObjs.length; i++) {
                liObjs[i].style.transform = "rotateX("+90*index+"deg)";
                liObjs[i].style.transitionDelay = i*0.1 + "s";
            }
            setTimeout(function () {  
                flag = true;
            }, 1000);
        }
    }
    document.querySelector(".right").onclick = function () {
        if(flag) {
            flag = false;
            index--;
            var liObjs = document.querySelectorAll("li");
            for(var i=0; i<liObjs.length; i++) {
                liObjs[i].style.transform = "rotateX("+90*index+"deg)";
                liObjs[i].style.transitionDelay = i*0.1 + "s";
            }
            setTimeout(function () {  
                flag = true;
            }, 1000);
        }
    }
</script>
</html>

示例效果:

3、案例三:360瀏覽器首頁

案例程式碼:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="./css/360Page.css">
    <script src="./js/jquery.min.js"></script>
    <script src="./js/jquery.fullPage.min.js"></script>
</head>

<body>
    <div id="360Page">
        <div class="section first">
            <div class="logo"></div>
            <div class="text">
                <img src="./images/text_1.png" alt="">
                <img src="./images/text_2.png" alt="">
                <img src="./images/text_3.png" alt="">
                <img src="./images/text_4.png" alt="">
                <img src="./images/text_5.png" alt="">
                <img src="./images/text_6.png" alt="">
                <img src="./images/text_7.png" alt="">
                <img src="./images/text_8.png" alt="">
            </div>
            <div class="info1"></div>

        </div>
        <div class="section second">
            <div class="shield">
                <img src="./images/shield_1.png" alt="">
                <img src="./images/shield_2.png" alt="">
                <img src="./images/shield_3.png" alt="">
                <img src="./images/shield_4.png" alt="">
                <img src="./images/shield_5.png" alt="">
                <img src="./images/shield_6.png" alt="">
                <img src="./images/shield_7.png" alt="">
                <img src="./images/shield_8.png" alt="">
                <img src="./images/shield_9.png" alt="">
            </div>
            <div class="info2"></div>
        </div>
        <div class="section third">
            <div class="info3"></div>
            <div class="circle">
                <div class="rocket"></div>
            </div>
        </div>
        <div class="section fourth">
            <div class="search">
                <div class="search-bar"></div>
                <div class="search-text"></div>
                <div class="search-content"></div>
            </div>
            <div class="info4"></div>
        </div>
        <div class="section fifth">
            <h3>第五屏</h3>
        </div>
    </div>
</body>

<script>
    $(function(){
        $('#360Page').fullpage({
            sectionsColor: ['#0da5d6', '#2AB561', '#DE8910', '#16BA9D', '#0DA5D6'],
            afterLoad: function (anchorLink, index) { 
                $(".section").removeClass("current"); 
                $(".section:eq("+(index-1)+")").addClass("current");
            }
        });
    });
</script>

</html>

全屏外掛的使用:

sectionsColor:設定每一屏的顏色;

afterLoad:回撥函式,當每一屏載入完成後需要執行的動作。

CSS 程式碼:

* {
    margin: 0;
    padding: 0;
}

.section {
    overflow: hidden;
}

/* 第一屏 */
.first {
    padding-top: 100px;
}

.first .logo {
    width: 251px;
    height: 186px;
    background-image: url("../images/logo.png");
    margin: 0 auto;
}
.first .text {
    text-align: center;
    margin: 100px 0 20px 0;
}

.first .text > img {
    margin: 0 20px;
    opacity: 0.1;
    transition: margin 0.8s,opacity 0.8s;
}
.first .info1 {
    width: 772px;
    height: 49px;
    background-image: url("../images/info_1.png");
    margin: 0 auto;
}
/* 第一屏動畫 */
.first.current .text > img {
    margin: 0 5px;
    opacity: 1;
}

/* 第二屏 */

.second > div{
    display: flex;
    justify-content: space-around;
    align-items: center;
}
.second .shield {
    width: 440px;
    font-size: 0; /* 消除盾牌之間的間隙*/
}
.second .shield > img {
    opacity: 0.1;
    transition: transform 0.8s, opacity 0.8s;
}

.second .shield > img:nth-of-type(1){
    transform: translate(-100px, 200px) rotate(30deg);
}
.second .shield > img:nth-of-type(2){
    transform: translate(300px, 20px) rotate(60deg);
}
.second .shield > img:nth-of-type(3){
    transform: translate(300px, 10px) rotate(-50deg);
}
.second .shield > img:nth-of-type(4){
    transform: translate(600px, 20px) rotate(-90deg);
}
.second .shield > img:nth-of-type(5){
    transform: translate(30px, 200px) rotate(90deg);
}
.second .shield > img:nth-of-type(6){
    transform: translate(-30px, -30px) rotate(-30deg);
}
.second .shield > img:nth-of-type(7){
    transform: translate(0px, 100px) rotate(-30deg);
}
.second .shield > img:nth-of-type(8){
    transform: translate(320px, 150px) rotate(30deg);
}
.second .shield > img:nth-of-type(9){
    transform: translate(-190px, -280px) rotate(-30deg);
}
.second .info2 {
    width: 635px;
    height: 309px;
    background-image: url("../images/info_2.png");
}
/* 第二屏動畫 */
.second.current .shield > img {
    transform: none;
    opacity: 1;
}

/* 第三屏 */
.third {
    position: relative;
}
.third .info3 {
    width: 631px;
    height: 278px;
    background-image: url("../images/info_3.png");
    position: absolute;
    left:50%;
    top: 50%;
    transform: translate(-100%,-50%);
}
.third .circle {
    width: 453px;
    height: 449px;
    background-image: url("../images/circle.png");
    position: absolute;
    left: 57%;
    top: 50%;
    transform: translateY(-50%);
}
.third .circle .rocket {
    width: 203px;
    height: 204px;
    background-image: url("../images/rocket.png");
    position: absolute;
    left: -50%;
    top: 150%;
    transition: left 0.8s, top 0.8s;
}
/* 第三屏動畫 */
.third.current .circle .rocket {
    left: 115px;
    top: 115px;
}

/* 第四屏 */
.fourth {
    position: relative;
}
.fourth .search {
    width: 529px;
    height: 438px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-115%, -50%);
    overflow: hidden;
}
.fourth .search .search-bar{
    width: 529px;
    height: 66px;
    background-image: url("../images/search.png");
    transform: translateX(-100%);
}
.fourth .search .search-text{
    width: 0;
    height: 22px;
    background-image: url("../images/key.png");
    position: absolute;
    left: 18px;
    top: 23px;
}
.fourth .search .search-content{
    width: 529px;
    height: 0;
    background-image: url("../images/result.png");
    margin-top: -12px;
}
.fourth .info4 {
    width: 612px;
    height: 299px;
    background-image: url("../images/info_4.png");
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translateY(-50%);
}
/* 第四屏動畫 */
.fourth.current .search .search-bar{
    transform: none;
    transition: transform 0.8s;
}
.fourth.current .search .search-text{
    width: 99px;
    transition: width 0.8s 0.8s steps(5);
}
.fourth.current .search .search-content{
    height: 372px;
    transition: height 0.8s 1.6s;
}

使用 current 交集選擇器實現,當載入完某一全屏後需要執行的動畫。

相關推薦

開始 Web jQueryeach,多庫共存,包裝集,外掛

一、each 方法 each 方法用來遍歷 jQuery 物件的,它的引數是一個事件處理函式,這個事件處理函式有兩個引數,第一個引數是索引,第二個引數時索引對應的 DOM 物件,使用的時候注意轉成 jQuery 物件。 語法: // 引數1:元素集合索引 // 引數2:索引對應的DOM元素 元素集合.ea

開始 Web DOMDOM的概念,對標簽操作

關註 1.5 pan 什麽 tin p標簽 nod text == 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,

開始 Web DOM節點

def clas scrip while p標簽 設置 ner 操作 text 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相

開始 Web jQuery獲取和操作元素的屬性

eight images idt 隱藏 lis 屬性 ner master lin 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

開始 Web jQuery為元素綁定多相同事件,解綁事件

png 好用 添加 方式 執行 存在 區別 也會 地址 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:http://ww

開始 Web jQuery事件冒泡,事件參數對象,鏈式編程原理

eval uri turn 定位 return 也會 否則 ont sele 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客

開始 Web Ajax同步異步請求,數據格式

遊記 document 空閑 name center 20px 實現 resp 也會 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之

開始 Web AjaxjQuery中的Ajax

var 技術分享 else parse cnblogs 我會 clas alt jquer 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web

開始 Web HTML5表單,多媒體新增內容,新增獲取操作元素,自定義屬性

器) user 對比 style 按鈕 ont mp3 url -- 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:ht

開始 Web ES6ES6基礎語法四

實現 fine 開始 isf 原理 mat 系列教程 include number 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

開始 Web CSS選擇器

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 W

開始 Web DOM為元素繫結與解綁事件

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... +------------------------------------------------------------ github:https://github.com/Daotin/Web 微信公眾號:Web前端之

開始WebHTML標籤、超連結、特殊符號、列表、音樂、滾動、head等

大家好,這裡是 Daotin 從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、標籤 1、單標籤 註釋標籤

開始 Web Ajax同步非同步請求,資料格式

一、同步請求與非同步請求 同步請求:在使用者進行請求傳送之後,瀏覽器會一直等待伺服器的資料返回,如果網路延遲比較高,瀏覽器就一直卡在當前介面,直到伺服器返回資料才可進行其他操作。 非同步請求:在使用者進行請求傳送之後,瀏覽器可以自由操作頁面中其他的元素,當伺服器放回資料的時候,才觸發相應事件,對返回的資料

開始 Web HTML5HTML5概述,語義化標籤

一、HTML5簡介 1、什麼是html5 html5 不是一門新的語言,而是我們之前學習的 html 的第五次重大修改版本。 2、html的發展歷史 超文字標記語言(第一版,不叫 HTML 1.0)——在1993年6月作為網際網路工程工作小組(IETF)工作草案發布(並非標準); HTML 2.0——19

開始 Web DOM對樣式的操作,獲取元素的方式

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 1、對樣式的操作

開始 Web BOMclient系列

一、client 系列 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style

開始 Web ES6ES6基礎語法二

一、Promise Promise是一個物件,代表了未來某個將要發生的事件(,這個事件通常是一個非同步操作) 有了Promise物件, 可以將非同步操作以同步的流程表達出來, 避免了層層巢狀的回撥函式(俗稱'回撥地獄')。 ES6的Promise是一個建構函式, 用來生成promise例項。 1、prom

開始 Web AjaxPHP基礎語法

一、PHP 基礎語法 1、基本結構 所有PHP程式碼都要寫到 <?php ... ?> 裡面。 PHP檔案可以和 HTML 檔案結合進行使用。 PHP檔案的預設副檔名是 ".php"。 PHP程式碼必須在伺服器上執行。 2、列印語句 echo: 的作用在頁面中輸入字串(只能列印字串,數字等

開始 Web JavaScript陣列

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、陣列 1、陣列