首页 web前端 html教程 表单元素与提示文字无法对齐的问题_HTML/Xhtml_网页制作

表单元素与提示文字无法对齐的问题_HTML/Xhtml_网页制作

May 16, 2016 pm 04:42 PM
特点 表单元素

在很多网站涉及到表单的页面中,都存在这种表单元素与提示文字无法对齐的问题。于是打算研究一下这个问题。

最近的项目涉及到很多表单的制作,特别是复选框(checkbox)和单选框(radio)。但是在前端开发过程中发现,单(复)选框和它们后面的提示文字在不进行任何设置的情况下,是无法对齐的,而且在Firefox和IE中相差甚大。即使设置了vertical-align:middle,也依然不能完美对齐。如下图所示:

于是上网查看了一些网站,发现这个问题是普遍存在的,如下图(FF3.5):

在很多网站涉及到表单的页面中,都存在这种表单元素与提示文字无法对齐的问题。于是打算研究一下这个问题。首先,搜索到了wheatlee前辈的文章《大家都对vertical-align的各说各话》。wheatlee在他的文章中关于垂直居中提到了这样几个关键点:

1、vertical-align:middle的时候,是该元素的中心对齐周围元素的中心。

2、这里“中心”的定义是:图片当然就是height的一半的位置,而文字应该是基于baseline往上移动0.5ex,亦即小写字母“x”的正中心。但是很多浏览器往往把ex这个单位定义为0.5em,以至于其实不一定是x的正中心(baseline等名词如果不懂,请先阅读wheatlee的文章)

按照这个思路,对照我遇到的问题,首先想到的是先验证一下浏览器对于“复选框”和图片是不是使用同样的规则来渲染(是不是把复选框当成一个正方形图片来对待)。于是写出下面的代码:

<style>
body{font-size:12px;}
</style>
<input style="vertical-align:middle;" name="test" type="checkbox">
<img style="vertical-align:middle;"  src="testpic.gif" />
登录后复制

测试文字

代码中的testpic.gif是一个尺寸与复选框完全一样的黑色图片。FF3.5下显示如下:



事实证明,FF3.5对于复选框和图片的垂直对齐方式是采用同样的规则进行渲染的,即将复选框当作一个正方形的图片(IE不是)。按照wheatlee“middle的时候,是该元素的中心对齐周围元素的中心”的观点,如果我在复选框后面输入英文字符,那么复选框的中心将与英文中小写字母x的中心对齐。经测试,FF3.5下面基本上是这样的(在一些字号的时候会有一定的误差,比如,如果字体高度是偶数,那么这个中心点有时在一般偏上1px,有时在一半偏下1px)。如图:

但是这对于中文来说,并不是一个好的结果。因为中文是方块字,并且相同字号的情况下,高度会比小写的x高出很多。所以,按照浏览器内置的方式,只用 vertical-align:middle是无论如何也无法对齐中文的(无论是只写中文,中文在前,英文在前,FF3.5都是按照小写x中心那种方法来对齐的)。但是回头再看看wheatlee的文章,他说这个小写x中心对齐的渲染方式,是对于“文字”来说的。那么,如果不是文字呢…?如果复选框后面跟的是一个行内元素,如label,而文字是写在它内部的,会是什么样呢?浏览器会不会将这个内联元素整体看作一个“块”,然后依照类似图片的规则进行渲染呢?如果那样,我们就达到目的了。

但是经过测试,很遗憾,事实并不是这样,加上label后跟没加没有任何区别。FF3.5/IE6/IE7均是如此。在FF3.5中用firebug看一下,证明浏览器并没有按照label的高度值来去对齐中心点。如图:

如果按照之前的设想,红蓝两线应该是重合的。但现在的情况是,它们相差了1px。并且这1px是没有规律的,随着字号的放大,并不恒定,貌似轻易也无法提炼出对应关系来。于是想到,再试一下将label也加上vertical-align:middle。结果如图:

在FF3.5和IE7下面已经很接近于我们希望的状态了,只差1px。IE6下… 无语了。

经过以上折腾,我得出了跟wheatlee相同的结论,就是,各种浏览器之间对这个问题的处理貌似没有任何规律。并且,似乎每一种浏览器对于 vertical-align:middle的渲染都不是完全遵从W3C所说的“Align the vertical midpoint of the box with the baseline of the parent box plus half the x-height of the parent.”

但是经过仔细总结和分析,发现好像最终对齐的结果跟label的高度和当前字体中小写x的中心点都有关系,两者同时影响着渲染结果(虽然不明白为什么会这样)。那么,既然现在的情况以及非常接近于希望的状态了,是否可以通过设置字体的方式来改变小写x的中心点的位置,进而对垂直对齐的结果进行“微调”呢?

最终,在不断的测试中发现,如果将font-family中的第一个字体设置为Tahoma,则可以完美的实现对齐(Verdana等字体也可以)。而且在FF3.5/IE6/IE7/IE8和Chrome中均显示正常。最终代码如下:



提示:您可以先修改部分代码再运行


最终效果:

至此,多选框(checkbox)和提示文字对齐的问题已经解决,那么其他表单元素呢?试验了一下单选框(radio),发现,还是有问题。提示文字依然是偏上。用firebug看了一下,发现radio元素默认有5px的左边距和3px的上、右边距,却没有下边距。如图:



于是,尝试去掉radio的外边距,刷新后显示正常。(其实多选框checkbox也是有外边距的,只是它的外边距四个方向都有,并且相等,所以对于垂直对齐没有影响。)下图是一些常用表单元素的最终显示效果以及最终代码,大家可以用不同浏览器看一下实际的效果(注:由于演示使用的12px的中文实际只有11px高,而 IE下文本框等元素的高度是22px,一个是奇数,一个是偶数,所以这些部分在IE中是无论如何也对不齐的,差1px。如果手动控制文本框高度为奇数,或者将文字设置成为偶数的高度,则显示正常):





提示:您可以先修改部分代码再运行


而且我发现,不但解决了中文的问题,如果提示信息换成其他语言,基本上也能够对齐,至少不会像开始那样偏移太多。下面是截图、代码和一些例子:





提示:您可以先修改部分代码再运行


至此,我的研究过程告于段落。但是,还是想不通各浏览器为什么最后会显示出这样的效果,其中的原理是什么。牛人们有空可以解释一下吗?

 以上就是表单元素与提示文字无法对齐的问题_HTML/Xhtml_网页制作的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

ppt怎么做圆形的图片和文字 ppt怎么做圆形的图片和文字 Mar 26, 2024 am 10:23 AM

首先,在 PPT 中绘制一个圆圈,然后插入一个文本框,输入文字内容。最后,设置文本框的填充和轮廓为无,即可完成圆形图片和文字的制作。

word中怎么给文字加点? word中怎么给文字加点? Mar 19, 2024 pm 08:04 PM

我们在日常制作Word文档时,有时需要给文档中的某些文字下方加点,尤其是出试题的时候。来用于重点突出这部分内容,小编给大家分享下word中怎么给文字加点的技巧,希望能帮助到您。1.打开一个空白word文档。  2.举个例子比如给“如何给文字加点”几个字的下面加上点。  3.我们先把“如何给文字加点”几个字用鼠标左键选择了,注意以后你想给那个字加点就先用鼠标的左键选择哪个字。今天我们给这几个字都加点,所以几个字都选择了。选中这几个字后右击,在弹出来的功能框中点击字体。  4.然后就会出现一个这样的

如何修改图片上的文字 如何修改图片上的文字 Aug 29, 2023 am 10:29 AM

修改图片上的文字可以通过使用图片编辑软件、在线工具或截图工具来实现。其具体步骤为:1、打开图片编辑软件并导入需要修改文字的图片;2、选择文字工具;3、单击图片上的文字区域,以创建一个文本框;4、在文本框中输入您想要的新文字;5、如果只是想删除图片上的文字,可以使用橡皮擦工具或选择工具来选择并删除文字区域。

Golang图片处理:学习如何添加水印和文字 Golang图片处理:学习如何添加水印和文字 Aug 17, 2023 am 08:41 AM

Golang图片处理:学习如何添加水印和文字引言:在现代数字化和社交媒体的时代,图片处理已经成为了一项重要的技能。无论是个人使用还是商务运营,添加水印和文字都是常见的需求。在本文中,我们将探讨使用Golang进行图片处理的方法,学习如何添加水印和文字。背景:Golang是一门开源的编程语言,以其简洁的语法、高效的性能和强大的并发能力而闻名。它已经成为许多开发

文字语义理解技术中的语义角色标注问题 文字语义理解技术中的语义角色标注问题 Oct 08, 2023 am 09:53 AM

文字语义理解技术中的语义角色标注问题,需要具体代码示例引言在自然语言处理领域中,文字语义理解技术是一项核心任务。其中,语义角色标注是一种重要的技术,用于识别句子中的每个词语在上下文中的语义角色。本文将介绍语义角色标注的概念和挑战,并提供一个具体的代码示例来解决该问题。一、什么是语义角色标注语义角色标注(SemanticRoleLabeling)是指为句子

PPT幻灯片设置鼠标移动到文字显示图片的详细方法 PPT幻灯片设置鼠标移动到文字显示图片的详细方法 Mar 26, 2024 pm 03:40 PM

1、首先给图片对象设置一个自定义动画。2、要想将效果做得更逼真,那么就请使用如上图的动画效果【出现】。给图片对象设置好自定义效果之后,我们会在窗口的右边,看到自定义动画的名称,如图的【1good】,现在使用鼠标左键点击如图的方向朝下的小三角形,弹出如图的菜单列表。3、上图菜单中,选择【效果选项】,弹出如图。4、上图中,切换到【计时】选项卡,点击【触发器】,之后选择下面的【单击下列对象时启动效果】,右边选择【标题1:图片一】。这样的设置,意思就是说,当在播放幻灯片时,点击【图片一】那几个文字,就会

番茄畅听怎么看文字 番茄畅听怎么看文字 Feb 27, 2024 pm 03:58 PM

在忙碌的生活中,能够轻松地用耳朵聆听精彩的故事,同时又能在需要时轻松切换到文字阅读在番茄畅听,这款独特的小说软件,为你带来了前所未有的双重体验。但是很多用户们在使用过程中,遇到想要仔细阅读或者没听清的地方也像直接查看文字,却不知道究竟该如何查看文字,那么想要了解的用户们就快来跟着本文一起详细了解一下把。番茄畅听怎么看文字答案:【番茄畅听】-【小说】-【阅读电子书】。具体步骤:首先,启动番茄畅听软件,进入首页后会发现有许多热门小说可供选择。在这里,选择一本小说点击阅读。2、然后在小说的详情页面中我

PPT将文字和图片组合到一起的操作方法 PPT将文字和图片组合到一起的操作方法 Mar 26, 2024 pm 03:16 PM

1、点击菜单栏的【插入】,然后点击【图片】。2、选择自己需要的图片。3、点击插入文框,选择【横排文本框】。4、在插入的文本框中输入文字。5、按住Ctrl键同时选择图片和文本框。6、右击鼠标,点击【组合】。7、此时图片和文本框就组合在一起了。

See all articles