# Interaction >> Button >> Features ||20 ```js script import { html } from '@lion/core'; import '@lion/button/define'; ``` ## With click handler ```js preview-story export const handler = () => html` Click | Space | Enter me and see log `; ``` ## Disabled button ```js preview-story export const disabled = () => html`Disabled`; ``` ## Minimum click area ```js preview-story export const minimumClickArea = () => html` xs`; ``` ## Usage with native form Supports the following use cases: - Submit on button click - Reset native form fields when using type="reset" - Submit on button enter or space keypress - Submit on enter keypress inside an input ```js preview-story export const withinForm = () => html`
{ ev.preventDefault(); console.log('submit handler', ev.target); }} > console.log('click handler', ev.target)}>Submit
`; ``` Important notes: - A (lion)-button of type submit is mandatory for the last use case, if you have multiple inputs. This is native behavior. - `@click` on `` and `@submit` on `
` are triggered by these use cases. We strongly encourage you to listen to the submit handler if your goal is to do something on form-submit. - To prevent form submission full page reloads, add a **submit handler on the form** `@submit` with `event.preventDefault()`. Adding it on the `` is not enough. ## Considerations ### Why a Web Component? There are multiple reasons why we used a Web Component as opposed to a CSS component. - **Target size**: The minimum target size is 40 pixels, which makes even the small buttons easy to activate. A container element was needed to make this size possible. - **Advanced styling**: There are advanced styling options regarding icons in buttons, where it is a lot more maintainable to handle icons in our button using slots. An example is that a sticky icon-only buttons may looks different from buttons which have both icons and text. - **Native form integration**: The lion button works with native `` submission, and even implicit form submission on-enter. A lot of delegation logic had to be created for this to work. ### Event target We want to ensure that the event target returned to the user is ``, not `button`. Therefore, simply delegating the click to the native button immediately, is not desired. Instead, we catch the click event in the ``, and ensure delegation inside of there. ### Flashing a native button click as a direct child of form By delegating the `click()` to the native button, it will bubble back up to `` which would cause duplicate actions. We have to simulate the full `.click()` however, otherwise form submission is not triggered. So this bubbling cannot be prevented. Therefore, on click, we flash a `