# 長得很像Netflix的首頁
---
tags: HTML CSS relate
---
###### tags: `HTML, CSS`

[作品連結](https://chiehLiu.github.io/git-projects/NETFLIX/)
這個專案一樣有用到一點js,不過我就專注在練習切版。
全域設定:
```css=
/*簡單的全域顏色變數*/
: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
``` css=
/* Container */
/* 這個地方可以讓tabs跟著視窗縮放以及讓他們置中並且修飾他們 */
.container {
max-width: 70%;
margin: auto;
overflow: hidden;
padding: 0 2rem;
}
```
各種文字的基本樣式
```css=
/* Text Styles 這邊是text的功能鍵區域 設定他們的大小顏色並可以任意丟進去需要的地方 */
.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;
}
```
所有的按鈕的基本樣式
```css=
/* Buttons */
.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
```htmlembedded=
<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:
```htmlembedded=
<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:
這裡設定的是整片視窗的圖片大小以及設定定位給其他的物件
```css=
.showcase {
width: 100%;
height: 93vh;
/* 這邊先設定相對定位因為等下會設定其他絕對定位在這個父層上面 */
position: relative;
background: url('https://i.ibb.co/vXqDmnh/background.jpg') no-repeat center center/cover;
}
```
這邊使用偽元素來疊層上去陰影
```css=
.showcase::after {
/* content是偽元素必備的屬性內容可以為空也可以填入文字顯示 */
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* zindex代表覆蓋的順序 */
z-index: 1;
/* 這邊的rgba的a的部分代表透明度0%代表透明100%代表不透明 */
background: rgba(0, 0, 0, 60%);
/* box-shadow處理陰影 因為有兩側所以設定了兩組,左邊那組設定負的px*/
box-shadow: inset 120px 100px 250px #000000, inset -120px -100px 250px #000000;
}
```
這邊主要控制的是Netflix那一整條的區域並設定高度
```css
.showcase-top {
position: relative;
/* zindex代表覆蓋的順序 */
z-index: 2;
height: 90px;
}
```
這邊就是針對Netflix圖片logo的部分調整定位 大小
```css
.showcase-top img {
width: 170px;
/* 向這邊它就定位在showcase-top上面 */
position: absolute;
/* 這邊比較複雜,因為logo的部分也有長度所以當設定好定位的時候logo的長度會凸出去,
所以這個時候就可以使用transform: translate(-50%, -50%),讓logo長度的50%左右跟上下回來就會置中瞜! */
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
```
這邊處理 link的部分也就是Sign In的部位
```css
.showcase-top a {
/* 按鈕必須移動位置所以設定absolute */
position: absolute;
top: 50%;
right: 0;
/*這邊一樣因應按鈕本身就有寬度所以使用transform: translate(-50%, -50%)上下往回50%就可以置中了*/
transform: translate(-50%, -50%);
}
```
這邊是中間的紅框文案內容區域+一個大按鈕
```css
.showcase-content {
position: relative;
/* zindex代表覆蓋的順序必須蓋過陰影 */
z-index: 2;
width: 65%;
margin: auto;
/* 這邊就很直觀直接Flex下去 */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-top: 9rem;
}
```
針對內文調整
```css
.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,我會注重再切版的部分。
```htmlembedded=
<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,加上深灰色底線
```css
.tabs {
background: var(--dark-color);
padding-top: 1rem;
border-bottom: 3px solid #3d3d3d;
border-right: none;
}
```
這個container包住三個item,所以直接grid設定下去很直觀
```css
.tabs .container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 1rem;
align-items: center;
justify-content: center;
text-align: center;
}
```
首先 p 區域是文字區域的大小跟位置微調
設置container下面所有的items讓它們都有padding上下
設置hover 碰觸時出現手指指標以及呈現白色
每個icon下方的紅色border
```css
.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:
```htmlembedded=
<section class="tab-content">
<div class="container">
<!-- Tab Content 1 -->
<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後全部置中
```css=
/*最上方的tab-content是包裹整個tab區塊的全域設定*/
.tab-content {
padding: 3rem 0;
background: #000;
color: #fff;
}
#tab-1-content .tab-1-content-inner {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 2rem;
align-items: center;
justify-content: center;
}
```
**tab區域二**
這邊要設置兩大部分:
1.content-top
這個部分是上方的文字以及按鈕
2.content-bottom
下方三個items以及文案

html:
``` htmlembedded=
<!-- Tab Content 2 -->
<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,設置好版面比例之後就直接置中很直觀
```css=
#tab-2-content .tab-2-content-top {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 1rem;
justify-content: center;
align-items: center;
}
#tab-2-content .tab-2-content-bottom {
margin-top: 2rem;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
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:
```htmlembedded=
<!-- Tab Content 3 -->
<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)
接下來兩個設定是為了讓他們做變色框的設定也很直觀
```css=
.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:
```htmlembedded=
<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讓他們四個成一排
```css=
.footer {
/* 這邊因為希望比container大所以沒有使用container而是額外使用max-width */
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, 1fr);
grid-gap: 2rem;
}
.footer li {
line-height: 1.9;
}
```
-----------------------
**@media**
這邊解釋網頁縮放的設定:
當畫面小於960px得時候下方條件生效,除了一些東西縮小之外,有文字隱藏,logo位置調整,
四排的物件縮排便成兩排
當畫面小於700px時還有另一部份的條件會生效,陰影的部分會變小,兩排的物件變成一排,以及一些微條
```css=
@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, 1fr);
}
.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: 1fr;
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: 1fr;
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;
}
}
```