--- layout: layouts/page.njk title: Select description: Displays a list of options for the user to pick from—triggered by a button. toc: - label: Usage id: usage children: - label: HTML id: usage-html - label: HTML + JavaScript id: usage-html-js children: - label: "Step 1: Include the JavaScript files" id: usage-html-js-1 - label: "Step 2: Add your select HTML" id: usage-html-js-2 - label: HTML structure id: usage-html-js-3 - label: Jinja and Nunjucks id: usage-macro - label: Examples id: examples children: - label: Scrollable id: example-scrollable - label: Disabled id: example-disabled - label: With icon id: example-with-icon --- {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} {% from "select.njk" import select %} {% set code_native %}{% endset %} {{ code_preview("select-native", code_native) }} {% set code_html %} {{ select( trigger_attrs={"class": "w-[180px]"}, is_combobox=true, items=[ { type: "group", label: "Fruits", items: [ { type: "item", value: "apple", label: "Apple" }, { type: "item", value: "banana", label: "Banana" }, { type: "item", value: "blueberry", label: "Blueberry" }, { type: "item", value: "pineapple", label: "Grapes" }, { type: "item", value: "pineapple", label: "Pineapple" } ] } ] ) }} {% endset %} {% set code_script %} {% endset %} {{ code_preview("select", code_script | prettyHtml ~ code_html | prettyHtml) }}
If you use a <select> element, just add the select class to it or have a parent with the form class (read more about form).
You can either include the JavaScript file for all the components, or just the one for this component by adding this to the <head> of your page:
<div class="select"><button type="button" popovertarget="{ POPOVER_ID }">The trigger to open the popover, can also have the following attributes:
id="{BUTTON_ID}": linked to by the aria-labelledby attribute of the listbox.aria-haspopup="listbox": indicates that the button opens a listbox.aria-controls="{ LISTBOX_ID }": points to the listbox's id.aria-expanded="false": tracks the popover's state.aria-activedescendant="{ OPTION_ID }": points to the active option's id.<div popover class="popover" id="{ POPOVER_ID }">data-side and data-align attributes.
<div role="listbox">id="{ LISTBOX_ID }": refered to by the aria-controls attribute of the trigger.aria-labelledby="{ BUTTON_ID }": linked to by the button's id attribute.<div role="option" data-value="{ VALUE }">aria-activedescendant attribute on the trigger.<hr role="separator"> Optional<div role="group"> Optionalaria-labelledby attribute to link to a heading.<span role="heading">id attribute if you use the aria-labelledby attribute on the group.<input type="hidden" name="{ NAME }" value="{ VALUE }"> OptionalYou can use the select() Nunjucks or Jinja macro for this component.