介紹 成品 使用css來製作一個一頁式的網站,將網站分為表頭、特色區塊、食物照片區、訂餐方法介紹…等,從不同區塊,去操作字型、文字排版、圖片處理。
首先,文字字型的選擇 先用Normalize.css,下載並連結 字型:使用google font > lato
text-rendering告訴渲染引擎工作時如何優化顯示文字
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 *{ margin : 0 ; padding : 0 ; box-sizing : border-box; } html { background-color : #fff ; color : #555 ; font-family : 'Lato' , 'Arial' ,sans-serif; font-weight : 300 ; font-size : 20px ; text-rendering : optimizeLegibility; } .row { max-width : 1140px ; margin :0 auto; }
head區塊
表頭的製作 1 2 3 4 5 6 7 8 <div class="hero-text-box"> <h1>Goodbye junk food. Hello super healthy meals. </h1> <a href="#">I’m hungry</a> <a href="#">Show me more</a> </div>
利用background-image插入圖片後,往上滑會出現上方的空白處
是因為h1的margin(因設置normalize.css)
此時照片也還沒有填滿、置中
調整背景圖位置
讓h1文字置中 透過使用絕對定位,讓文字可以置中
1 2 3 4 5 6 .hero-text-box { position : absolute; width : 1140px ; top : 50% ; left :}
transform: translate(-50%,-50%);
文字放在圖片上使得看不清楚
將背景圖調成深色1 2 background :linear-gradient (0deg ,rgba (0 ,0 ,0 ,.6 ),rgba (0 ,0 ,0 ,.5 )) center center, url (./Omnifood\ Contents/hero.jpg ) no-repeat center center/cover ;
h1文字區的細節調整
調整字的顏色、大小
字母、單字之間的間距1 2 3 4 5 6 7 8 9 10 .hero-text-box h1 {margin : 0 ;color : #fff ;font-size : 240% ;font-weight : 400 ;letter-spacing : 1px ; text-transform : uppercase; word-spacing : 3px ; }
文字區下面的按鈕 html結構是使用<a>
來製作連結的點選 將型態改為inline-block
1 2 <a class ="btn btn-full" href ="#" > I’m hungry</a > <a class ="btn btn-ghost " href ="#" > Show me more</a >
希望連結與被點選的樣式都是一樣
顏色是到:UI flat color tool ; 要找尋顏色深淺 0 to 255
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .btn :link ,.btn :visited { display : inline-block; text-decoration : none; padding : 10px 15px ;border-radius : 200px ;} .btn-full :link ,.btn-full :visited { background-color : #e67e22 ; color : #fff ; } .btn-ghost :link ,.btn-ghost :visited { border : 1px solid #e67e22 ; color :#e67e22 ; }
按鈕的觸碰與點選 :active
滑鼠按下的樣式; :focus
鍵盤聚焦的樣式 ;:hover
滑鼠滑過
.btn:link,.btn:visited{}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 transition : background-color 0.5s ,border 0.5s ,color 0.5s ; } .btn :hover ,.btn :active { background-color : #cf6d17 ; } .btn-full :hover ,.btn-full :active { border : 1px solid #cf6d17 ; color : #fff ; } .btn-ghost :hover ,.btn-ghost :active { border : 1px solid #cf6d17 ; color :#fff ; }
表頭導覽列的製作 金魚都能懂的這個網頁畫面怎麼切 : 導覽列
header裡面的nav,html架構:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <nav> <div class="row"> <img src="./Omnifood Contents/logo-white.png" alt="Omnifood logo" class="logo"> <ul class="main-nav"> <li> <a href="#">Food delivery</a></li> <li><a href="#">How it works</a></li> <li><a href="#">Our cities</a></li> <li><a href="#">Sign up</a></li> </ul> </div> </nav>
logo
1 2 3 4 5 header .logo {height : 100px ;width : auto;float : left; }
nav
讓nav區靠右
為了讓四個連結區塊可以橫向排列,設定inline-box
針對字型、顏色等做調整
並於連結下方增加線的動畫效果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 .main-nav {float : right;margin-top : 55px ;} .main-nav li {display : inline-block;margin-left : 20px ;} .main-nav li a :link ,.main-nav li a :visited {text-decoration : none;font-weight : 400 ;font-size : 90% ; color : #fff ;text-transform : uppercase;position : relative;padding-bottom : 5px ;} .main-nav a ::after { content : '' ; width : 100% ; position : absolute; border : solid .5px rgba (230 , 126 , 34 ,.6 ); left : 0 ; bottom :0 ; margin-top : 5px ; transform : scale (0 ); transition : 0.5s ; } .main-nav li :hover a ::after ,.main-nav li :active a ::after {transform : scale (1 );}
特色區塊
—
用html符號 –> —
更多…HTML Entity List
features這部分,使用section標籤來包覆,而其中的不同區塊則使用.row
來包覆內容(並用來固定寬度)
這裏的html運用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 27 <section class ="section-features" > <div class ="row" > <h2 > Get food fast — not fast food</h2 > <p class ="long-copy" > Hello, we’re Omnifood, your new premium food delivery service. We know you’re always busy. we promise!</p > </div > <div class ="row" > <div class ="col span-1-of-4" > <h3 > Up to 365 days/year</h3 > <p > Never cook again! We really mean that. Our subscript </p > </div > <div class ="col span-1-of-4" > <h3 > Ready in 20 minutes</h3 > <p > You're only twenty minutes away from your delicious ant chefs in each town to ensure that you're 100% happy. </p > </div > <div class ="col span-1-of-4" > <h3 > 100% organic</h3 > <p > All our vegetables are fresh, organic and local. Animals are raised without added hormones or antibiotbetter!</p > </div > <div class ="col span-1-of-4" > <h3 > Order anything</h3 > <p > We don't limit your creativity, which means you cacious meals. It's up to you!</p > </div > </div > </section >
icon 使用ionicon:ionicon
1 <script src="https://unpkg.com/ionicons@5.2.3/dist/ionicons.js" ></script>`
1 2 3 4 5 6 7 8 .section-features .icon-big {display : block; font-size : 350% ; color : #e67e22 ; margin-bottom : 10px ; font-weight : 100 ; }
h2的文字與p 1 2 3 4 5 6 7 8 9 .section-features .long-copy {width : 70% ;margin-left : 15% ;line-height : 145% ; }
欄位col的處理(class=”items”) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .section-features h3 { font-weight : 300 ; font-size : 110% ; text-transform : uppercase; margin-bottom : 15px ; } .section-features .items { padding :1% ; } .section-features .items p { line-height : 145% ; font-size :90% ; }
食物照片區
這裏的內容不適用.row
來包覆,因為我們希望它的寬度可以站滿橫向的視窗
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 <section class ="section-maels" > <ul class ="meals-showcase" > <li > <figure > <img src ="./Omnifood Contents/1.jpg" alt ="Korean bibimbap with egg and vegetables" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/2.jpg" alt ="Simple italian pizza with cherry tomatoes" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/3.jpg" alt ="Chicken breast steak with vegetables" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/4.jpg" alt ="Autumn pumpkin soup" > </figure > </li > </ul > <ul class ="meals-showcase" > <li > <figure > <img src ="./Omnifood Contents/5.jpg" alt ="Paleo beef steak with vegetables" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/6.jpg" alt ="Healthy baguette with egg and vegetables" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/7.jpg" alt ="Burger with cheddar and bacon" > </figure > </li > <li > <figure > <img src ="./Omnifood Contents/8.jpg" alt ="Granola with cherries and strawberries" > </figure > </li > </ul > </section >
設定此區塊滿版,並讓他們設定為區塊
讓li,每個設定寬度為25%(4個共100%),並利用float使他們比鄰排列
1 2 3 4 5 6 7 8 9 10 .meals-showcase { list-style : none; display : block; width : 100% ; } .meals-showcase li { float : left; width : 25% ; }
1 2 3 4 5 6 7 8 9 .meals-showcase figure { width : 100% ; } .meals-showcase figure img { width : 100% ; }
去除上圖的空隙vertical-align: middle;
1 2 3 4 5 .meals-showcase figure img { width : 100% ; vertical-align : middle;}
加入文字區在圖片上方 製作圖片被摸到,有圖片縮放的動畫
1 2 3 4 5 6 7 8 9 10 .meals-showcase figure img { width : 100% ; vertical-align : middle; transform : scale (1.15 );transition : transform .5s ;} .meals-showcase figure :hover img { transform : scale (1 ); }
讓圖片有黑色透明效果
在圖片本身img設定透明度,在figure放圖標籤裡設定背景為黑色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 .meals-showcase figure { width : 100% ; overflow : hidden; background-color :#000 ; } .meals-showcase figure img { width : 100% ; vertical-align : middle; transform : scale (1.15 );transition : transform .5s ,opicity .5s ;opacity : 0.7 ;} .meals-showcase figure :hover img { transform : scale (1 ); opacity : 1 ; }
訂餐方法介紹 的介面
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 <section class ="meal-steps" > <div class ="row" > <h2 > How it works - Simple as 1, 2, 3</h2 > </div > <div class ="row" > <div class ="col span-2-of-4" > <img src ="./Omnifood Contents/app-iPhone.png" alt ="Omnifood-app" class ="app-screen" > </div > <div class ="col span-2-of-4" > <div class ="work-step" > <div > 1</div > <p > Choose the subscription plan that best fits your needs and sign up today.</p > </div > <div class ="work-step" > <div > 2</div > <p > Order your delicious meal using our mobile app or website. Or you can even call us!</p > </div > <div class ="work-step" > <div > 3</div > <p > Enjoy your meal after less than 20 minutes. See you the next time!</p > </div > <a href ="#" > <img src ="./Omnifood Contents/download-app.svg" alt ="apple store button" > </a > <a href ="#" > <img src ="./Omnifood Contents/download-app-android.png" alt ="play store button" > </a > </div > </div > </section >
:first-child
圖片靠右:text-align: right;
右欄文字區 在數字部分:要讓他與文字區能夠排列,使用inline-block,float 數字的外圈:參考以下css
1 2 3 4 5 6 7 8 9 10 11 12 .work-step { display : inline-block; margin-bottom : 50px ; } .work-step div { float : left; color :#e67e22 ; border : 2px solid #e67e22 ; border-radius : 50% ; }
讓圓形變圓,增加寬高 1 2 3 4 5 6 .work-step div {height : 55px ; width : 55px ; text-align : center; padding : 5px ; font-size : 150% ;}
按鈕的處理
1 2 3 4 5 .btn-app img { height : 50px ; width : auto; margin-right : 10px ; }
地點資訊
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 <section class ="section-cities" > <div class ="row" > <h2 > We're currently in these cities</h2 > </div > <div class ="row" > <div class ="col span-1-of-4 items" > <img src ="./Omnifood Contents/lisbon-3.jpg" alt ="" > <h3 > Lisbon</h3 > <div class ="city-features" > <ion-icon name ="person" class ="person" > </ion-icon > 1600+ happy eaters </div > <div class ="city-features" > <ion-icon name ="star" class ="star" > </ion-icon > 60+ top chefs </div > <div class ="city-features" > <ion-icon name ="logo-twitter" class ="logo-twitter" > </ion-icon > @omnifood_lx </div > </div > <div class ="col span-1-of-4 items" > <img src ="./Omnifood Contents/san-francisco.jpg" alt ="" > <h3 > San Francisco</h3 > <div class ="city-features" > <ion-icon name ="person" class ="person" > </ion-icon > 3700+ happy eaters </div > <div class ="city-features" > <ion-icon name ="star" class ="star" > </ion-icon > 160+ top chefs </div > <div class ="city-features" > <ion-icon name ="logo-twitter" class ="logo-twitter" > </ion-icon > @omnifood_sf </div > </div > <div class ="col span-1-of-4 items" > <img src ="./Omnifood Contents/berlin.jpg" alt ="" > <h3 > Berlin</h3 > <div class ="city-features" > <ion-icon name ="person" class ="person" > </ion-icon > 2300+ happy eaters </div > <div class ="city-features" > <ion-icon name ="star" class ="star" > </ion-icon > 110+ top chefs </div > <div class ="city-features" > <ion-icon name ="logo-twitter" class ="logo-twitter" > </ion-icon > @omnifood_berlin </div > </div > <div class ="col span-1-of-4 items" > <img src ="./Omnifood Contents/london.jpg" alt ="" > <h3 > London</h3 > <div class ="city-features" > <ion-icon name ="person" class ="person" > </ion-icon > 1200+ happy eaters </div > <div class ="city-features" > <ion-icon name ="star" class ="star" > </ion-icon > 50+ top chefs </div > <div class ="city-features" > <ion-icon name ="logo-twitter" class ="logo-twitter" > </ion-icon > @omnifood_london </div > </div > </section >
1 2 3 4 5 .section-cities img { width : 100% ; vertical-align : middle; margin-bottom : 15px ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 .section-cities .icon-small { color : #e67e22 ; display : inline-block; text-align : center; font-size : 120% ; margin-right : 10px ; line-height : 120% ; vertical-align : middle; margin-top : -5px ; }
顧客回饋區
區分為三個區塊,一列三欄的方式劃分
用<blockquote>
來包顧客的回饋文字
並加入顧客的頭像以及姓名
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 <section class ="section-testimonials" > <div class ="row" > <h2 > Our customers can't live without us</h2 > </div > <div class ="row" > <div class ="col span-1-of-3" > <blockquote > Omnifood is just awesome! I just launched a startup which leaves me with no time for cooking, so Omnifood is a life-saver. Now that I got used to it, I couldn't live without my daily meals! <cite > <img src ="./Omnifood Contents/customer-1.jpg" alt ="" > Alberto Duncan</cite > </blockquote > </div > <div class ="col span-1-of-3" > <blockquote > Inexpensive, healthy and great-tasting meals, delivered right to my home. We have lots of food delivery here in Lisbon, but no one comes even close to Omifood. Me and my family are so in love! <cite > <img src ="./Omnifood Contents/customer-2.jpg" alt ="" > Joana Silva</cite > </blockquote > </div > <div class ="col span-1-of-3" > <blockquote > I was looking for a quick and easy food delivery service in San Franciso. I tried a lot of them and ended up with Omnifood. Best food delivery service in the Bay Area. Keep up the great work! <cite > <img src ="./Omnifood Contents/customer-3.jpg" alt ="" > Milton Chapman</cite > </blockquote > </div > </div > </section >
1 2 3 4 5 .section-testimonials { background :linear-gradient (0deg ,rgba (0 ,0 ,0 ,.7 ),rgba (0 ,0 ,0 ,.7 )) center center, url (./Omnifood\ Contents/back-customers.jpg )no-repeat center center/cover ; color : #fff ; background-attachment : fixed; }
在.section-testimonials img 增加vertical-align: middle;
增加上面逗點符號 符號表
1 2 3 4 5 6 7 8 9 10 11 .section-testimonials blockquote :before { content :"\201C" ; font-size :500% ; display : block; position : absolute;top : -5px ;left : -5px ;} }
訂購方案介紹區
span標籤的應用
當全部設定寬度100%,會出現問題
頁尾表單的建構
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 <footer > <div class ="row" > <div class ="col span-1-of-2" > <ul class ="footer-nav" > <li > <a href ="#" > About us</a > </li > <li > <a href ="#" > Blog</a > </li > <li > <a href ="#" > Press</a > </li > <li > <a href ="#" > Android App</a > </li > </ul > </div > <div class ="col span-1-of-2 " > <ul class ="socilmedia-link" > <li > <a href ="#" > <ion-icon name ="logo-facebook" class ="logo-facebook" > </ion-icon > </a > </li > <li > <a href ="#" > <ion-icon name ="logo-twitter" class ="logo-twitte" > </ion-icon > </a > </li > <li > <a href ="#" > <ion-icon name ="logo-google" class ="logo-google" > </ion-icon > </a > </li > <li > <a href ="#" > <ion-icon name ="logo-instagram" class ="logo-instagram" > </ion-icon > </a > </li > </ul > </div > <div class ="row" > <p > copyright © 2020 by Omnifood. All right reserved. </p > </div > </div > </footer >
使用float來使物件放置左右側
footer-nav li使用inline-block
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 footer { background-color : #333 ; padding : 50px ; font-size : 80% ; } footer .footer-nav { list-style : none; float : left; } .socilmedia-link { list-style : none; float : right; } .footer-nav li ,.socilmedia-link li { display : inline-block; margin-right : 20px ; }
連結顏色調整 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 .footer-nav li :last-child ,.socilmedia-link li :last-child { margin-right : 0px ; } .footer-nav li a :link ,.footer-nav li a :visited , .socilmedia-link li a :link ,.socilmedia-link li a :visited { text-decoration : none; border : none; color : #888 ; transition : color .3s ; } .footer-nav li a :hover ,.footer-nav li a :active { color : #ddd ; } .socilmedia-link li a :link ,.socilmedia-link li a :visited { font-size : 160% ; }
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 p { color :#888 ; text-align : center; margin-top : 20px ; } .logo-instagram ,.logo-google ,.logo-twitte ,.logo-facebook {transition : color .3s ;} .logo-instagram :hover { color : #517fa4 ; } .logo-google :hover { color : #dd4b39 ; } .logo-twitte :hover { color : #00aced ; } .logo-facebook :hover { color : #3b5998 ; }
補充 background
與background-imge
之差別1 2 3 4 5 6 7 8 9 10 background属性是整體設置的,background image是background的属性之一,background的屬性包括 background-color background-image background-repeat background-attachment background-position, 你看不到圖片是因为設置錯,不能加no-repeat屬性,應改為: background-image:url("some.jpg"); background-repeat:no-repeat;分開寫 [background和background-image什么区别](https://bbs.csdn.net/topics/310167508)
1 2 3 4 5 6 7 8 9 10 .header {background-image :url (./Omnifood\ Contents/hero.jpg ) ;background-size : cover;background-position : center;} .header {background : url (./Omnifood\ Contents/hero.jpg ) no-repeat center center/cover;}
文字框置中(區塊(div)的垂直置中)
pjchender
Position + Transform(常用):先利用 position: absolute 把 top: 50% 設在 50%;接著再透過 transform: translateY(-50%) 把超過的部分修正回來,達到垂直置中。
1 2 3 4 5 6 7 8 9 .hero-text-box { display : flex; width : 1140px ; height : 100% ; flex-direction : column; align-items : center; justify-content : center; }
參考:pjchender
Button versus Link
1 2 3 4 From a semantics and accessibility viewpoint: Links ``(<a>) ``are for "going someplace" such as "jumping to a different section of a page, going to another URL, etc. Whereas Buttons ``<button> ``are for "doing something" such as a function on the page to expand/collapse a menu, submit a form or etc.
grid
參考資料Spectacularly Easy Responsive Design 關於 Grid Layout 的使用姿勢 六角學院 - Bootstrap Grid System 原理介紹
margin
與 paggimg
製作steps區塊時,因設定section的margin距離 使得想在此區塊多加上背景色彩,有了中間的空白處
1 2 3 .meal-steps { background : #f4f4f4 ; }
這裏應該改為padding1 2 3 4 section { padding : 80px 0 ; }
練習後的小心得: 1.在html建構會使用.row
2.應用grid,css 3.內部,字的大小用百分比 4.有一些可以共用的區塊,可以放在reuse區塊,並設一樣的class名稱,在建構時,可以更快速