Hosted Fields Details and Examples
Styling
Hosted Fields give you complete control over your form style and layout.
The layout and outer styling are handled the same way you would style the rest of your page.
However, for security reasons, the input field text is styled via JavaScript as part of the field configuration. Only a subset of CSS properties are supported for styling the input field text. See library reference for a complete list of supported CSS properties.
Combining these two ways of styling will allow you to completely customise your form UI. Let's take a look at how this could be implemented.
Style Object
Input text styles are defined as part of the JavaScript configuration. The syntax is similar to regular CSS. See style object reference for further details.
// Define input styles
var styles = {
// Base input styles
input: {
color: '#111827',
'font-size': '14px',
// Custom web fonts are not supported. Only system installed fonts.
'font-family': 'system-ui, -apple-system, BlinkMacSystemFont',
},
// Placeholder style
'::placeholder': {
color: '#757575',
},
// Style for different states
'.invalid': {
color: 'red',
},
'.valid': {
color: 'green'
},
':focus': {
color: '#111827'
},
// Media queries
// Note that these are based on the iframe size, not the root window.
'@media screen and (min-width: 400px)': {
input: {
'font-size': '16px',
},
},
};
// Create hosted field
var hostedFields = assembly.hostedFields();
var cardName = hostedFields.create('cardName', { styles });
cardName.mount('#card-name-field');
<div id="card-name-field" class="hosted-field"></div>
Container Styles
The input container styles can be defined however you usually author CSS. The Hosted Fields library allows you to style the field container based on the field state, by dynamically applying CSS classes to the container element.
Usually, input elements can calculate their height based on their other styles, however with Hosted Fields you need to explicitly set the height value.
.hosted-field {
height: 32px;
padding: 0 12px;
margin-bottom: 10px;
border: 1px solid #bdbdbd;
}
// Style container based on field state
.hosted-field-invalid {
border-color: red;
}
.hosted-field-valid {
border-color: green;
}
.hosted-field-focus {
border-color: purple;
}
Events and Validation
You can communicate with your Hosted Fields by listening to an event. This allows you to update your UI based on the field state. Hosted Fields are validated as the user input changes. The change
event returns an object that describes the state of the field, along with any errors. See library reference for complete details about events.
Here's an example of how you could display errors as the user types, by listening to the change
event:
<div id="card-number-field"></div>
<div class="error"></div>
var hostedFields = assembly.hostedFields();
var cardNumber = hostedFields.create('cardNumber');
cardNumber.mount('#card-number-field');
var errorElement = document.querySelector('.error');
cardNumber.on('change', function(event) {
if (event.error) {
errorElement.innerText = event.error.message;
} else {
errorElement.innerText = '';
}
});
Examples
Here are some examples of forms created with Hosted Fields. The examples are hosted on CodePen so you can view the code and try out customising them for yourself.
Card example
This is an example of a card capture form with some basic styling.
Bank account example
This is an example of a bank account capture form with some basic styling.
Card example - form style based on card brand
This is an example of a card capture form with richer control over style and layout. Furthermore, it illustrates further customisation where the form style will change based on the card brand identified. Try inputting sample card numbers in this form, starting with:
- 41 (Visa)
- 51 (Mastercard)
- 34 (Amex)
Example integrations with popular frameworks
Updated about 3 years ago