如何根据视口大小更改条纹卡元素的格式

Con*_*tin 2 javascript css iframe stripe-payments

我正在构建一个使用 stripe 进行支付的自适应网站,包括 Stripe card-element,它用于接受信用卡付款。

当然,随着视口大小的变化,段落字体大小也会发生变化。card-element对于我正在创建的Stripe 来说也是如此var card = elements.create('card')。Stripe 卡元素是一个 iframe,因为支付数据直接发送到 Stripe 的服务器,而不是我的服务器,这意味着使用相对字体大小em不起作用,媒体查询也不起作用。当然,因为这个 iframe 根本不关心我的 CSS,所以stripe.elements.create当我实例化卡片元素时,当前会传递所有格式指令。

如何使 Stripe 元素的样式属性(在本例中为字体大小)自适应?

我能想到的唯一方法是在 JS 中检查视口大小,并在视口大小发生变化时重新实例化元素;但这看起来很丑陋而且矫枉过正。

var card = stripe.elements.create('card', {
  hidePostalCode: true,
  style: {
    base: {
      fontSize: "1em"
    }
  }
});

card.mount('#card-element');
Run Code Online (Sandbox Code Playgroud)
@media only screen and (min-width: 992px) {
  p {
    font-size: 9pt;
    }
  #card-element {
    font-size: 9pt; // Does not work.
    }
}

@media only screen and (min-width: 1200px) {
  p {
    font-size: 12pt;
    }
  #card-element {
    font-size: 12pt; // Does not work.
    }
}
Run Code Online (Sandbox Code Playgroud)
<html>

<head>
  <script src="https://js.stripe.com/v3"></script>
</head>

<body>
  <p>Some text preceding the card element</p>
  <div id="card-element"></div>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

Con*_*tin 5

card元素有一个update方法,可用于向其传递与首次创建它时相同的选项。通过使用带有这些方法的事件侦听器update,可以按照与第一次定义的方式相同的方式更改字体大小。

window.addEventListener('resize', function(event) {
  if (window.innerWidth <= 320) {
    card.update({style: {base: {fontSize: '13px'}}});
  } else {
    card.update({style: {base: {fontSize: '16px'}}});
  }
});
Run Code Online (Sandbox Code Playgroud)

来源: https: //stripe.com/docs/stripe-js/reference#other-methods