長得很像 Netflix 的首頁
作品連結
這個專案一樣有用到一點 js,不過我就專注在練習切版。
全域設定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 :root { --primary-color : #e50914 ; --dark-color : #141414 ; } * { box-sizing : border-box; margin : 0 ; padding : 0 ; } body { font-family : 'Arial' , sans-serif; -webkit-font -smoothing: antialiased; background : #000 ; color : #999 ; } ul { list-style : none; } h1 ,h2 ,h3 ,h4 { color : #fff ; } a { color : #fff ; text-decoration : none; } p { margin : 0.5rem 0 ; } img { width : 100% ; }
功能性設定
tab 區域的 items
1 2 3 4 5 6 7 8 9 .container { max-width : 70% ; margin : auto; overflow : hidden; padding : 0 2rem ; }
各種文字的基本樣式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 .text-xl { font-size : 2rem ; } .text-lg { font-size : 1.8rem ; margin-bottom : 1rem ; } .text-md { margin-bottom : 1.5rem ; font-size : 1.2rem ; } .text-center { text-align : center; } .text-dark { color : #999 ; }
所有的按鈕的基本樣式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .btn { display : inline-block; background : var (--primary-color); color : #fff ; padding : 0.4rem 1.3rem ; font-size : 1rem ; text-align : center; border : none; cursor : pointer; margin-right : 0.5rem ; transition : opacity 0.2s ease-in; outline : none; box-shadow : 0 1px 0 rgba (0 , 0 , 0 , 0.45 ); border-radius : 2px ; }
head:
這邊中間的 script 的部分是引入 icon
1 2 3 4 5 6 7 8 <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <script src ="https://kit.fontawesome.com/b6d6d6c74b.js" crossorigin ="anonymous" > </script > <link rel ="stylesheet" href ="css/style.css" > <title > Netflix - Watch TV Shows Online, Watch Movies Online</title > </head >
body:
要處理的部分有四點:
1.兩個紅色框框區塊
2.背景圖片
3.使用偽元素上陰影
4.調整所有文字以及按鈕部分
有最上方 Netflix 跟 Sign in 處,用 header 來處理
html:
1 2 3 4 5 6 7 8 9 10 11 <header class ="showcase" > <div class ="showcase-top" > <img src ="https://i.ibb.co/r5krrdz/logo.png" alt ="" /> <a href ="#" class ="btn btn-rounded" > Sign In</a > </div > <div class ="showcase-content" > <h1 > See what's next</h1 > <p > Watch anywhere. Cancel Anytime</p > <a href ="#" class ="btn btn-xl" > Watch Free For 30 Days <i class ="fas fa-chevron-right btn-icon" > </i > </a > </div > </header >
css:
這裡設定的是整片視窗的圖片大小以及設定定位給其他的物件
1 2 3 4 5 6 7 .showcase { width : 100% ; height : 93vh ; position : relative; background : url ('https://i.ibb.co/vXqDmnh/background.jpg' ) no-repeat center center/cover; }
這邊使用偽元素來疊層上去陰影
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .showcase ::after { content : '' ; position : absolute; top : 0 ; left : 0 ; width : 100% ; height : 100% ; z-index : 1 ; background : rgba (0 , 0 , 0 , 60% ); box-shadow : inset 120px 100px 250px #000000 , inset -120px -100px 250px #000000 ; }
這邊主要控制的是 Netflix 那一整條的區域並設定高度
1 2 3 4 5 6 .showcase-top { position : relative; z-index : 2 ; height : 90px ; }
這邊就是針對 Netflix 圖片 logo 的部分調整定位 大小
1 2 3 4 5 6 7 8 9 10 .showcase-top img { width : 170px ; position : absolute; top : 50% ; left : 50% ; transform : translate (-50% , -50% ); }
這邊處理 link 的部分也就是 Sign In 的部位
1 2 3 4 5 6 7 8 .showcase-top a { position : absolute; top : 50% ; right : 0 ; transform : translate (-50% , -50% ); }
這邊是中間的紅框文案內容區域+一個大按鈕
1 2 3 4 5 6 7 8 9 10 11 12 13 14 .showcase-content { position : relative; z-index : 2 ; width : 65% ; margin : auto; display : flex; flex-direction : column; justify-content : center; align-items : center; text-align : center; margin-top : 9rem ; }
針對內文調整
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .showcase-content h1 { font-weight : 700 ; font-size : 5.2rem ; line-height : 1.1 ; margin : 0 0 2rem ; } .showcase-content p { text-transform : uppercase; color : #fff ; font-weight : 400 ; font-size : 1.9rem ; line-height : 1.25 ; margin : 0 0 2rem ; }
tab 區域
重點部分:
1.3 個 icon 處理
2.紅色跟深灰色底線處理
3.bgc 的顏色比較淡要改
html:
這部分有牽涉到一些 js,我會注重再切版的部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <section class ="tabs" > <div class ="container" > <div id ="tab-1" class ="tab-item tab-border" > <i class ="fas fa-door-open fa-3x" > </i > <p class ="hide-sm" > Cancel at any time</p > </div > <div id ="tab-2" class ="tab-item" > <i class ="fas fa-tablet-alt fa-3x" > </i > <p class ="hide-sm" > Watch anywhere</p > </div > <div id ="tab-3" class ="tab-item" > <i class ="fas fa-tags fa-3x" > </i > <p class ="hide-sm" > Pick your price</p > </div > </div > </section >
css:
設定整個 tab 區域的背景色跟 padding,加上深灰色底線
1 2 3 4 5 6 .tabs { background : var (--dark-color); padding-top : 1rem ; border-bottom : 3px solid #3d3d3d ; border-right : none; }
這個 container 包住三個 item,所以直接 grid 設定下去很直觀
1 2 3 4 5 6 7 8 .tabs .container { display : grid; grid-template-columns : repeat (3 , 1 fr); grid-gap: 1rem ; align-items : center; justify-content : center; text-align : center; }
首先 p 區域是文字區域的大小跟位置微調
設置 container 下面所有的 items 讓它們都有 padding 上下
設置 hover 碰觸時出現手指指標以及呈現白色
每個 icon 下方的紅色 border
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 .tabs p { font-size : 1.2rem ; padding-top : 0.5rem ; } .tabs .container > div { padding : 1.5rem 0 ; } .tabs .container > div :hover { color : #fff ; cursor : pointer; } .tab-border { border-bottom : var (--primary-color) 4px solid; }
Tab Content
區域一
比較直觀就直接一個 div 解決
html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <section class ="tab-content" > <div class ="container" > <div id ="tab-1-content" class ="tab-content-item show" > <div class ="tab-1-content-inner" > <div > <p class ="text-lg" > If you decide Netflix isn't for you - no problem. No commitment. Cancel online anytime. </p > <a href ="#" class ="btn btn-lg" > Watch Free For 30 Days</a > </div > <img src ="https://i.ibb.co/J2xDJV7/tab-content-1.png" alt ="" /> </div > </div >
css:
這邊也是直接 grid 把區塊平分,設定 gap 後全部置中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .tab-content { padding : 3rem 0 ; background : #000 ; color : #fff ; } #tab-1-content .tab-1-content-inner { display : grid; grid-template-columns : repeat (2 , 1 fr); grid-gap: 2rem ; align-items : center; justify-content : center; }
tab 區域二
這邊要設置兩大部分:
1.content-top 這個部分是上方的文字以及按鈕
2.content-bottom 下方三個 items 以及文案
html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <div id ="tab-2-content" class ="tab-content-item" > <div class ="tab-2-content-top" > <p class ="text-lg" > Watch TV shows and movies anytime, anywhere — personalized for you. </p > <a href ="#" class ="btn btn-lg" > Watch Free For 30 Days</a > </div > <div class ="tab-2-content-bottom" > <div > <img src ="https://i.ibb.co/DpdN7Gn/tab-content-2-1.png" alt ="" /> <p class ="text-md" > Watch on your TV </p > <p class ="text-dark" > Smart TVs, PlayStation, Xbox, Chromecast, Apple TV, Blu-ray players and more. </p > </div > <div > <img src ="https://i.ibb.co/R3r1SPX/tab-content-2-2.png" alt ="" /> <p class ="text-md" > Watch instantly or download for later </p > <p class ="text-dark" > Available on phone and tablet, wherever you go. </p > </div > <div > <img src ="https://i.ibb.co/gDhnwWn/tab-content-2-3.png" alt ="" /> <p class ="text-md" > Use any computer </p > <p class ="text-dark" > Watch right on Netflix.com. </p > </div > </div > </div >
css:
這邊處理全部都直接 grid,設置好版面比例之後就直接置中很直觀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #tab-2-content .tab-2-content-top { display : grid; grid-template-columns : 2 fr 1 fr; grid-gap: 1rem ; justify-content : center; align-items : center; } #tab-2-content .tab-2-content-bottom { margin-top : 2rem ; display : grid; grid-template-columns : 1 fr 1 fr 1 fr; grid-gap: 2rem ; justify-content : center; align-items : center; text-align : center; }
tab 區域三 table
這邊來製作表單:
上方大標題以及紅色按鈕使用兩個全域型 class 來設定,class=”text-center”,class=”text-lg” 這兩個 class 內部自訂文字顏色大小並且置中
表頭(thead)
表身體(tbody)
html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 <div id ="tab-3-content" class ="tab-content-item" > <div class ="text-center" > <p class ="text-lg" > Choose one plan and watch everything on Netflix. </p > <a href ="#" class ="btn btn-lg" > Watch Free For 30 Days</a > </div > <table class ="table" > <thead > <tr > <th > </th > <th > Basic</th > <th > Standard</th > <th > Premium</th > </tr > </thead > <tbody > <tr > <td > Monthly price after free month ends on 6/19/19</td > <td > $8.99</td > <td > $12.99</td > <td > $15.99</td > </tr > <tr > <td > HD Available</td > <td > <i class ="fas fa-times" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > <tr > <td > Ultra HD Available</td > <td > <i class ="fas fa-times" > </i > </td > <td > <i class ="fas fa-times" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > <tr > <td > Screens you can watch on at the same time</td > <td > 1</td > <td > 2</td > <td > 4</td > </tr > <tr > <td > Watch on your laptop, TV, phone and tablet</td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > <tr > <td > Unlimited movies and TV shows</td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > <tr > <td > Cancel anytime</td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > <tr > <td > First month free</td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > <td > <i class ="fas fa-check" > </i > </td > </tr > </tbody > </table > </div > </div > </section >
css:
class=”table”包裹住全部的表格,並且讓格線崩塌
.table thead th 讓 Basic Standard Premium 大寫並調整它們的 padding
.table tbody 這邊都是他的預設屬性(我查資料已經不適用於 HTML5)
接下來兩個設定是為了讓他們做變色框的設定也很直觀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 .table { width : 100% ; margin-top : 2rem ; border-collapse : collapse; border-spacing : 0 ; } .table thead th { text-transform : uppercase; padding : 0.8rem ; } .table tbody { display : table-row-group; vertical-align : middle; border-color : inherit; } .table tbody tr td { color : #999 ; padding : 0.8rem 1.2rem ; text-align : center; } .table tbody tr td :first -child { text-align : left; } .table tbody tr :nth-child (odd) { background : #222 ; }
Footer
兩個部分組成:
上方一個段落 p
footer-cols
html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <footer class ="footer" > <p > Questions? Call 1-866-579-7172</p > <div class ="footer-cols" > <ul > <li > <a href ="#" > FAQ</a > </li > <li > <a href ="#" > Investor Relations</a > </li > <li > <a href ="#" > Ways To Watch</a > </li > <li > <a href ="#" > Corporate Information</a > </li > <li > <a href ="#" > Netflix Originals</a > </li > </ul > <ul > <li > <a href ="#" > Help Center</a > </li > <li > <a href ="#" > Jobs</a > </li > <li > <a href ="#" > Terms Of Use</a > </li > <li > <a href ="#" > Contact Us</a > </li > </ul > <ul > <li > <a href ="#" > Account</a > </li > <li > <a href ="#" > Redeem Gift Cards</a > </li > <li > <a href ="#" > Privacy</a > </li > <li > <a href ="#" > Speed Test</a > </li > </ul > <ul > <li > <a href ="#" > Media Center</a > </li > <li > <a href ="#" > Buy Gift Cards</a > </li > <li > <a href ="#" > Cookie Preferences</a > </li > <li > <a href ="#" > Legal Notices</a > </li > </ul > </div > </footer >
css:
整個 footer 區域為了比上方的 containter 大一些,所以多設置了 max-width,並且上下加點 margin 並且置中,在使用 overflow 的方式讓它出現卷軸。
footer-cols 的部分一樣使用 grid 讓他們四個成一排
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 .footer { max-width : 70% ; margin : 1rem auto; overflow : auto; } .footer ,.footer a { color : #999 ; font-size : 0.9rem ; } .footer p { margin-bottom : 1.5rem ; } .footer .footer-cols { display : grid; grid-template-columns : repeat (4 , 1 fr); grid-gap: 2rem ; } .footer li { line-height : 1.9 ; }
@media
這邊解釋網頁縮放的設定:
當畫面小於 960px 得時候下方條件生效,除了一些東西縮小之外,有文字隱藏,logo 位置調整,
四排的物件縮排便成兩排
當畫面小於 700px 時還有另一部份的條件會生效,陰影的部分會變小,兩排的物件變成一排,以及一些微條
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 @media (max-width : 960px ) { .showcase { height : 70vh ; } .hide-sm { display : none; } .showcase-top img { top : 30% ; left : 5% ; transform : translate (0 ); } .showcase-content h1 { font-size : 3.7rem ; line-height : 1 ; } .showcase-content p { font-size : 1.5rem ; } .footer .footer-cols { grid-template-columns : repeat (2 , 1 fr); } .btn-xl { font-size : 1.5rem ; padding : 1.4rem 2rem ; text-transform : uppercase; } .text-xl { font-size : 1.5rem ; } .text-lg { font-size : 1.3rem ; margin-bottom : 1rem ; } .text-md { margin-bottom : 1rem ; font-size : 1.2rem ; } } @media (max-width : 700px ) { .showcase ::after { background : rgba (0 , 0 , 0 , 0.6 ); box-shadow : inset 80px 80px 150px #000000 , inset -80px -80px 150px #000000 ; } .showcase-content h1 { font-size : 2.5rem ; line-height : 1 ; } .showcase-content p { font-size : 1rem ; } #tab-1-content .tab-1-content-inner { grid-template-columns : 1 fr; text-align : center; } #tab-2-content .tab-2-content-top { display : block; text-align : center; } #tab-2-content .tab-2-content-bottom { margin-top : 2rem ; display : grid; grid-template-columns : 1 fr; grid-gap: 2rem ; text-align : center; } .btn-xl { font-size : 1rem ; padding : 1.2rem 1.6rem ; text-transform : uppercase; } } @media(max-height: 600px) { .showcase-content { margin-top : 3rem ; } }