【问题标题】:Strange userAgent issue causing element displaced导致元素移位的奇怪 userAgent 问题
【发布时间】:2021-07-31 08:06:48
【问题描述】:

这一定是一个非常简单的 HTML/CSS 跨浏览器问题,但我就是不知道为什么。

一个live fiddle page对我来说更容易解释情况:https://jsfiddle.net/9gyp18f4/1,我稍后也会把代码放在这里。所以问题是,当你用 safari 打开这个 fiddle 时,第二个按钮如下所示。

我只有一个小屏幕的 Macbook air,在与这个问题作斗争数小时后,我的大脑和眼睛都让我失望了。也许这里有人会很好地告诉我到底是什么导致了这个问题。

TL;DR 如果有人想知道这个小提琴中的代码在做什么 - 这是一个自定义的 Addthis 的“内联工具”,他们的微信按钮不能正常工作,所以我通过添加一个类来替换它。我使用requestAnimationFrame 确保在实际加载按钮的 HTML 之后添加类,因为它是由 Addthis 的代码加载的。

<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5eaa206a3b043d9d"></script>

HTML 很简单

<div class="addthis_inline_share_toolbox"></div>

在 Addthis 的 JS 代码之前将实际按钮放入其中。按钮的实际 HTML 有点臃肿,我把 facebook 放在这里

<a role="button" tabindex="0" class="at-icon-wrapper at-share-btn at-svc-facebook" style="background-color: rgb(59, 89, 152); border-radius: 4px;"><span class="at4-visually-hidden">Share to Facebook</span><span class="at-icon-wrapper"
    style="line-height: 32px; height: 32px; width: 32px;"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" version="1.1" role="img" aria-labelledby="at-svg-facebook-4"
      style="fill: rgb(255, 255, 255); width: 32px; height: 32px;" class="at-icon at-icon-facebook">
      <title id="at-svg-facebook-4">Facebook</title>
      <g>
        <path d="M22 5.16c-.406-.054-1.806-.16-3.43-.16-3.4 0-5.733 1.825-5.733 5.17v2.882H9v3.913h3.837V27h4.604V16.965h3.823l.587-3.913h-4.41v-2.5c0-1.123.347-1.903 2.198-1.903H22V5.16z" fill-rule="evenodd"></path>
      </g>
    </svg></span></a>

要使微信按钮按我的意愿工作,我必须删除微信按钮的at-share-btn 类,否则单击此按钮将触发 Addthis 的事件而不是我的。这导致按钮的样式与其他按钮的样式有些不同,因此我放置了一些 CSS 以使其样式与其他按钮对齐。

.wechatNativeShare{
  background:green;
  display:inline-block
}

#atstbx .wechatNativeShare{
  margin:0 2px 5px;padding:5px
}

但是,在进行这些自定义之后,该按钮将无法在 Safari 上运行。我相信这个问题与我的自定义无关,除了用我的(.wechatNativeShare)替换它的原始类(at-share-btn)。听起来是一个非常简单的问题,对吧?但我只是找不到导致问题的原因并解决它。有人请帮助我。谢谢!

【问题讨论】:

  • 您是否只是想阻止按下微信按钮时启动标准功能,并启动您的功能?
  • 是的。我知道有更好的方法来做到这一点。但我对这个跨浏览器问题有点着迷,不能放手。
  • 您可以将at-share-btn 类中的所有样式复制到.wechatNativeShare 类的css + 悬停行为。这是最简单的方法。

标签: html css cross-browser addthis


【解决方案1】:

您可以轻松使用vertical-align: top;!这应该适用于所有浏览器。

sn-p 只显示一些错误,所以这里是代码:

HTML:

<div class="addthis_inline_share_toolbox"></div>

CSS:

.wechatNativeShare{
  background:green;
  display:inline-block;
  vertical-align: top; /* This is what i added */
}

#atstbx .wechatNativeShare{
  margin:0 2px 5px;padding:5px
}

JavaScript:

function addWechatNativeShare(){

  let $ = jQuery;
    
  if ($('#atstbx .at-svc-wechat').length === 0) {
    console.log($('#atstbx .at-svc-wechat').length);
    requestAnimationFrame(addWechatNativeShare);
  }
  $('#atstbx .at-svc-wechat').removeClass('at-share-btn').addClass('wechatNativeShare');
}

requestAnimationFrame(addWechatNativeShare);

【讨论】:

  • 谢谢它的工作。但是你能告诉我 Safari 处理不同的 CSS 规则到底是什么吗?
  • 这主要是由于display: inline-block;。当我编码和使用display: inline-block; 时,我通常也会遇到问题,因为其中一个元素位于不应该出现的位置。因此我使用vertical-alignment。在您的示例中,我不明白为什么它在 Safari 中不起作用。这是一个在任何浏览器上都不起作用的问题的类似示例(也使用 vertical-align 修复):stackoverflow.com/questions/67399741/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多