对于奇数像素宽度,变换比例无法正确工作

2023-11-27

我正在尝试缩放 div,但将内部元素保持在相同的位置 and 相同尺寸。为此,我使用transform: scale(value)在包装纸上和transform: scale(1/value)在内部 div 上。

问题是,当我改变比例时,内部 div 会发生变化。仅当包装器的宽度/高度为奇数或不完整时才会发生这种情况。对于均匀宽度/高度的包装纸来说,这种情况不会发生。

我的目标是让包装器的许多子元素与包装器一起缩放,但只有一个不这样做。

查看此示例以了解实际问题(将鼠标悬停在比例上)。

示例为no issue,内部元素保持固定在比例上(容器的高度和宽度均匀):

https://jsfiddle.net/o16rau6u/5/

.wrapper {
  width: 200px;
  height: 200px;
  background-color: blue;
  position: relative;
}

.bg {
  width: 20px;
  height: 20px;
  display: inline-block;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -10px;
  margin-left: -10px;
  background-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Wiktionary_small.svg/350px-Wiktionary_small.svg.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;
}

.wrapper:hover {
  transform: scale(2);
}

.wrapper:hover .bg {
  transform: scale(0.5);
}
<div id="wrapper" class="wrapper">
  <div id="bg" class="bg"></div>
</div>

示例为issue,内部元素按比例移动一点(容器的高度和宽度是奇数):

https://jsfiddle.net/o16rau6u/6/

.wrapper {
  width: 201px;
  height: 201px;
  background-color: blue;
  position: relative;
}

.bg {
  width: 20px;
  height: 20px;
  display: inline-block;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -10px;
  margin-left: -10px;
  background-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Wiktionary_small.svg/350px-Wiktionary_small.svg.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;
}

.wrapper:hover {
  transform: scale(2);
}

.wrapper:hover .bg {
  transform: scale(0.5);
}
<div id="wrapper" class="wrapper">
  <div id="bg" class="bg"></div>
</div>

无论容器的大小如何,如何解决此问题并避免我的元素按比例移动?

PS :上面使用的示例是一个非常简化的示例,用于显示问题,它不是所需的输出或使用的代码。因此,我们并不是在寻找另一种方法来实现上述相同的行为,因为这很容易做到


一开始我认为这与浏览器完成的计算和一些舍入有关,但这似乎是错误。我做了很多测试,无论我使用的秤的值如何,它总是失败odd value.

这是一个简单的例子,仅scaleX

body:after {
  content: "";
  position: absolute;
  z-index: 999;
  top: 0;
  bottom: -200%;
  width: 2px;
  right: 50%;
  margin-right: -1px;
  background: rgba(0, 0, 0, 0.5);
}

.box {
  width: 200px;
  height: 100px;
  margin: 50px auto;
  background: blue;
  position: relative;
}

.inner {
  height: 20px;
  width: 20px;
  background: red;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -10px;
  text-align: center;
  color: #fff;
  margin-top: -10px;
}
<div class="box">
  <div class="inner">A</div>
</div>

<div class="box" style="transform:scaleX(2)">
  <div class="inner" style="transform:scaleX(0.5)">A</div>
</div>

<div class="box" style="width:201px;transform:scaleX(2)">
  <div class="inner" style="transform:scaleX(0.5)">A</div>
</div>

如下所示,浏览器似乎向内部 div 添加了额外的像素,但是如果您仔细观察,内部 div 的大小是正确的,但是正在翻译中向右 1 像素。因此,开发工具的悬停块位置正确,但元素本身位置不正确!所以看起来浏览器正确地计算了位置但画错了。

enter image description here

如果我们简单地在容器上应用缩放,也会出现同样的问题。所以这不是因为内部元素的规模:

body:after {
  content: "";
  position: absolute;
  z-index: 999;
  top: 0;
  bottom: -200%;
  width: 2px;
  right: 50%;
  margin-right: -1px;
  background: rgba(0, 0, 0, 0.5);
}

.box {
  width: 200px;
  height: 100px;
  margin: 50px auto;
  background: blue;
  position: relative;
}

.inner {
  height: 20px;
  width: 20px;
  background: red;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -10px;
  text-align: center;
  color: #fff;
  margin-top: -10px;
}
<div class="box" style="transform:scaleX(2)">
  <div class="inner">A</div>
</div>

<div class="box" style="width:201px;transform:scaleX(2)">
  <div class="inner">A</div>
</div>

enter image description here


即使我们使用带有比例的浮点值,我们可以说存在一些路由和复杂的计算,我们也有偶数值的正确输出和奇数值的问题:

比例(1.25)和比例(1/1.25)的示例:

body:after {
  content: "";
  position: absolute;
  z-index: 999;
  top: 0;
  bottom: -200%;
  width: 2px;
  right: 50%;
  margin-right: -1px;
  background: rgba(0, 0, 0, 0.5);
}

.box {
  width: 200px;
  height: 100px;
  margin: 50px auto;
  background: blue;
  position: relative;
}

.inner {
  height: 20px;
  width: 20px;
  background: red;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -10px;
  text-align: center;
  color: #fff;
  margin-top: -10px;
}
<div class="box">
  <div class="inner">A</div>
</div>

<div class="box" style="transform:scaleX(1.25)">
  <div class="inner" style="transform:scaleX(0.8)">A</div>
</div>

<div class="box" style="width:201px;transform:scaleX(1.25)">
  <div class="inner" style="transform:scaleX(0.8)">A</div>
</div>

比例(1.33)和比例(1/1.33)的示例:

body:after {
  content: "";
  position: absolute;
  z-index: 999;
  top: 0;
  bottom: -200%;
  width: 2px;
  right: 50%;
  margin-right: -1px;
  background: rgba(0, 0, 0, 0.5);
}

.box {
  width: 200px;
  height: 100px;
  margin: 50px auto;
  background: blue;
  position: relative;
}

.inner {
  height: 20px;
  width: 20px;
  background: red;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -10px;
  text-align: center;
  color: #fff;
  margin-top: -10px;
}
<div class="box">
  <div class="inner">A</div>
</div>

<div class="box" style="transform:scaleX(1.33)">
  <div class="inner" style="transform:scaleX(calc(1 / 1.33))">A</div>
</div>

<div class="box" style="width:201px;transform:scaleX(1.33)">
  <div class="inner" style="transform:scaleX(calc(1 / 1.33))">A</div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于奇数像素宽度,变换比例无法正确工作 的相关文章

  • 如何在jqplot中显示饼图之外的标签?

    Jqplot 有如下图表 jqplot 图表 http www jqplot com tests pie donut charts php 我的问题是如何在 a 之外显示标签jqplot chart像下面这样high chart 高图表可以
  • 输入类型=图像 - onclick(),将触发其事件,但在 jquery 中的函数上表现不佳

    我认为这可能是两篇文章 2个问题 所以如果你对此发表评论 我会将它们分开 主要问题实际上是 我怎样才能为按钮设置图像背景 简单且正确 我想现在我可以确定这些事实了 因为我在将图像设置为按钮背景时遇到了 小 问题 我想 好吧 如果很难设置的话
  • 使用画布仅删除文本而不删除图像

    我正在尝试删除画布元素中的文本 而不丢失Background Image of the Canvas Element 我想我需要保存Imagesrc并把它还给Canvas Element之后clearRect 但我不知道该怎么做 我希望有人
  • 如何在文本区域中使用除“文本插入符号”之外的透明字体?

    我有一个简单的文本区域 我需要制作透明字母 同时允许文本插入符可见 当我应用以下规则时 我会得到隐形插入符 textarea background transparent opacity 0 当我键入不可见文本时 我需要看到文本插入符移动
  • 我的 CSS 未在 Internet Explorer 11 和 Firefox 中加载!仅适用于 Chrome

    我正在创建一个简单的网页 我的 CSS 只能在 Chrome 中使用 它在 Firefox 和 IE11 中都不起作用 这是我的 HTML h1 b u Adding a new Visitor u b h1 br div class wr
  • 从 MVC 中的 FormCollection 获取选定的下拉列表值

    我有一个使用 MVC 发布到操作的表单 我想从操作中的 FormCollection 中提取选定的下拉列表项 我该怎么做 我的 HTML 表单
  • JSF 2.1 中的 HTML 4 <按钮>

    我想使用以下命令 The JSF
  • 使用 CSS 自定义字体?

    我见过一些在其网站上使用自定义字体的新网站 除了常规的 Arial Tahoma 等 他们支持大量的浏览器 如何做到这一点 同时 如果可能的话 还会阻止人们免费下载该字体 一般来说 您可以使用自定义字体 font face在你的 CSS 中
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 如何通过单击图像预览上的“x”从文件输入中删除图像?

    我目前有一个文件输入 一旦用户上传图像 就会显示图像预览 在图像预览上 有一个 x 可以从列表中删除图像预览 单击此 x 后 有什么方法可以从输入中的文件集中删除图像吗
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • 为什么需要重置浏览器?

    好吧 我知道这可能不是最好的标题why我们需要重置浏览器 因为浏览器有不同的默认设置 我的问题太长 无法放入标题中 如果每个人 90 的时间都需要使用重置样式表 为什么浏览器需要设置默认样式 无论如何我们都会删除它们 对吗 因为某些规则默认
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 我可以停止 :hover 应用于元素吗?

    假设我有一些 CSS button hover font weight bold 我怎样才能防止 hover随意应用样式 我的目标用例是当元素被禁用时 例如 使用这个 HTML
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 为范围旋钮 ionic-range 添加边框颜色

    我正在使用离子范围添加范围滑块 并想向范围旋钮添加边框 由于它的 ionic4 和范围旋钮是 Shadow dom 的一部分 我无法使用范围旋钮的 border 属性直接更改边框 我已附上我想要实现的图像 范围旋钮周围有白色边框 现有属性只
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react

随机推荐

  • ViewPager2 无法动态添加删除片段

    在索引处删除 添加片段会导致 Viewpager2 中出现意外行为 这是不可能的ViewPager但预计将与Viewpager2 它会导致重复片段和不同步TabLayout 这是一个演示项目重现了这个问题 有一个切换按钮 可以删除片段并将其
  • Keras 的 dropout 实现正确吗?

    The KerasDropout参考的实施这张纸 以下摘录自该论文 这个想法是在测试时使用单个神经网络而不丢失 该网络的权重是经过训练的按比例缩小的版本 重量 如果在训练期间以概率 p 保留一个单元 则 该单元的输出重量在测试时乘以 p 为
  • git:当前分支和分支创建之间的差异

    想象一下 我三天前创建了分支 B 这是我目前正在工作的分支 现在我想知道自创建分支以来发生了什么变化 X 这给出了 B 和 X 之间的差异 如图中的虚线 git diff A 上面的命令很方便 因为它很短而且我不需要记住 X 但是 我超级懒
  • Caffe 训练无需测试

    我在用Caffe在已知图像数据库上训练 AlexNet 我正在进行基准测试并希望排除测试阶段 这里是solver prototxt对于亚历克斯网络 net models bvlc alexnet train val prototxt tes
  • 从 AppDelegate 呈现特定的视图控制器

    每次我的应用程序处于活动状态时 我都尝试呈现一个视图控制器 密码请求类型视图 输入正确的密码后 它应该从堆栈中弹出 我尝试推送的密码视图不是初始视图控制器 因此我无法从 AppDelegate 的 applicationDidBecomeA
  • 使用 cmd.exe 时如何处理引号字符

    我正在尝试这样做 cmd exe C C Program Files Somewhere SomeProgram exe gt C temp Folder Containing Spaces SomeProgram out 但是 我遇到了与
  • 在星型模式中,事实和维度之间的外键约束是否必要?

    我第一次接触数据仓库 我想知道事实和维度之间是否有必要有外键约束 没有它们有什么主要缺点吗 我目前正在使用关系星型模式 在传统应用程序中 我习惯了它们 但我开始怀疑在这种情况下是否需要它们 我目前在 SQL Server 2005 环境中工
  • 加载 32 位 DLL 时出现 BadImageFormatException,目标为 x86

    我有一个 DLL FreeType 它肯定是 32 位的 标头 IMAGE FILE MACHINE I386 我想通过 DllImport 从 C 代码中使用它 我的应用程序的目标是x86 IntPtr Size是4 进程是32位 但我得
  • php-excel-reader - UTF-8 问题

    我在用着php excel reader2 21 用于将 XLS 文件转换为 CSV 我编写了一个简单的脚本来执行此操作 但我在使用 unicode 字符时遇到了一些问题 它不会从某些单元格返回值 例如 它不存在单元格内容问题cen k p
  • 是否可以在没有 Javascript 的情况下进行客户端验证

    确实很简单的问题 可以冒险猜测 但只需要确定 只需要一个是 否的答案 因为似乎无法在任何地方澄清 原因 手机网页 所有移动浏览器对 javascript 的支持都是 粗略的 因此完全放弃了任何 javascript 并且想知道是否有任何替代
  • ASP.NET 异常:无法解析远程名称:“apiconnector.com”

    正如标题所示 我从 ASP NET 页面收到以下异常 无法解析远程名称 apiconnector com 不过 我可以从浏览器导航到该地址 因此我知道它是可以访问的 为什么 ASP NET 无法导航到该地址 编辑 我到底是如何 导航 的 好
  • PHP 脚本在 HTTP 请求结束后还能继续运行吗?

    如何编写即使在刷新一些文本并结束 HTTP 请求后仍能继续运行的 PHP 脚本 这可能吗 永久运行 PHP 应用程序或直到 php 终止 ignore user abort true set time limit 0
  • 如何在 WAMP 中启用内存缓存

    如何在WAMP中安装memcache 我没有找到任何 php memchephp ini 现在我该怎么做 Ryan 感谢您的步骤 现在在 WAMP 中启用了 memcache 我也在 PHPINFO 中进行了交叉检查 内存缓存正在显示 我已
  • Express.js:如何在 req.param 中制作 app.get('/[:userId]i'..) ?

    我使用的是nodejs 0 8 21 和express 3 1 0 我需要阅读userId来自像这样的网址http mysite com 39i 它的意思是userId 39 怎么做 谢谢 样本 app get userId i funct
  • JCrop,如何清除所有div宽度/高度标记?

    我有一个个人资料图片系统 允许使用 jCrop 进行图像裁剪 我注意到 如果用户重复该过程几次 裁剪尺寸将无法正确计算 因为之前的图像仍然存在 我已经尝试过 API 中的 destroy 方法 但这并没有清除来自 API 的图像源 jcro
  • 保存带有背景图像的画布

    我有一个画布的背景图像 并向画布添加了一些基本元素 现在我想保存画布 png 以及画布样式的背景图像 Tried var canvas document getElementById mycanvas var img canvas toDa
  • Firestore 安全规则:request.time“对象上未定义”

    我正在尝试创建一个基于的安全规则请求时间如上的示例所示Angular Firebase 网站 我的功能是 function isThrottled return request time lt resource data lastUpdat
  • 无法加载文件或程序集“System.Net.Http,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”

    我已将项目复制到仅安装了 Visual Studio 2015 Community 和 SQL Server 2016 Express 的干净 Windows 10 计算机 除了随 Windows 10 和 VS2015 或 SQL Ser
  • PLT 方案中的循环

    如何在 plt scheme 中实现循环 就像在 java 中一样 for int i 0 i lt 10 for int j 0 j lt 3 System out println j j System out println i i 您
  • 对于奇数像素宽度,变换比例无法正确工作

    我正在尝试缩放 div 但将内部元素保持在相同的位置 and 相同尺寸 为此 我使用transform scale value 在包装纸上和transform scale 1 value 在内部 div 上 问题是 当我改变比例时 内部 d