私はストライプで支払いを処理する簡単なウェブサイトを構築しています。私は私のスタイリングにBootstrapを使用しています。ストライプエレメントを使用して支払いフィールドを挿入すると、それらはブートストラップでスタイルされません。 Bootstrapのスタイリングをエレメントの支払いフィールドに適用するにはどうしたらいいですか?ストライプエレメントの入力をブートストラップでスタイルするにはどうすればよいですか?
答えて
もう少しドキュメントの周りに掘った後、私は https://stripe.com/docs/stripe.js#the-element-containerが言うことがわかった「あなたは あなたはそれがあなたのページの をしたかのように要素をマウントするコンテナのスタイルを設定する必要があります。」
私はフィールドは他のほとんどのブートストラップスタイルの入力フィールドのように見え、中に素子を搭載しています<div>
にブートストラップのform-control
クラスを追加することにより:
<div id="card-element" class="form-control"></div>
いくつかの理由について、フィールドの高さはdoesnの「tはかなり一致しますが、試行錯誤しながら、私はそれを を得た:
var stripe = Stripe('your_key');
var elements = stripe.elements();
var card = elements.create('card', { style:
{
base: {
lineHeight: '1.429'
}
}
});
card.mount('#card-element');
さてさて、私はStripe.js V2を使用していた、とセキュリティ上の脆弱性がに説明したので、私は、これを理解しなければなりませんでした私はStripeの技術サポートによって、Stripe.js v3の "Elements"に切り替える義務があると感じました。彼らが言ったことは、あなたのクレジットカードフォーム要素と同じページのJavaScriptが、慎重なクレジットカードデータの価値を得ることができたということでした。人が外部のスクリプトを引っ張っていた場合、これが起こる可能性があると思います。それが起こったに違いないと思うか、それとも気にしないでしょう。とにかく、これは私がStripe.js v3の要素をBootstrap 4の入力グループと一緒に使う方法です。完全な実例ですが、公開鍵を変更するだけです。
デフォルトのjQueryベースの例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Stripe.js v3 with Bootstrap 4 Test</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<style>
/* Blue outline on focus */
.StripeElement--focus {
border-color: #80BDFF;
outline:0;
box-shadow: 0 0 0 .2rem rgba(0,123,255,.25);
transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
/* Can't see what I type without this */
#card-number.form-control,
#card-cvc.form-control,
#card-exp.form-control {
display:inline-block;
}
</style>
</head>
<body>
<div class="container-fluid">
<h1 class="mt-5">Stripe.js v3 with Bootstrap 4 (beta) Test</h1>
<div id="card-errors" role="alert"></div>
<div class="card">
<div class="card-body">
<form id="payment-form">
<label for="name">Name on Card</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">A</span>
</div>
<input type="text" class="form-control" id="name">
<div class="input-group-append">
<span class="input-group-text">B</span>
</div>
</div>
<label for="card-number">Credit Card Number</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">C</span>
</div>
<span id="card-number" class="form-control">
<!-- Stripe Card Element -->
</span>
<div class="input-group-append">
<span class="input-group-text">D</span>
</div>
</div>
<label for="card-cvc">CVC Number</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">E</span>
</div>
<span id="card-cvc" class="form-control">
<!-- Stripe CVC Element -->
</span>
</div>
<label for="card-exp">Expiration</label>
<div class="input-group mb-2">
<span id="card-exp" class="form-control">
<!-- Stripe Card Expiry Element -->
</span>
<div class="input-group-append">
<span class="input-group-text">F</span>
</div>
</div>
<button id="payment-submit" class="btn btn-primary mt-1">Submit Payment</button>
</form>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://js.stripe.com/v3/"></script>
<script>
$(document).ready(function(){
// Create a Stripe client
var stripe = Stripe('pk_test_XxXxXxXxXxXxXxXxXxXxXxXx');
// Create an instance of Elements
var elements = stripe.elements();
// Try to match bootstrap 4 styling
var style = {
base: {
'lineHeight': '1.35',
'fontSize': '1.11rem',
'color': '#495057',
'fontFamily': 'apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'
}
};
// Card number
var card = elements.create('cardNumber', {
'placeholder': '',
'style': style
});
card.mount('#card-number');
// CVC
var cvc = elements.create('cardCvc', {
'placeholder': '',
'style': style
});
cvc.mount('#card-cvc');
// Card expiry
var exp = elements.create('cardExpiry', {
'placeholder': '',
'style': style
});
exp.mount('#card-exp');
// Submit
$('#payment-submit').on('click', function(e){
e.preventDefault();
var cardData = {
'name': $('#name').val()
};
stripe.createToken(card, cardData).then(function(result) {
console.log(result);
if(result.error && result.error.message){
alert(result.error.message);
}else{
alert(result.token.id);
}
});
});
});
</script>
</body>
</html>
は、私はAndroid上のFirefox、クロム、およびChromeでテストしました。うまく動作するようです。問題が発生した場合はお知らせください。
オプションVue.jsベースの例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Stripe.js v3 with Bootstrap 4 and Vue.js</title>
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet" href="https://unpkg.com/[email protected]/dist/bootstrap-vue.css"/>
<style>
/* This background color not essential for the example */
html, body {
background:#999;
}
/* Padding for Stripe Element containers */
.stripe-element-container {
padding-top: .55rem;
padding-bottom: .50rem;
}
/* Blue outline on focus */
.StripeElement--focus {
border-color: #80BDFF;
outline:0;
box-shadow: 0 0 0 .2rem rgba(0,123,255,.25);
transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
/* Can't see what I type without this */
#card-number.form-control,
#card-cvc.form-control,
#card-exp.form-control {
display:inline-block;
}
</style>
</head>
<body>
<div id="app">
<stripe-form inline-template>
<div class="container-fluid">
<div class="row">
<div class="col-md-4 offset-md-4 pt-5">
<div class="card">
<div class="card-header">
<h3 class="mb-0">Pay Now</h3>
</div>
<div class="card-body">
<div v-bind:class="{alert: activeError, 'alert-danger': activeError}" role="alert" v-html="errorText"></div>
<form>
<div class="form-group mb-4">
<label for="name">Name on Card</label>
<input type="text" class="form-control" v-model="ccName" />
</div>
<div class="form-group">
<label for="card-number">Credit Card Number</label>
<span id="card-number" class="form-control stripe-element-container">
<!-- Stripe Card Element -->
</span>
</div>
<div class="form-group">
<label for="card-cvc">CVC Number</label>
<span id="card-cvc" class="form-control stripe-element-container">
<!-- Stripe CVC Element -->
</span>
</div>
<div class="form-group">
<label for="card-exp">Expiration</label>
<span id="card-exp" class="form-control stripe-element-container">
<!-- Stripe Card Expiry Element -->
</span>
</div>
<button @click.prevent="paymentSubmit" class="btn btn-primary mt-1 float-right">Submit Payment</button>
</form>
</div>
</div>
</div>
</div>
</div>
</stripe-form>
<modal></modal>
</div>
<script src="https://unpkg.com/[email protected]/dist/vue.js"></script>
<script src="https://unpkg.com/[email protected]/dist/polyfill.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/bootstrap-vue.js"></script>
<script src="https://js.stripe.com/v3/"></script>
<script>
// Your Stripe public key
const stripePublicKey = 'pk_test_XxXxXxXxXxXxXxXxXxXxXxXx';
/**
* Class allows firing of events and
* listening of events between components
*/
window.Events = new class {
constructor(){
this.vue = new Vue();
}
fire(event, data = null){
this.vue.$emit(event, data);
}
listenFor(event, callback){
this.vue.$on(event, callback);
}
}
/**
* See: https://bootstrap-vue.js.org/docs/components/modal/
*/
Vue.component('modal', {
template: `
<div>
<b-modal ref="myModalRef" ok-only ok-title="Close" v-bind:title="title">
<p class="mb-0">{{ body }}</p>
</b-modal>
</div>
`,
data: function(){
return {
title: '',
body: ''
}
},
methods: {
showModal() {
this.$refs.myModalRef.show()
}
/* This not needed for this example
,
hideModal() {
this.$refs.myModalRef.hide()
}
*/
},
created(){
Events.listenFor('modalShow', (data) => {
this.title = data.title;
this.body = data.message;
this.showModal();
});
}
});
Vue.component('stripe-form', {
data: function(){
return {
activeError: false,
errorText: '',
ccName: '',
stripe: null,
card: null,
cvc: null,
exp: null
}
},
methods: {
paymentSubmit: function(){
let cardData = {
'name': this.ccName
};
// Ensure the name field is not empty
if(cardData.name.trim() == ''){
// Show an error
this.activeError = true;
this.errorText = '<b>Submission Error:</b><br />Name is required.';
// Abort !!
return;
}
this.stripe.createToken(this.card, cardData).then((result) => {
if(result.error && result.error.message){
// Show any errors
this.activeError = true;
this.errorText = '<b>Submission Error:</b><br />' + result.error.message;
}else{
/**
* Success message in modal.
* This is normally where you'd post to your server,
* and have it actually attempt the credit card transaction
* using the token ID that was just received.
*/
Events.fire('modalShow', {
'title': 'Success',
'message': result.token.id
});
// Clear the form
this.activeError = false;
this.errorText = '';
this.ccName = '';
// Stripe elements must be cleared in a special way
this.card.clear();
this.cvc.clear();
this.exp.clear();
}
});
}
},
mounted: function(){
// Create a Stripe client
this.stripe = Stripe(stripePublicKey);
// Create an instance of Elements
const elements = this.stripe.elements();
/**
* Try to match bootstrap 4 styling.
* --------------------------------
* fontSize was in rem units, but Stripe says that it should be in pixels.
*/
const style = {
base: {
'fontSize': '16px',
'color': '#495057',
'fontFamily': 'apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'
}
};
// Card number
this.card = elements.create('cardNumber', {
'placeholder': '',
'style': style
});
this.card.mount('#card-number');
// CVC
this.cvc = elements.create('cardCvc', {
'placeholder': '',
'style': style
});
this.cvc.mount('#card-cvc');
// Card expiry
this.exp = elements.create('cardExpiry', {
'placeholder': '',
'style': style
});
this.exp.mount('#card-exp');
}
});
new Vue({ el: '#app' });
</script>
</body>
</html>
これは、例えば、いくつかの仕事から利益を得ることができるが、あなたが始めるのに役立つかもしれVue.js。
これは私にとって素晴らしいですね!あなたは間違いなく私が見逃したいくつかのスタイルをキャッチしました。 – michael
- 1. 通常の入力ボックスに用紙入力をスタイルするにはどうすればいいですか?
- 2. ブートストラップ3のフォームグループを使って入力グループを入力するにはどうすればいいですか?
- 3. IE8にスタイルを挿入するにはどうすればよいですか?
- 4. ブートストラップのボタングループをフォームへのラジオスタイル入力にするにはどうすればよいですか?
- 5. カスタムコンポーネントの外に用紙入力コンテナ(ポリマーミックスイン)スタイルを設定するにはどうすればよいですか?
- 6. ブートストラップとCSSのフォームにクリア入力ボタンを追加するにはどうすればよいですか?
- 7. onclick入力タイプボタンに異なるスタイルを適用するにはどうすればよいですか?
- 8. CSSを使用してアップロード入力のスタイルを設定するにはどうすればよいですか?
- 9. 反応テーブルフィルタ入力フィールドのスタイルを設定するにはどうすればよいですか?
- 10. jQueryで入力をブロックするにはどうすればよいですか?
- 11. ブートストラップでスクロールバーのスタイルを変更するにはどうすればよいですか?
- 12. ライブ入力でキーボード入力を受け入れるにはどうすればよいですか?
- 13. カレンダーでHTMLの入力テキストボックスに日付を入力するにはどうすればよいですか?
- 14. データベースに値を入力するにはどうすればよいですか?
- 15. JSON.parseにオブジェクトリテラルを入力するにはどうすればよいですか?
- 16. ビジュアルスタジオコードにセミコロンを入力するにはどうすればよいですか?
- 17. ドロップダウンリストにデータを入力するにはどうすればよいですか?
- 18. jQueryでテキストを入力値と入力値に変更するにはどうすればよいですか?
- 19. Javascript:入力を変更するにはどうすればよいですか?
- 20. 入力フィールドをリセットするにはどうすればよいですか? jQuery
- 21. 入力をインポートするにはどうすればよいですか?
- 22. htmlに「:after」と入力するにはどうすればよいですか?
- 23. mongoosasticに入力するにはどうすればよいですか?
- 24. ブートストラップで、イメージをドロップダウンにするにはどうすればよいですか?
- 25. 入力スタイルをタグとまったく同じにするにはどうすればいいですか?
- 26. ユーザーの入力時に入力のクラスを変更するにはどうすればよいですか?
- 27. ブートストラップの選択ドロップダウンを入力ボックスに合わせるにはどうすればいいですか?
- 28. サーブレットでフォーム入力がクリアされないようにするにはどうすればよいですか?
- 29. スクリプトへの入力を促すにはどうすればよいですか?
- 30. JSpinnerのキーボード入力とマウス入力を無効にするにはどうすればよいですか?
これは当てはまりますが、要素がフォーカスされているときに境界線の色を適用する必要があります。また、ブートストラップ4ベータ版を使用していて入力グループを使用しようとしている場合は、エレメントCSSを 'display:flex'ではなく' display:block'に変更する必要があります。私はこれの実証的なデモを持っています...しかし、それはあなたの質問に対する答えではありません...そうでない限り。 –
大きなポイント!それは答えのように聞こえます:)私はデモを見るのが大好きです。 – michael