border-box 不适用于内联块元素?

2024-05-11

我有一个清单inline-block元素,我想为您将鼠标悬停在其上的元素添加边框。但是,请注意边框如何偏移元素,即使我使用box-sizing: border-box并明确定义元素的宽度和高度。我说明了以下行为:

* { box-sizing: border-box }

ul { font-size: 0 }

li {
  display: inline-block;
  width: 100px; height: 40px; margin: 10px;
  font-size: 20px; text-align: center;
  background-color: #FFF176;
}

li:hover { border: 5px dashed grey }
<ul>
  <li>hover</li>
  <li>over</li>
  <li>me!</li>
</ul>

我发现的最好的解决方案是使用outline and outline-offset代替border,但我真的很想知道为什么我原来的方法不起作用:/

UPDATE:虽然 BoltClock 给出了非常好的解释和建议(这就是我所要求的),但我只是想提一下,我完全忘记了flexbox https://css-tricks.com/snippets/css/a-guide-to-flexbox/,它几乎解决了我在使用内联元素时遇到的所有问题。我将它与 BoltClock 的透明边框技巧结合起来最终的 JSFiddle 解决方案 https://jsfiddle.net/gxzy6t0f/1/


我现在看到了问题所在。发生的事情是这样的box-sizing: border-box添加边框后,会导致每个元素的内容框水平和垂直缩小。由于您的元素是内联块,因此垂直收缩会影响悬停元素的基线,从而影响其所在行的基线,从而导致同一行上的其他元素发生偏移。如果仔细观察,您会发现文本实际上保持对齐,这是偏移元素的目标。

将边框更改为轮廓是有效的,因为轮廓的设计对布局没有影响(而且还因为您随后将边框完全从图片中删除)。

然而,正是由于这个原因,以这种方式使用轮廓会产生与带有边框的原始效果明显不同的效果。设置初始透明边框而不是轮廓将确保您的内容保持正确的偏移量,无论边框在背景中是否可见(这已在之前的答案中显示,但可能因为被否决而被删除):

* { box-sizing: border-box }

ul { font-size: 0 }

li {
  display: inline-block;
  width: 100px; height: 40px; margin: 10px;
  font-size: 20px; text-align: center;
  background-color: #FFF176;
  border: 5px dashed transparent;
}

li:hover { border-color: grey }
<ul>
  <li>hover</li>
  <li>over</li>
  <li>me!</li>
</ul>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

border-box 不适用于内联块元素? 的相关文章

  • 通过 CSS 转换平滑由 javascript 驱动的快速位置变化?

    我认为这是一个很遥远的事情 但值得一问 我有一些类似于许多移动应用程序 例如 Facebook 中的左侧菜单的东西 当您按下 打开 按钮时 它可以顺利打开 在我的例子中 使用 CSS 过渡 但我还实现了拖出您可以从屏幕左侧滑动以拖出菜单的功
  • Bootstrap 列中的文本未居中

    我在 Bootstrap 中构建了 1 10 1 列标题结构 现在我想将其居中 在 10 列中 但正如您通过页面中间的虚线看到的 不集中在正中间 为什么不 我怎样才能把它拿到那里 标题的高度取决于font size其中的文字 如何通过命令手
  • 如何自动调整下拉内容的宽度以匹配

    元素的宽度?

    基本上我有两个 p 元素 当您将鼠标悬停在其中一个上时 p p 元素 出现下拉内容 问题是 我想要下拉菜单content 下拉菜单本身 的宽度match的宽度 p p 元素 这些图片可能应该描述我在说什么 https i stack img
  • React - 防止标签切换时焦点脱离模式

    我自己构建了一个反应模式 当我在模式打开时按 Tab 键时 焦点仍然转到背景页面 如何将焦点限制在模态框内的组件内 下面的逻辑应该是什么 onKeyPress e if e keyCode 9 e preventDefault logic
  • 阻止文本环绕图像

    我想阻止文本环绕图像 有没有什么方法可以在不使用的情况下做到这一点margin img margin bottom 2 5em strong img src https www google com images srpr logo11w
  • Chrome 自动填充上的预填充值在选择之前大小不同

    在我的应用程序上 我有多个表单 要求用户提供基本信息 姓名 电子邮件 地址等 在 Chrome 上 我们有很棒的自动填充功能 当查看这些表单之一并选择自动填充选项时 这些值将填充我之前保存的信息 但是 我遇到了问题 当我将鼠标悬停在 Chr
  • 需要设计8个盒子,排成两排

    如何使用bootstrap设计如下8个盒子 Please 忽略颜色每个盒子都会类似于名片 它们应该只有 8 个盒子 排成两排 With 大屏幕中右侧和左侧的特定边距 and 不 小屏幕中的边距 所以在平板电脑中应该是 2 在移动设备中应该是
  • 使用 CSS 将多个内联块居中并将最后一行向左对齐

    我想水平居中一些内联块 但同时让它们在最后一行左侧对齐 见下文 问题是我实现了这样的目标 http jsfiddle net 5JSAG http jsfiddle net 5JSAG 1 2 3
  • CSS - 将 div 与文本框右侧对齐

    div div style width 250px padding 20px 6px 6px 6px div div
  • 如何使用 webpack 2 分离 css 文件中的 less 文件?

    我可以编译页面上的 less通过 webpack2 但我无法将 less 文件编译成 CSS 文件 webpack config js var path require path var webpack require webpack va
  • 如何将浮动列表项居中?

    我的网站导航有需要居中的列表项 我处于浮动状态 以便可以在列表项上进行填充 将它们设置为内联似乎可以消除顶部和底部填充 div ul ul div
  • CSS3 resize 属性只允许增加 DIV 大小

    有一个resizeCSS3 中的属性可以应用于div e g http www impressivewebs com css3 resize http www impressivewebs com css3 resize 我正在构建一个丰富
  • CSS 底部边框悬停“抖动”

    我有一个导航栏 当您将鼠标悬停在导航按钮上时 我想给它一个橙色的底部边框 唯一的问题是 每当您悬停时 边框都会使内容 导航按钮 抖动 这是不应该的 另外 我的导航栏上已经有一个黑色的底部边框 因此无法更改它 HTML div ul li a
  • 如何在 Selenium 中使用 CSS 选择器查找非根元素的直接后代?

    我正在尝试重用找到的 WebElement table 下面来搜索它的后代和直系后代 table tbody tr td div foo div td tr tr td td tr tbody table table
  • Jquery - Fancybox - 后台页面移位问题

    Fancybox 加载良好 所有内容都按照我想要的方式打开 但问题发生在后台 可以看到 并且令人不安 当盒子加载并返回到盒子上的正常位置时 我的整个页面向右移动了 8 个像素关闭 我无法链接到该网站 因为它位于我们公司防火墙后面的开发服务器
  • CSS 字体不起作用

    我正在尝试向我的网站添加自定义字体 我尝试了很多事情但没有成功 这是我的CSS代码 font face font family myFirstFont src url ellis ttf body margin 0 padding 0 wi
  • 如何制作可扩展的文本框?

    我想制作一本以给定宽度 高度开始的教科书 然后 如果用户输入的内容超过给定的空间量 文本框就会向下扩展 我该怎么做呢 我使用 CSS 吗 当用户超过允许的行数时 基本文本框仅显示滚动条 如何使文本框将行数再扩展 5 行
  • Codemirror光标位置偏移

    我正在使用代码镜像在网页中显示 突出显示和编辑 xml 但我遇到了光标位置偏离插入位置的问题 因此 如果从闪烁光标所在的位置删除字符 则删除之前的字符您期望的那个会被删除 我假设它与我当前页面存在 css 冲突 因为它在我的页面之外运行良好
  • Chrome扩展程序自定义光标

    我构建了一个 Google Chrome 扩展程序 在网站中放置一些 IMG 标签 hover 上的此 img 标记必须显示自定义光标 该扩展使用 jQuery 作为其注入的核心脚本 我尝试了以下方法 1 var cursor url ch
  • 位置固定,无顶部和底部

    我发现了有趣的功能 但找不到它发生的原因 所以 我们有固定位置元素 它位于 body 下方 第一个元素有样式 firstEl width 100 height 200px background color green 第二个元素有 fixe

随机推荐