移動Web開發-WebApp(flex佈局+移動端導航案例)

来源:https://www.cnblogs.com/chenyingying0/archive/2020/01/07/12160435.html
-Advertisement-
Play Games

實際開發中的像素:css像素設備像素比dpr=設備像素/css像素標清屏dpr=1 高清屏dpr=2縮放改變的是css像素大小PPI(每英寸的物理像素點)=根號(屏幕橫向解析度²+屏幕縱向解析度²)/屏幕對角線長度(單位英寸) 視口viewport <meta name="viewport" con ...


實際開發中的像素:css像素
設備像素比dpr=設備像素/css像素
標清屏dpr=1 高清屏dpr=2
縮放改變的是css像素大小
PPI(每英寸的物理像素點)=根號(屏幕橫向解析度²+屏幕縱向解析度²)/屏幕對角線長度(單位英寸)


 

視口viewport

   <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1, minimum-scale=1">
    
    <script>
        console.log(window.innerWidth);//視窗文檔顯示區寬度
        console.log(document.documentElement.clientWidth);//瀏覽器視窗文檔顯示區域的寬度,不包括滾動條
        console.log(document.documentElement.getBoundingClientRect().width);//這個方法返回一個矩形對象,包含四個屬性:left、top、right和bottom。分別表示元素各邊與頁面上邊和左邊的距離
        // getBoundingClientRect().top
        // getBoundingClientRect().right
        // getBoundingClientRect().bottom
        // getBoundingClientRect().left

        var viewWidth = document.documentElement.clientWidth || window.innerWidth;

        // 相容性問題,不要用
        // console.log(screen.width);

        // dpr
        console.log(window.devicePixelRatio);
    </script>

box-sizing: content-box;
width/height代表內容的寬高
box-sizing: border-box;
width/height代表整個盒子的寬高
content-box
盒模型實際寬/高 = width/height + padding + border
border-box
盒模型實際寬/高 = width/height


 

圖標字體
阿裡巴巴矢量圖標庫 https://www.iconfont.cn/

    <style>
        .iconfont {
            font-size: 100px;
            color: red;
        }
        .icon-personal {
            color: green;
            font-size: 50px;
        }
    </style>
    -----------------------
    <body>
        <i class="iconfont icon-scan"></i>
        <i class="iconfont icon-backtop"></i>
        <i class="iconfont icon-personal"></i>
    </body>

flex佈局(容器屬性)

1、display 屬性
display: flex; //將對象作為彈性伸縮盒顯示
display: inline-flex; //將對象作為內聯彈性伸縮盒顯示

2、flex-direction 屬性
flex-direction: row; //預設主軸為水平方向,起點在左端


flex-direction: row-reverse; //預設主軸為水平方向,起點在右端


flex-direction: column; //主軸為垂直方向,起點在上端


flex-direction: column-reverse; //主軸為垂直方向,起點在下端

3、flex-wrap 屬性
  flex-wrap: nowrap; //預設不換行


  flex-wrap: wrap; //換行,從上到下


  flex-wrap: wrap-reverse; //換行,從下到上

4、flex-flow 屬性:flex-direction和flex-wrap的簡寫
flex-flow: row nowrap;
flex-flow: row wrap;

5、justify-content 屬性
justify-content: flex-start; //左對齊


justify-content: flex-end; //右對齊


justify-content: center; //居中


justify-content: space-between; //兩端對齊,項目之間間隔相等


justify-content: space-around; //每個項目兩側間隔相等,項目之間的間隔比項目與邊框的間距大一倍

6、align-items 屬性(適用於高度不同的元素同一行排列時)
align-items: flex-start; //起點對齊(頂部對齊)


align-items: flex-end; //終點對齊(底部對齊)


align-items: center; //中點對齊


align-items: baseline; //項目的第一行文字基線對齊


align-items: stretch; //如果項目未設置高度或者是auto,則占滿整個容器的高度

7、align-content 屬性(單行無效,適用於多行的情況,在整個外容器中垂直方向如何對齊)
align-content: flex-start; //起點對齊(在容器的垂直方向的頂部)


align-content: flex-end; //終點對齊(在容器的垂直方向的底部)


align-content: center; //中點對齊(在容器的垂直居中位置)


align-content: space-between; //與交叉軸兩端對齊,軸線之間的間隔平均分佈


align-content: space-around; //每根軸線兩側的間隔都相等,軸線之間的間隔比軸線與邊框的間隔大一倍


align-content: stretch; //(預設值):軸線占滿整個交叉軸


flex佈局(項目屬性)

1、order屬性
order: -1; //項目排列順序,越小越靠前,預設是0

2、flex-grow 屬性:定義項目的放大比例
flex-grow: 1; //如果所有都是1,將平分空間
flex-grow: 2; //如果有一項為2,會按比例多占空間


flex-grow: 0; //預設是0,即存在剩餘空間也不放大
width:200px; //沒有flex-grow屬性,只有固定寬度的元素空間固定,其餘元素平分剩餘可用空間

3、flex-shrink 屬性:定義項目的縮小比例
flex-shrink: 1; //所有元素都是1,則空間不足時統一縮小
flex-shrink: 0; //為0的元素不會縮小


flex-shrink: -1; //負值無效

4、flex-basis 屬性:在分配多餘空間之前,項目占據的主軸空間
flex-basis: auto; //預設為原本空間


flex-basis: 400px;

5、flex 屬性:flex-grow/ flex-shrink/ flex-basis的縮寫

6、align-self 屬性:給單個項目設置不同的對齊方式,預設是auto
align-items: center;
align-self: flex-start;
align-self: flex-end;

媒體查詢

媒體類型
all(default)
screen / print / speech

        @media (min-width: 900px) {
            body {
                background-color: red;
            }
        }
        @media screen and (min-width: 900px) {
            body {
                background-color: red;
            }
        }

媒體查詢中的邏輯:與( and ) / 或( , ) / 非( not )

        @media screen and (min-width: 900px) and (max-width: 1024px) {
            body {
                background-color: red;
            }
        }

媒體特征表達式
width/max-width/min-width
-webkit-device-pixel-ratio/-webkit-max-device-pixel-ratio/-webkit-min-pixel-ratio
orientation
landscape/portrait

height
device-width/device-height
screen.width/screen.height
aspect-ratio 視口的寬高比

        @media (-webkit-max-device-pixel-ratio: 2) and (orientation: landscape) {
            body {
                background-color: red;
            }
        }

媒體查詢策略:移動端優先

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>3.8 媒體查詢--策略</title>
    <style>
        /*css reset*/
        * {
            box-sizing: border-box;
            padding: 0;
            margin: 0;
        }
        body {
            padding-top: 200px;
        }
        img {
            width: 100%;
            height: 100%;
        }
        .row {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
        }
        .col {
            padding-top: 10px;
            padding-bottom: 10px;
            background-color: rgba(86, 61, 124, 0.15);
            border: 1px solid rgba(86, 61, 124, 0.2);
        }

        /*
            斷點
                xs: < 576px
                sm: 576px ~ 768px
                md: 768px ~ 992px
                lg: 992px ~ 1200px
                xl: > 1200px
        */
        /*mobile first*/
        .col {
            width: 100%;
        }
        @media (min-width: 576px) {
            .col {
                width: 50%;
            }
        }
        @media (min-width: 768px) {
            .col {
                width: 25%;
            }
        }
        @media (min-width: 992px) {
            .col {
                width: 16.6666666667%;
            }
        }
        @media (min-width: 1200px) {
            .col {
                width: 8.33333333%;
            }
        }
    </style>
</head>
<body>
    <div class="row">
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
        <div class="col">
            <img src="img/3.8-1.png" alt="">
        </div>
    </div>
</body>
</html>

移動端常用單位
px % em rem vw/vh
寬度使用%,高度或者字體大小使用rem


 

移動端底部導航案例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>移動端底部導航</title>
    <link rel="stylesheet" href="css/iconfont.css">
    <style>
        /*css reset*/
            * {
                box-sizing: border-box;
                padding: 0;
                margin: 0;
            }
            body {
                background-color: #e2e2e2;
                color: #595B66;
            }
            a {
                font-size: 12px;
                color: #686868;
                text-decoration: none;
            }
            li {
                list-style: none;
            }
        /*base css*/
        html {
            font-size: 12px;
        }
        .tabbar-container {
            position: fixed;
            left: 0;
            bottom: 0;
            z-index: 1000;
            width: 100%;
            background-color: #fff;
            box-shadow: 0 0 10px 0 rgba(154, 141 ,141, 0.6);
            height: 2.5rem;
        }
        .tabbar-link .iconfont {
            font-size: 1.2rem;
        }
        .tabbar,
        .tabbar-item,
        .tabbar-link {
            height: 100%;
        }
        .tabbar {
            display: flex;
        }
        .tabbar-item {
            flex: 1;
        }
        .tabbar-link {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;

            font-size: 0.6rem;
        }
        .tabbar-item-active .tabbar-link {
            color: #de181b;
        }
    </style>
</head>
<body>
    <div class="tabbar-container">
        <ul class="tabbar">
            <li class="tabbar-item tabbar-item-active">
                <a href="###" class="tabbar-link">
                    <i class="iconfont icon-home"></i>
                    <span>首頁</span>
                </a>
            </li>
            <li class="tabbar-item">
                <a href="###" class="tabbar-link">
                    <i class="iconfont icon-category"></i>
                    <span>分類頁</span>
                </a>
            </li>
            <li class="tabbar-item">
                <a href="###" class="tabbar-link">
                    <i class="iconfont icon-cart"></i>
                    <span>購物車</span>
                </a>
            </li>
            <li class="tabbar-item">
                <a href="###" class="tabbar-link">
                    <i class="iconfont icon-personal"></i>
                    <span>個人中心</span>
                </a>
            </li>
        </ul>
    </div>

    <script>
        setRemUnit();

        window.onresize = setRemUnit;

        function setRemUnit() {
            var docEl = document.documentElement;
            var viewWidth = docEl.clientWidth;

            docEl.style.fontSize = viewWidth / 375 * 20 + 'px';
        }
    </script>
</body>
</html>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 比較推薦的學習過程應該是以興趣為驅動的,用搜索做輔助: 1. 我想做一個個人網站,或者給我們團隊或者小組做一些介紹頁面。怎麼做?搜索發現要學習:HTML、CSS。 2. 發現一個網站設計的好漂亮,交互真贊,動畫效果真好。我想在我自己網站上也放上,可是我看不懂它的代碼?搜索發現要學習:交互視覺、CSS ...
  • 用產品的屬性數據說明 頁面里顯示效果為:要把產品的屬性顯示到頁面上,產品屬性為後臺自主上傳產品的屬性,產品的屬性不同,所以需要把屬性和屬性值顯示到頁面上 產品屬性數據為: properties: "[ {"錶面處理":["發黑","發白"]}, {"顏色":["紅色","黃色"]}, {"大小":[ ...
  • 4)Function用法例 3.4.1<head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/></head><script> /*When the Global object is created, it ...
  • 定義和用法 try/catch/finally 語句用於處理代碼中可能出現的錯誤信息。 錯誤可能是語法錯誤,通常是程式員造成的編碼錯誤或錯別字。也 可能是拼寫錯誤或語言中缺少的功能(可能由於瀏覽器差異)。 try語句允許我們定義在執行時進行錯誤測試的代碼塊。 catch 語句允許我們定義當 try  ...
  • CSRF繞過後端Referer校驗分正常情況和不正常的情況,我們這裡主要討論開發在寫校驗referer程式時,不正常的情況下怎麼進行繞過。 正常情況 正常的情況指伺服器端校驗Referer的代碼沒毛病,那麼意味著前端是無法繞過的。 我之前考慮過的方案: JS修改Referer,失敗; 請求惡意網頁後 ...
  • 算數運算符算術運算符描敘運算符實例加+10 + 20 = 30減-10 – 20 = -10乘*10 * 20 = 600除/10 / 20 = 0.5取餘數%返回除法的餘數9%2=1浮點數精確度浮點數值的最高精度是 17 位小數console.log(0.07 * 100); // 7.00000... ...
  • 移動端屏幕適配 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> 移動端屏幕適配與響應式的區別移動端屏幕適配 ...
  • 響應式佈局的原理xsmall <576pxsmall >=576pxmedium >=768pxlarge >=992pxxlarge >=1200px 接下來是效果圖 中屏及以上效果 移動端效果 方案一:使用柵格系統開發響應式頁面 index.html <!DOCTYPE html> <html ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...