The vf-search component is a form component that can be used for for the front-end to search your site.
This is the default search component that can be used to search your site. When the viewport size is below 600px the vf-button replaces the text with an icon so that it can allow the input to use more space.
This is very much a work-in-progress prototype and not to be used.
To be used when searching pages, this container should sit below the vf-hero (and related vf-navigation where applicable). The code example shows that the vf-form is wrapped in a vf-container (this sectioning component has not been created, yet, but the base CSS is available as part of vf-search).
This shows how auto-suggest or autocomplete results should be displayed. There is no native HTML functionality for this and you will need to provide the JavaScript that is relevant to your project for it to work.
note: Version 2.0.0 of the vf-search has no maximum width and will fill the space of it's parent. Because of this it is recommended to make sure the component is not too wide by wrapping it in the embl-grid with the --centered-content variant. If you wish to use ths vf-search with vf-grid you will need to make use the vf-search component also has an appropraite .vf-u-grid__col--span class.
You can enable autofocus on the search element, but should only do so if most users intend to search on the page.
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<form action="#" class="vf-form vf-form--search vf-form--search--responsive | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input">
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"results" : true,
"responsive" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"results" : true,
"responsive" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<form action="#" class="vf-form vf-form--search vf-form--search--responsive | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input" aria-owns="vf-form--search__results-list">
<ul id="vf-form--search__results-list" class="vf-list | vf-form--search__results-list | vf-stack vf-stack--custom" aria-labelledby="searchitem">
<li id="vf-form--search__results-list--01" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--02" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--03" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--04" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--05" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
</ul>
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"mini" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"mini" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<form action="#" class="vf-form vf-form--search vf-form--search--mini | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input">
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text | vf-u-sr-only">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"mini" : true,
"results" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"mini" : true,
"results" : true,
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<form action="#" class="vf-form vf-form--search vf-form--search--mini | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input" aria-owns="vf-form--search__results-list">
<ul id="vf-form--search__results-list" class="vf-list | vf-form--search__results-list | vf-stack vf-stack--custom" aria-labelledby="searchitem">
<li id="vf-form--search__results-list--01" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--02" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--03" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--04" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--05" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
</ul>
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text | vf-u-sr-only">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"search__background" : "var(--vf-color--neutral--100)",
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"search__background" : "var(--vf-color--neutral--100)",
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<div class="vf-container vf-container--search | vf-u-fullbleed" style="--vf-container--search__background-color: var(--vf-color--neutral--100);">
<form action="#" class="vf-form vf-form--search vf-form--search--responsive | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input">
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
</div>
Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.
includeYou'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"results" : true,
"search__background" : "var(--vf-color--neutral--100)",
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",
}
%}
{% include "../path_to/vf-search/vf-search.njk" %}
renderThis approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.
{% render '@vf-search', {
"exampleMultiColumns" : "false",
"component-type" : "block",
"responsive" : true,
"results" : true,
"search__background" : "var(--vf-color--neutral--100)",
"search_action" : "#",
"search_autofocus" : false,
"search_button" : "Search",
"search_label" : "Search",
"search_placeholder" : "Enter your search terms",
"search_id" : "searchitem",
"search_value_default" : "",}
%}
<div class="vf-container vf-container--search | vf-u-fullbleed" style="--vf-container--search__background-color: var(--vf-color--neutral--100);">
<form action="#" class="vf-form vf-form--search vf-form--search--responsive | vf-sidebar vf-sidebar--end">
<div class="vf-sidebar__inner">
<div class="vf-form__item">
<label class="vf-form__label vf-u-sr-only | vf-search__label" for="searchitem">Search</label>
<input type="search" placeholder="Enter your search terms" id="searchitem" class="vf-form__input" aria-owns="vf-form--search__results-list">
<ul id="vf-form--search__results-list" class="vf-list | vf-form--search__results-list | vf-stack vf-stack--custom" aria-labelledby="searchitem">
<li id="vf-form--search__results-list--01" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--02" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--03" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--04" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
<li id="vf-form--search__results-list--05" class="vf-list__item" role="option">
abcdef ghijklm nopqr styuv
</li>
</ul>
</div>
<button type="submit" class="vf-search__button | vf-button vf-button--primary">
<span class="vf-button__text">Search</span>
<svg class="vf-icon vf-icon--search-btn | vf-button__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 140 140" width="140" height="140">
<g transform="matrix(5.833333333333333,0,0,5.833333333333333,0,0)">
<path d="M23.414,20.591l-4.645-4.645a10.256,10.256,0,1,0-2.828,2.829l4.645,4.644a2.025,2.025,0,0,0,2.828,0A2,2,0,0,0,23.414,20.591ZM10.25,3.005A7.25,7.25,0,1,1,3,10.255,7.258,7.258,0,0,1,10.25,3.005Z" fill="#FFFFFF" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path>
</g>
</svg>
</button>
</div>
</form>
</div>
This repository is distributed with npm. After installing npm and yarn, you can install with this command.
$ yarn add --dev @visual-framework/vf-search
The style files included are written in Sass. If you're using a VF-core project, you can import it like this:
@import "@visual-framework/vf-search/index.scss";
Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter
vf-form__item.--inline variant so it's responsive to the parent width.autofocus on search inputvf-u-sr-only as no longer needed
File system location: components/vf-search
Find an issue on this page? Propose a change or discuss it.