javascript - 使用rem后 元素间的间距很大怎么办?
给我你的怀抱
给我你的怀抱 2017-06-30 09:59:24
0
7
969

手机端页面自适应解决方案—rem布局

请问, p标签与input标签的间距为什么这么大?

PS. 去掉就没有问题, 这是为什么?

    Hello   

Hello

给我你的怀抱
给我你的怀抱

全部回复 (7)
阿神

因为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 above the baseline and a minimum depth below it, 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属性,没有具体看这个大小和什么相关,我运行代码以后的结果是font-size: 50px;,下面以font-size: 50px;来进行说明。
因为font-size属性是可以继承的,所以你的p元素的font-size也是50px;因为line-height的默认值是normal,规范推荐的normal值是字体大小的1.0到1.2之间,和浏览器实现有关,我们这里假设用的1.0;
第一个元素是p元素,是块级元素,不会生成行框,和line-height没有关系;
第二个元素是input元素,input元素是行内块元素,行内块元素生成的行内框是元素上外边界到下外边界(margin的上边界到下边界),然后strut这个假想元素生成了一个高为font-size * line-height = 50px * 1 = 50px的行内框,这两个行内框按照基线对齐的方式进行排列,然后取这两个行内框的最高上边界和最低下边界就是最后的行框。因为input元素生成的行内框远远没有50px,所以最后取得应该是strut因为font-size属性是可以继承的,所以你的p元素的font-size也是50px;因为line-height的默认值是normal,规范推荐的normal值是字体大小的1.0到1.2之间,和浏览器实现有关,我们这里假设用的1.0;

第一个元素是p元素,是块级元素,不会生成行框,和line-height没有关系;第二个元素是input元素,input元素是行内块元素,行内块元素生成的行内框是元素上外边界到下外边界(margin的上边界到下边界),然后 strut这个假想元素生成了一个高为 font-size * line-height = 50px * 1 = 50px的行内框,这两个行内框按照基线对齐的方式进行排列,然后取这两个行内框的最高上边界和最低下边界就是最后的行框。因为input元素生成的行内框远远没有50px,所以最后取得应该是 strut的上边界和下边界,所以这个行框是50px,所以导致中间有"所谓"大段的空白。

综上,你可以设置pfont-size: 0px;这样假想的strut元素形成的行内框就不会高于input元素生成的行内框了。
或者设置input元素display: block;,这样input元素就是块级元素了,块级元素是不涉及行框的。

Update1:
声明表示文档运行在标准模式下,去掉以后是运行在兼容模式下的,标准模式遵守标准规范,兼容模式就不一定了。

    滿天的星座

    把根字体设置一下

      学霸

      p标签自带上下margin

        ringa_lee

        么有重置css吧 reset下试试

          学霸

          你的那个js有问题吧

          页面解析出来根目录font-size都是100px,一般都是16px

            代言

            首先 p标签自带margin input{vertical-align: top;}

              大家讲道理

              确实和父元素font-size有关,表现为最小行高是父元素字体的大小,解决方法是设置合适父元素font-size或者设置display:block,高票回答很详细

                最新下载
                更多>
                网站特效
                网站源码
                网站素材
                前端模板
                关于我们 免责声明 Sitemap
                PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!