移動端佈局的心得

来源:https://www.cnblogs.com/seanlxj/archive/2018/02/26/8474238.html
-Advertisement-
Play Games

1.字體大小 font-sizepx/em/rem px像素 em:根據父級的字體大小有關,1em表示是父級字體大小一致 rem:根據html標簽的字體大小有關,1rem表示和html標簽字體大小一致,預設16px, rem:設置 nrem.表示把字體大小設置成和html標簽的字體大小n陪,如果ht ...


1.字體大小 font-sizepx/em/rem

  • px像素
  • em:根據父級的字體大小有關,1em表示是父級字體大小一致
  • rem:根據html標簽的字體大小有關,1rem表示和html標簽字體大小一致,預設16px,
  • rem:設置 nrem.表示把字體大小設置成和html標簽的字體大小n陪,如果html沒有設置則預設font-size:16px;

2.自定義字體:字體名字2字體src:url+format

<style>
     @font-face{
font-family:"demo字體";
src:url("路徑地址") fromat("truetype"');
       }
     .customFont{
       font-family:"demo字體";
     }

</style>
<p>one</p>
<p class='customFont'>two</p>

3.  居中適配的問題


//第一種方法
.box{

//先寫舊版flex,在適配新版

  display: -webkit-box;

//設置水平居中

  -webkit-box-pack: center;

//設置垂直居中

  -webkit-box-align: center;

  //適配新版flex

  display: -webkit-flex;;

  display: flex

//設置水平居中

  -webkit-justify-content: center;

  justify-content: center;

//設置垂直居中

  -webkit-align-items: center;

  align-items: center;


/* 在移動web中,使用flex佈局的時候,為了讓渲染效果更好,先寫舊版flex,再適配新版 */

  }
 
第二種:calc是css3的屬性,但是在安卓UC瀏覽器中相容不好,一般不再移動web中使用
 父級設置relative
.son{
  position: absolute;
  left: -webkit-calc(50% - 50px);
  left: -moz-calc(50% - 50px)
  left: calc(50% - 50px)
  top: -webkit-calc(50% - 50px);//需要註意的是,運算符前後都需要保留一個空格;
  top: -moz-calc(50% - 50px)
  top: calc(50% - 50px)
}
 
第三種:父級設置relative

box{
  position: absolute;
  width: 100px;
  height: 100px;
  left:50%;
  top:50%;
-webkit-transform: translate(-50% -50%);
-moz-transform: translate(-50% -50%);
-ms-transform: translate(-50% -50%);
-o-transform: translate(-50% -50%);
transform: translate(-50% -50%);
}
  第四種: box{   position: absolute;   width: 100px;   height: 100px;   left:50%;   top:50%;   margin-top:-50px;   margin-left:-50px;   }


註意:在定位的時候,一定不要忘了寫top、left、right、bottom的值。雖然在有些手機上不寫樣式不會亂掉,看起來沒問題。但是為了確保萬一,一定要寫上。不要犯這種低級錯誤。

之前在寫移動端的頁面的時候就時忘了寫這幾個屬性的值,而是直接用margin-left、margin-top直接定位,結果在發現在蘋果手機上出現了樣式排版偏移的問題。

  position: absolute/fixed/relative;
     left: 0;
     right: 0;
     bottom: 0;
     top: 0;

4.重點說說彈性佈局flex的相容問題:

彈性佈局雖然好用,但相容性並不太好,除了瀏覽器實現有差異外,PC與移動端也有差異。

display: flex 與 display: box都用於彈性佈局。display: box是2009年的命名,display: flex是2012之後的命名。但display: flex不能完全的向後相容,有些瀏覽器不支持。(display: box 很少用)

div{
//2009後的瀏覽器生效
 display:-webkit-box;
//2011後的瀏覽器生效
 display:-webkit-flex;
//2012後的瀏覽器生效
 display:flex;
}

display:flex

PC端:Chrome和Firefox支持度都很好,IE不支持。 

移動端:
  • iOS Safari支持,UC支持,微信瀏覽器不支持
  • Android 原生瀏覽器 UC 微信都不支持

display:box

PC端:Chrome和Firefox支持度都很好,IE不支持。 

 移動端:

  • iOS Safari支持,UC支持,微信瀏覽器不支持
  • Android 原生瀏覽器 UC 支持

總結起來:IE都不支持,因此這個技術用於移動端是比較理想的,因為移動端的瀏覽器內核基本為webkit。

.container{
display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */
display: -moz-box; /* Firefox 17- */
display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */
display: -moz-flex; /* Firefox 18+ */
display: -ms-flexbox; /* IE 10 */
display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */
}

5.文本溢出隱藏顯示省略號

單行語法:

.text{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;    
}

多行語法:

.text {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
直接用css屬性設置(只有-webkit內核才有作用) 移動端瀏覽器絕大部分是WebKit內核的,所以該方法適用於移動端;
  • -webkit-line-clamp 用來限制在一個塊元素顯示的文本的行數,這是一個不規範的屬性(unsupported WebKit property),它沒有出現在 CSS 規範草案中。
  • display: -webkit-box 將對象作為彈性伸縮盒子模型顯示 。
  • -webkit-box-orient 設置或檢索伸縮盒對象的子元素的排列方式 。
  • text-overflow: ellipsis 以用來多行文本的情況下,用省略號“…”隱藏超出範圍的文本

6. 移動web觸動事件

6.1on和addEventListener

1.寫法上addEventListener中的相應事件不用加on首碼(onclick-->click)

2.on事件多次添加,之後執行最後一次,addEventListener事件每次添加都會生效

3.addEventListener:執行順序是冒泡規則,:從小到大(從兒子到祖宗)

4.addEventListener:事件捕獲順序規則:從大到小(從祖宗到兒子)

addEventListener的參數講解: element.addEventListener(event, function, useCapture) 參數1:必須,字元串,指定事件名稱,不需加on 參數2:必須,function,指定要事件觸發時執行的函數 參數3:可選,布爾值,指定事件是否捕獲或者冒泡階段執行 true:事件句柄在捕獲階段執行 false:預設,事件在冒泡階段執行 這篇文章講的很詳細兩者的區別   6.2使用addEventListener添加事件監聽   addEventListener('touchstart',function(e){}) 表示手觸碰到屏幕是觸發,不管當前有多少只手指   addEventListener('touchmove',function(e){}) 表示手觸動在屏幕上滑動時觸發e.preventDefault()來阻止預設觸發的頁面滾動事件   addEventListener('touchend',function(e){}) 表示手離開屏幕時觸發  
addEventListener('touchmove',function(e){
console.log(e.target); //表示手觸動的當前元素對象
console.log(e.touches); //頁面上的所有觸摸點
console.log(e.touches[0]); //touches[0]觸摸點的第一個元素有許多可以使用的參數
})
  event事件的參數 targetTouches 目標元素的所有當前觸摸點 changedTouches 頁面上最新更改的所有觸摸點 touches 頁面上的所有觸摸點 touches[0]裡面有以下屬性 在每個觸摸點中我們可以獲取以下屬性 - clientX:觸摸目標在視口中的X坐標。   - clientY:觸摸目標在視口中的Y坐標。   - pageX:觸摸目標在頁面中的x坐標。   - pageY:觸摸目標在頁面中的y坐標。   - screenX:觸摸目標在屏幕中的x坐標。   - screenY:觸摸目標在屏幕中的y坐標。   - target:觸摸的DOM節點坐標
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CSS樣式表 CSS可算是網頁設計的一個突破,它解決了網頁界面排版的難題。可以這麼說,HTML的Tag主要是定義網頁的內容(Content),而CSS決定這些網頁內容如何顯示(Layout)。 Web早期,HTML是一種很有限的語言,這種語言不關心外觀,它只是一種簡潔的小型標記機制。 隨著Mosai ...
  • Git介紹 Git是分散式版本控制系統 集中式VS分散式,SVN VS Git 1)SVN和Git主要的區別在於歷史版本維護的位置 2)這兩個工具主要的區別在於歷史版本維護的位置Git本地倉庫包含代碼庫還有歷史庫,在本地的環境開發就可以記錄歷史而SVN的歷史庫存在於中央倉庫,每次對比與提交代碼都必須 ...
  • 前言: 最近在學習HTML、CSS的過程中,想模仿一下百度首頁。發現搜索框這一部分與上下其它元素的空白距離可以隨著視窗大小變化(效果如下圖所示),於是自己研究了一下並記錄下來。 效果實現 分析 利用的原理: ...
  • 1. trim功能(清除字元串兩端空格) String.prototype.trim = function() { return this.replace(/(^\s+)|(\s+$)/g, ''); };' abc '.trim();// 輸出 "abc" 2. 提取瀏覽器中url的參數名和參數值 ...
  • 前端在做數據渲染的時候經常會遇到在數據渲染完畢後執行某些操作,這幾天就一直遇到在列表和表格渲染完畢後,執行點擊和選擇操作。對於angularjs處理這類問題,最好的方式就是指令 directive。 首先,定義指令: 其次,指令定義完畢後,需要將指令添加到迭代的標簽內,此處是<tr>標簽 最後,在最 ...
  • 項目中有一個圖片有預覽(用的layer.photos()),需要非同步修改圖片地址,但是成功修改後第一次預覽會顯示修改前的大圖,第二次以後就都正常了。 嘗試修改成功後再次調用layer.photos(),也沒有作用。 把layer.js文件中 改為 ...
  • 一、水平居中方法 1.行內元素、字體的水平居中 1.對於行內元素(display值為inline或inline block都可以)或者字體:父元素添加css規則:text align:center; 2.塊元素的水平居中 1.使用margin實現水平居中 將margin left 和 margin ...
  • JS中使用typeof能得到的哪些類型 (undefined, number, string, boolean)屬於值類型 函數、數組、對象、null、new Number(5)都是對象。他們都是引用類型。 typeof 只能區分值類型的詳細類型 typeof 區分引用類型只能區分出fn函數 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...