手機端頁面自適應解決方案—rem佈局
請問, p標籤與input標籤的間距為什麼這麼大?
PS. 去掉<!DOCTYPE html>
就沒有問題, 這是為什麼?
#
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hello</title>
<script>!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=a/2*s*n+"px"},e.exports=t["default"]}]); flex(100, 1);</script>
<style type="text/css">
.p{
background: #FFF;
padding:0.2rem;
}
.p p{
font-size: 0.26rem;
color:#24b5f1;
border: 1px red solid;
}
</style>
</head>
<body style="background:#eeeeee;">
<p class="p">
<p>Hello</p>
<input type="text">
</p>
</body>
</html>
阿神2017-06-30 10:01:24
因為input
元素是行內塊元素,所以它所在的行會形成一個行框。然後行框的高度是和line-height
屬性相關的,line-height
的說明如下:
On a block container element whose content is composed of inline-level elements, 'line-height' specifies the minimal height of line boxes within the element. The minimum height consists of a minimum height aboven the minimum height consists of a minimum be above , exactly as if each line box starts with a zero-width inline box with the element's font and line height properties. We call that imaginary box a "strut."
line-height
定義的是行的最小高度,當行內包含行內元素的時候,每個行內元素會產生一個行內框,然後行內元素根據vertical-align
屬性對齊元素,然後取所有這些框的最高上邊界和最低下邊界,最高上邊界和最低下邊界之間的高度組成了實際的行高。
那麼規範又是如何保證line-height
定義的是行的最小高度的呢?
其實,參與行框形成的元素,除了這些實際存在
的行內元素,還存在一個strut
元素,這是一個假想的具有塊元素的字號和行高的零寬元素,這個元素會參與最後實際的行高。
現在,我們來看這個問題:
你這個頁面運行之後,會在html元素上添加一個font-size
屬性,沒有具體看這個大小和什麼相關,我運行程式碼以後的結果是font-size : 50px;
,以下以font-size: 50px;
來進行說明。
因為font-size
屬性是可以繼承的,所以你的p
元素的font-size
也是50px;因為line-height
的預設值是normal,規範建議的normal值是
line-height
的字體值是normal,規範建議的normal值是line-height
的1.0到1.2之間,和瀏覽器實作有關,我們這裡假設用的1.0;第一個元素是p元素,是區塊級元素,不會產生行框,和line-height沒有關係;
第二個元素是input元素,input元素是行內塊元素,行內塊元素產生的行內框是元素上外邊界到下外邊界(margin的上邊界到下邊界),然後strut
這個假想元素產生了一個高為
綜上,你可以設定p
的font-size: 0px;
這樣假想的strut
元素形成的行內框就不會高於input元素產生的行內框了。
或設定input元素display: block;
,這樣input元素就是區塊級元素了,區塊級元素是不涉及行框的。
Update1:
有聲明表示文檔運行在標準模式下,去掉以後是運行在兼容模式下的,標準模式遵守標準規範,兼容模式就不一定了。
大家讲道理2017-06-30 10:01:24
確實和父元素font-size有關,表現為最小行高是父元素字體的大小,解決方法是設定合適父元素font-size或設定display:block,高票答案很詳細