HTML中圖文混合引發莫名空白問題研究

来源:http://www.cnblogs.com/shouce/archive/2016/04/22/5419876.html
-Advertisement-
Play Games

HTML5如火如荼,幾個月前的項目要部分應用新技術,尤其是簡單的文檔類型聲明<!DOCTYPE html>(不區分大小寫),非常吸引人。中途因為IE8等在第一次打開網頁時會阻止js執行,停在詢問頁面,導致新的標記無法識別使頁面十分混亂而作罷,但doctype的簡約定義仍在使用。可是在後續做到上圖下文 ...


HTML5如火如荼,幾個月前的項目要部分應用新技術,尤其是簡單的文檔類型聲明<!DOCTYPE html>(不區分大小寫),非常吸引人。中途因為IE8等在第一次打開網頁時會阻止js執行,停在詢問頁面,導致新的標記無法識別使頁面十分混亂而作罷,但doctype的簡約定義仍在使用。可是在後續做到上圖下文的格式時,發現圖片下方會出現莫名空白區域,經驗上是沒問題的,於是翻來覆去的比對,發現唯一不同只在doctype的定義了,替換成舊版的過渡模式確實就變好了,後來發現設置圖片容器的line-height為0也可以,一直對付著用,今天又翻出這個問題,仔細研究下,發現是圖片垂直方向對齊方式和line-height共同作用的結果。

測試代碼如下:

<style type="text/css"> img,div,span{border:none;padding:0;margin:0;} .example_box{line-height:75px;width:500px;border:10px solid #f60;} .example_box div{} .example_box span{font-size:16px;} </style>   <div class="example_box">     <img src="photo/image5.jpg" height="150" alt=""/>     <div>         <span>標記文字(line-height:75px;)</span>     </div> </div>

預設表現(Firefox下):

測試代碼firefox下預設表現

圖1

可以很明顯的看出來<img/>和<div/>之間有個明顯的間距,大小接近<div/>行高的一半。

如果將包含文字的<div/>修改顯示類型為 display:inline-block; ,那麼表現如圖2:

圖2

可以看出圖片和文字的對齊方式是圖1中圖片與文字區域間距的來源。

而間距的大小,則由line-height的值決定,但裡面的比例並不是很清楚,大概在不到一半的水平上。這裡不再貼圖展示,主要討論圖片的垂直對齊方式對問題產生的影響。

圖片的vertical-align屬性值預設為baseline,測試其他幾個屬性,分別如下圖:

圖3(vertical-align:top;)

圖4(vertical-align:text-top;)

圖5(vertical-align:text-bottom;)

圖6(vertical-align:bottom;)

圖7(vertical-align:middle;)

就vertical-align的幾個值來看,

  1. baseline與text-bottom最接近,但是前者右側的文字更靠下些。這個特性很多地方都能輕易的看到,如圖8插入了表情的微博。開心網的狀態和記錄對此做了調整;
  2. text-top、text-bottom對齊的是inline包含文字的區域(這個區域不是line-height決定,而是font-size和瀏覽器對inline區域預設表現共同決定。關於inline區域不同瀏覽器表現比較複雜,這裡不予討論);
  3. top、bottom、middle可以很好的對圖片在一行里的定位精確處理。

圖8 第三行明顯文字被表情影響了行距(chrome下新浪微博)

綜上所述,圖片下的莫名占位空白問題是vertical-align屬性和line-height值共同決定的,前者是導致問題的原因,後者基本決定空白的大小。

該可以有三種解決辦法:

  1. 取消<!DOCTYPE html>這種html5的應用方式,恢復到傳統的過渡模式
  2. 為<img/>設置一個容器,如<div/>,然後設置該容器的line-height:0;
  3. 定義圖片的vertical-align屬性,根據實際情況從top、bottom、middle中選取是比較安全的方式

我只是發現了這個現象,並總結了可能的影響因素,至於為什麼在html5模式下表現為這樣還不得而知,希望哪位知道的能不辭吝教,歡迎大家指正。


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

-Advertisement-
Play Games
更多相關文章
  • 職責鏈模式(Chain of Responsibility) 定義 職責鏈模式(Chain of Responsibility),使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。 類圖 描述 Handle ...
  • Atitit. http 代理原理 atiHttpProxy 大木馬 1. 面這張圖可以清晰地闡明HttpProxy的實現原理:1 2. 代理伺服器用途1 3. 其中流程具體如下:2 4. 設計規劃3 5. 結束語4 1. 面這張圖可以清晰地闡明HttpProxy的實現原理: 2. 代理伺服器用途 ...
  • 最近工作需要,用到了RabbitMQ來做消息隊列解耦業務系統,RabbitMQ我就不過多介紹了,我只把安裝過程的備忘粘貼在這裡,供大家參考 ...
  • 正文: 在編程中,無論是OC還是C亦或是C++語言,所聲明的整數變數都會在記憶體中占有固定的存儲空間,而這些存儲空間都是固定的。 比如我們知道的int、long、short、unsigend int、unsigend long、unsigend long long等等,都有固定的存儲空間,而哪怕是64 ...
  • 法一:升序原理:迴圈嵌套即雙向遍歷,在從前往後的遍歷過程中,如果前一個位子大於後一個位子,把前一個位子的值付給後一個位子, 在從後往前遍歷過程中如果前一個值大於後一個的值,把前面的值付給後面,過程中把被賦值位子的值用變數接收在賦值,否則無效。 降序同理 法二:自定義比較器(匿名函數),簡單暴力快捷 ...
  • 法一:返回新數組每個位子類型沒變 法二:類似於法一,但本農覺著法一更易於理解 法三:比前兩個更易於理解但是返回的新數組每個位子的number類型變為string類型了!!關鍵時刻得處理 ...
  • 所謂容器組件,指能搞包容其它ui組件的組件,和佈局組件的差別在於,容器組件不能直接在IDE的設計界面拖拽其它ui組件加到它的內部。他一般是通過屬性templates來指定多個ui文件作為模板,然後通過數據綁定的方式來載入數據。數據綁定參考文檔.容器組件很多種而且也很重要,因為它一般是App的主框架, ...
  • × 目錄 [1]漂浮的白雲 [2]旋轉的星球 [3]正方體合成 前面的話 前面介紹過動畫animation的詳細用法,本文主要介紹動畫animation的三個效果 漂浮的白雲 【效果演示】 【簡要介紹】 漂浮的白雲主要通過遠景白雲和近景白雲來實現立體漂浮效果。遠景和近景分別使用兩張背景圖片,通過改變 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...