1. 程式人生 > 實用技巧 >萬門教育-WEB全棧工程師零基礎特訓班-第二講-課堂筆記

萬門教育-WEB全棧工程師零基礎特訓班-第二講-課堂筆記

一、Flex佈局要領

Flexible Layout:彈性佈局

Bootstrap:柵格佈局

產品是做業務的,產品是為業務服務的。框架能滿足百分之九十幾的需求。

CSS1:display:block;

CSS2:display:table;

CSS3:display:flex; display:box; display:grid;

實踐案例,設計如下圖的頁面:

分析頁面

整體是三行,header佔整體頁面20%,main佔60%,footer佔20%。

響應式佈局,可隨著頁面大小自動放大、縮小調整。

容器:flex container

頁面佈局 —— 容器 ,容器中還可以放小容器。

區域性:flex-direction:column

區域性有橫向。

整體:flex-direction:row

整體是橫向佈局。

整體頁面可以做到橫縱相交。

動手實驗 —— Flex box layout

窄屏模式:Mobile First

手機優先,因為現在移動網際網路時代,使用手機看頁面的比例已經超過PC,所以做頁面的時候先考慮Mobile Fierst。

手機和PC顯示最大的區別不是解析度,而是顯示比例的區別。手機是窄屏模式、PC是寬屏模式。

頁面不需要做兩套,而是基於media query(媒介查詢),自動偵測是窄屏模式還是寬屏模式。

窄屏模式下main區域是橫向排列,寬屏模式下main區域內容是縱向排列。

寬屏模式

  1. 動手實驗

    • 編寫網頁使用程式設計工具Visual Studio Code,國外軟體推薦使用必應搜尋(英文版)。

    vscode裡新建檔案,副檔名是html。

    程式碼編輯區輸入html選擇html5,此時vscode會自動填寫html5的固定內容:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    
    • 給vscode安裝外掛Live Server,裝好以後在html檔案編輯區滑鼠右鍵調出選單選擇“open with live server”即可迅速看到頁面顯示效果。

    • 先做佈局,再寫樣式。

      <div class = "container">
          <div class = "header"> header</div>
          <div class = "main">
              <div class = "nav"> nav </div>
              <div class = "article"> article </div>
              <div class = "aside"> aside </div>
          </div>
          <divv class = "footer" > footer </div>
          
          </div>
      
      
      </body>
      </html>
          
      

      做完的樣式如下:

  • 接下來加樣式:<style>標籤與</style>標籤之間加樣式。

        <style>
            .container {
                display: flex;
                height: 100vh;
                flex-direction: column;
            }
    
            .main {
                display: flex;
                flex: 1;
                flex-direction: column;
            }
    
            .main .article {
                flex: 1;
                background-color: yellowgreen;
            }
    
            .main .nav,
            .main .aside {
                background-color: bisque;
            }
    
            .header,
            .footer {
                background-color: green;
                height: 20vh;
            }
        </style>
    

    加了style後的效果

  • 注意.container裡面的描述height: 100vh; (高度百分百)、.header和.footer 裡面的描述height:20vh;(高度20%)。寫網頁最好寫成百分比,不要寫成絕對值。寫絕對值無法縮放,寫成百分比時放大縮小頁面會自動縮放調整。

  • 媒體查詢,即判斷顯示裝置,目前窄屏優先(適配手機)已完成,然後編寫程式碼判斷是否寬屏,編寫寬屏優先(適配PC)的程式碼。

            @media screen and (min-width:400px) {
    
                .main {
                    flex-direction: row;
                }
    
                .main .nav,
                .main .aside {
                    flex: 0 0 20vw;
                }
    
            }
    

    min-width:400px 表示當螢幕寬度比大於等於400px時,切換佈局方式。(老師開始設576,此時經常不會切換到寬屏模式,觸發條件數字偏大)

以上是flex box佈局模式。

二、Bootstrap柵格佈局

推特出品的前端模板,老師推薦用bing國際版查官網https://getbootstrap.com/,在官網查資料。

(視訊資料顯示官網bootstrap版本是4.1.3,推斷該視訊是2年前出的)

  • 實踐案例:

  • 從bootstrap找到card模板:

        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src=".../100px180/" alt="card-img-cap">
            <div class="card-body">
                <h5 class="card-title">Card title</h5>
                <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's
                    content.</p>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    
  • 在head中匯入bootstrap的連結

        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
            integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
    
  • card複製2份,最終完整程式碼

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
            integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
    </head>
    
    <body>
    
        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src=".../100px180/" alt="card-img-cap">
            <div class="card-body">
                <h5 class="card-title">Card title</h5>
                <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's
                    content.</p>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    
        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src=".../100px180/" alt="card-img-cap">
            <div class="card-body">
                <h5 class="card-title">Card title</h5>
                <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's
                    content.</p>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    
        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src=".../100px180/" alt="card-img-cap">
            <div class="card-body">
                <h5 class="card-title">Card title</h5>
                <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's
                    content.</p>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    
    </body>
    
    </html>
    
  • card效果1,直接複製後card是縱向排列成3個。

  • 加了container會有留白和間距。(網頁設計一大重要技巧是合適的留白,整齊的留白和間距。)

        <div class="container">
            <div class="row">
    

    container下面一行寫明佈局是"row",現在卡片是橫向排列了。注意:bootstrap佈局優先考慮的是手機優先。

  • 再調整style

        <style>
            body {
                margin-top: 1em;
                margin-left: 1em;
            }
    
            .mycard {
                margin-right: 1em;
                margin-bottom: 1em;
            }
        </style>
    

    marin-top指的是上邊距,marin-left指的是左邊距,marin-right指的是右邊距,marin-bottom指的是下邊距。

    1em指的是當前字型大小的一個字元高或寬。15px是指15個畫素。

    自定義了.mycard,指定右邊和下邊空一個字元間距。

  • 給下方的3個card 新增 mycard約束。

  • 注意畫面的層次感,背景不要用全白,例如京東很多頁面背景是灰色。

    在body中新增background-color:#f4f4f4,不要使用gray,使用gray顏色太暗,#f4f4f4白中帶灰做背景恰好。

  • 然後修改card頭部顯示的圖片,從必應上搜索免費圖片,將其連線加入src=""的雙引號中間。

  • 調整整體邊距、卡片邊距、card寬度為14rem。

    最終程式碼:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
            integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
        <style>
            body {
                margin-top: 0.5em;
                margin-left: 1.5em;
                background-color: #f4f4f4;
            }
    
            .mycard {
                margin-right: 1em;
                margin-bottom: 0.5em;
            }
        </style>
    </head>
    
    <body>
        <div class="container">
            <div class="row">
                <div class="card mycard" style="width: 14rem;">
                    <img class="card-img-top"
                        src="https://tse2-mm.cn.bing.net/th/id/OIP.nSluwXTBNhttcpYpVoqXkAHaEK?pid=Api&w=1920&h=1080&rs=1"
                        alt="card-img-cap">
                    <div class="card-body">
                        <h5 class="card-title">Card title</h5>
                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the
                            card's
                            content.</p>
                        <a href="#" class="btn btn-primary">Go somewhere</a>
                    </div>
                </div>
    
                <div class="card mycard" style="width: 14rem;">
                    <img class="card-img-top"
                        src="https://tse3-mm.cn.bing.net/th/id/OIP.tEr4hG4YKm0D3aPmgjnMxwHaEK?pid=Api&w=640&h=360&rs=1"
                        alt="card-img-cap">
                    <div class="card-body">
                        <h5 class="card-title">Card title</h5>
                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the
                            card's
                            content.</p>
                        <a href="#" class="btn btn-primary">Go somewhere</a>
                    </div>
                </div>
    
                <div class="card mycard" style="width: 14rem;">
                    <img class="card-img-top"
                        src="https://tse3-mm.cn.bing.net/th/id/OIP.krKN7PZBjYCZZOfYviIEGQHaEK?pid=Api&w=900&h=506&rs=1"
                        alt="card-img-cap">
                    <div class="card-body">
                        <h5 class="card-title">Card title</h5>
                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the
                            card's
                            content.</p>
                        <a href="#" class="btn btn-primary">Go somewhere</a>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

    最終效果:

使用模板的優點是自動適應不同裝置不同解析度,當螢幕寬度大時可以一行顯示3個card,螢幕小一些一行自動調整為顯示2個card,螢幕再變窄時會自動調整為一行顯示1個card。

三、對比總結:

使用框架比使用CSS手動佈局工作量大大減輕,但CSS手動佈局靈活度更高。合理應用恰當的框架可以大大提高工作效率,框架可以滿足百分之九十幾的需求,只有極少數需求需要手動CSS調整。

四、第一、二講回顧

web應用涉及管理端、商戶端、使用者端、資料庫、服務端應用。

以互動為主的應用,這與網站差距非常大,網站互動內容少,web應用互動內容多。

為什麼選用M-E-A-N技術棧?

一種語言開發前端、後端,typescript作為前端,JavaScript作為後端服務。

面向物件程式設計可維護性和效率更高一些。

常用的響應式佈局模式:

Flexbox:Flexible Layout彈性佈局

Bootstrap:Bootstrap 4.x柵格佈局

Flex佈局要領:

flex container :容器內可以巢狀容器

flex-direction:column 豎向佈局

flex-direction:row 橫向佈局(預設)

彈性盒子佈局flex box layout

窄屏模式優先(手機模式)mobile first

基於media query自動調整佈局

bootsrap柵格佈局

要去官方網站學習和檢視,學習最新、最標準的內容和案例。