如何跨浏览器一致地对齐复选框及其标签

2023-12-06

这是经常困扰我的 CSS 小问题之一。

Stack Overflow 周围的人如何垂直对齐checkboxes和他们的labels始终如一地跨浏览器?

每当我在 Safari 中正确对齐它们时(通常使用vertical-align: baseline on the input),它们在 Firefox 和 IE 中完全关闭。

在 Firefox 中修复它,Safari 和 IE 不可避免地会混乱。每次编写表单时我都会在这方面浪费时间。

这是我使用的标准代码:

<form>
    <div>
        <label><input type="checkbox" /> Label text</label>
    </div>
</form>

我通常使用 Eric Meyer 的重置,因此表单元素的覆盖相对干净。期待您提供任何提示或技巧!


警告!这个答案是too old and 不起作用在现代浏览器上。

I'm not the poster of this answer, but at the time of writing this, this is the most voted answer by far in both positive and negative votes (+1035 -17), and it's still marked as accepted answer (probably because the original poster of the question is the one who wrote this answer).

正如评论中多次指出的那样,这个答案不再适用于大多数浏览器(并且自 2013 年以来似乎无法做到这一点)。


经过一个多小时的调整、测试和尝试不同样式的标记后,我想我可能有一个不错的解决方案。这个特定项目的要求是:

  1. 输入必须在自己的行上。
  2. 在所有浏览器中,复选框输入需要与标签文本类似(如果不相同)垂直对齐。
  3. 如果标签文本换行,则需要缩进(因此复选框下方不会换行)。

在进行任何解释之前,我先给您代码:

label {
  display: block;
  padding-left: 15px;
  text-indent: -15px;
}
input {
  width: 13px;
  height: 13px;
  padding: 0;
  margin:0;
  vertical-align: bottom;
  position: relative;
  top: -1px;
  *overflow: hidden;
}
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

这是工作示例JSFiddle.

此代码假设您使用像 Eric Meyer 那样的重置,它不会覆盖表单输入边距和填充(因此将边距和填充重置放入输入 CSS 中)。显然,在实时环境中,您可能会嵌套/覆盖一些内容来支持其他输入元素,但我想让事情保持简单。

注意事项:

  • The *overflow声明是一个内联 IE 黑客(星属性黑客)。 IE 6 和 7 都会注意到它,但 Safari 和 Firefox 会正确地忽略它。我认为这可能是有效的 CSS,但你最好使用条件注释;只是为了简单而使用它。
  • 据我所知,唯一vertical-align跨浏览器一致的声明是vertical-align: bottom。设置此值然后相对向上定位在 Safari、Firefox 和 IE 中的表现几乎相同,只有一两个像素的差异。
  • 使用对齐的主要问题是 IE 在输入元素周围留下了一堆神秘的空间。它不是填充或边距,而且它是持久的。在复选框上设置宽度和高度,然后overflow: hidden由于某种原因,切断了额外的空间,并允许 IE 的定位与 Safari 和 Firefox 非常相似。
  • 根据您的文本大小,您无疑需要调整相对位置、宽度、高度等以使内容看起来正确。

除了我今天早上正在做的项目之外,我还没有在任何项目上尝试过这种特定的技术,所以如果你发现一些更一致的东西,一定要继续。


警告!这个答案是too old and 不起作用在现代浏览器上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何跨浏览器一致地对齐复选框及其标签 的相关文章

  • 使用 JavaScript 将数据插入数据库时​​,在控制台中创建错误“超出最大调用堆栈大小”

    我进行了大量搜索来修复过去几天遇到的 JavaScript 错误 我看到很多问题都得到了解答堆栈溢出 但不幸的是 没有人符合我的错误 我想要的是发送一个简单的记录到database using JavaScript and PHP 但我得到
  • 输入文本中固定下划线

    我试图修复所有输入文本类型中的下划线 但没有成功 Example My code input width 100 background color fcfcfc border 0 padding 10px div class col lg
  • JQuery:如何仅在完成调整大小后调用 RESIZE 事件?

    浏览器窗口大小调整完毕后 如何调用函数 我正在尝试这样做 但遇到了问题 我正在使用 JQuery Resize 事件函数 window resize function how to call only once the browser ha
  • 选择移动 Web HTML5 框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • PHP表单提交后如何显示成功消息?

    这是代码 我想要这样 表单提交 gt page2 php gt 重定向 gt page1 php 这是消息 弹出窗口或其他内容 page1 php
  • 弯曲方向等高行:列

    我有一个带有两个弹性项目的弹性布局 显示为行 flex direction column 这些物品应该有一个最小高度 但它们应该保持其中一个物品生长所需的相同高度 看这个 JSFiddle https jsfiddle net 958vxh
  • 如何在光标下的所有元素上调用 mouseover?

    我有一个网络应用程序 每次单击时都会创建一个点 见下文 当我将鼠标悬停在一堆点上时 我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件 然而 只有一个事件被触发 即堆栈 顶部 的点的事件 当鼠标移动到一堆多个点
  • 使用 CSS Flexbox 堆叠图像

    我正在学习使用CSSflexbox 和我想在左侧渲染一个大图像 并在彼此之上渲染两个小图像 我怎样才能使用CSS弹性盒 div class container img class image1 src alt null img class
  • CSS 中的 * 有什么作用?

    明星是做什么的 这叫什么 对我来说 这是某种通配符 它叫什么名字 以便我可以阅读它 div zoom 1 this zoom 1 display inline display inline and this whats the differ
  • HTML5 服务器端事件:EventSource 与包装的 WebSocket

    HTML5 服务器发送事件 SSE API 是否只是 HTML5 WebSocket 之上的受限制的 基于事件的 API 在我看来 一个EventSource只是一个WebSocket that Cannot send data 使用tex
  • Django css文件缓存

    我有一个 css 文件 我想修改它以满足我的需要 问题是它似乎被缓存在某个地方 因为无论我在 css 文件中做什么 我都看不到更改 我确信我指向了正确的文件 因为现在我已经对其进行了修改 并且它有效 有什么设置可以关闭缓存吗 谢谢 正如本文
  • 我的 iPhone 6 获取 iPhone 5 媒体查询

    我不明白这里发生了什么事 我在 CSS 媒体查询中专门针对 iphone 5 media only screen and min device width 320px and max device width 568px some div
  • 父>子CSS选择器

    我经常使用这个CSS选择器parent gt child 我的设计在 Mozilla 和 Opera 中看起来不错 但在 IE 中 就很糟糕了 我知道 gt 在 IE 中无法识别 但是 IE 中的替代方案是什么 一种替代方法是使用通用选择器
  • 如何在 Bootstrap 3 中制作进度条动画?

    我正在尝试为 Bootstrap 进度条设置动画 但我不知道该怎么做 我得到了宽度的值但是console log bar width 返回宽度px但不是 如内联所示style width 90 我用代码重新创建了一个 bootply Boo
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • 带 CSS 网格的等宽侧边栏列

    是否可以让左右列具有相同的宽度 而中间列占据剩余空间 我不想设置像这样的百分比grid template columns 20 60 20 因为并不总是确定这些列的内容是什么 Flexbox 和表格似乎没有解决这个问题的方法 所以我再次尝试
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • Excel 类似 HTML 表格,可在 x 轴(完整表格)和 y 轴(标题固定)上滚动

    我想建立一个具有固定宽度列的表格 在大多数情况下 表数据会水平和垂直溢出 如果列的宽度大于视图宽度 则需要水平滚动条来滚动并查看所有表列 同时滚动标题和数据 如果数据的高度大于可用视图 则会出现垂直滚动框 但在滚动时保持标题固定 以便用户关
  • jQuery 覆盖默认验证错误消息显示(Css)弹出/工具提示等

    我试图用 div 而不是标签来覆盖默认的错误消息标签 我看过这个帖子 https stackoverflow com questions 309574 jquery validation how to not display errors

随机推荐

  • KarateException 路径中缺少属性 - JSON

    我试图匹配响应中的特定变量并尝试如下 但我收到错误消息KarateException Missing Property in path Odata 我的问题是 我们如何修改才能避免出现此错误 Feature And match email
  • 如何使用 c#.net 4.0 在最大定义的并行线程中运行任务

    我有 1 个方法 我想在 10 个不同的并行线程中运行 所有方法都是独立的 彼此之间没有依赖关系 我的问题是 如果我有 100 个项目要处理并且想一次处理 10 个 那么如何做一次运行 10 次 我创建了一个示例代码 我正在使用Parall
  • URL 重写 - 初学者指南

    我需要学习如何对网站进行 URL 重写以获得漂亮的 URL 通过阅读 50 篇教程 我对它的工作原理有了一个大概的了解 但他们都没有真正发挥作用 也从未设法使其正常工作 您知道有哪些适合我入门的教程吗 这是我想如何使用它的示例 这是基本链接
  • 如何使用Dompdf转换多个html文件?

    我在做什么 我正在使用一个名为的 PHP 库Dompdf将我的 HTML 文件转换为 PDF 我已成功将单个 HTML 文件转换为 PDF 我正在尝试做的事情 现在我有多个报告 我想将它们转换为 PDF 文件 我在做什么 我在这里有一个示例
  • 为什么扫描仪会跳过用户的输入

    我有一个小任务 允许用户输入任何国家的地区及其邻居 我做了所有的事情 只是有一个小问题 那就是当我运行我的代码时 程序要求用户输入区域的数量 如果用户输入 13 或数字大于 10 系统会认为该数字就像两个输入 它不会允许用户为第二个问题输入
  • iOS 11 Safari 引导模式文本区域位于光标之外

    在 iOS 11 safari 中 输入文本框光标位于输入文本框之外 我们不明白为什么会出现这个问题 正如您所看到的 我的焦点文本框是电子邮件文本输入 但我的光标位于其中 这只发生在 iOS 11 Safari 上 我通过添加解决了这个问题
  • 找不到 pandas==1.3.1 的匹配发行版

    我目前拥有版本 1 1 5 的 Pandas 我正在尝试使用以下命令安装最新版本的 Pandas pip install pandas 1 3 1 但是 我收到如下错误 ERROR Could not find a version that
  • 无法在 Eclipse 中加载 Maven 项目中的 Widgetsets

    我使用 maven 创建了一个 vaadin Web 应用程序eclipse 特别是我使用了原型vaadin archetype touchkit如中所述瓦丁之书 20 3 4 在没有对默认生成的代码进行任何更改的情况下 我已经使用带有目标
  • 如何集成 Expression> 来清理我的 Linq-to-Entity 查询?

    我想使用Expression
  • 打印时 pyodbc 弃用警告

    当我跑步时print cursor fetchone pyodbc 包 我有以下警告 main py 33 DeprecationWarning PyUnicode FromUnicode NULL size is deprecated u
  • libxml/tree.h 没有这样的文件或目录

    我收到以下错误 libxml tree h 没有这样的文件或目录 我已经添加了libxml2 dylib到我的项目 但是我遇到了这种麻烦 请帮我 遵循指示here 在 设置项目文件 下 设置您的项目文件 您需要将 libxml2 dylib
  • .htaccess 重定向域别名'

    我有一个客户 它有大量的域别名 并希望它们全部重定向到网站上的一个主域 他们还想知道哪个域别名正在执行重定向 我已经把那部分写下来了 但我想将代码优化到最好 最正确的方式 并消除我必须编写的代码量 我想知道是否有办法将所使用的域别名传递给
  • qt.qpa.xcb:无法连接显示 qt.qpa.plugin:无法加载 Qt 平台插件“xcb”

    运行下面的代码后 我收到以下错误 Got keys from plugin meta data xcb QFactoryLoader QFactoryLoader checking directory path usr bin platfo
  • Windows 8 商店应用程序是否支持 MS Access 数据库?

    我刚刚开始学习 Windows 8 应用商店应用程序编程 并遇到了一个问题 Windows 8 应用商店应用程序是否支持 MS Access 数据库 如果不是那么它支持哪些数据库 根据您对支持的定义 您可以创建一个 WCF 服务 允许您从
  • 如何获取当前正在执行的 javascript 代码的文件路径

    我正在尝试做类似 C 的事情 include filename c 或PHPinclude dirname FILE filename php 但在 JavaScript 中 我知道如果我可以获得加载 js 文件的 URL 例如标签的 sr
  • 如何使用 .NET 创建具有特定扩展名的临时文件?

    我需要生成一个扩展名为 csv 的唯一临时文件 我现在做的是 string filepath System IO Path GetTempFileName Replace tmp csv 但是 这并不能保证我的 csv 文件是唯一的 我知道
  • 定义我自己的命令

    我正在尝试在 MacVim 中定义自己的命令 将 c 语句或语句范围转换为注释 所以我把它放在我的 vimrc 中 command range Com
  • standard_init_linux.go:211:exec 用户进程导致 alpine linux 和 python“没有这样的文件或目录”

    我有一个目录 其中包含 docker 文件 attack py 和requirements txt 使用它 我创建了以下 dockerfile FROM arm64v8 python 3 7 alpine COPY qemu arm sta
  • Android 地图 NullPointerException ItemizedOverlay

    这根本没有引用我的代码中的任何地方 我怎样才能弄清真相呢 java lang NullPointerException at com google android maps OverlayBundle draw OverlayBundle
  • 如何跨浏览器一致地对齐复选框及其标签

    这是经常困扰我的 CSS 小问题之一 Stack Overflow 周围的人如何垂直对齐checkboxes和他们的labels始终如一地跨浏览器 每当我在 Safari 中正确对齐它们时 通常使用vertical align baseli