Highlight
Highlight allows you to highlight substrings of a text.
Import#
import { Highlight } from '@chakra-ui/react'
Usage#
Render the main string as children of the Highlight component, then pass the
word(s) you want to highlight to the query
prop. Use the style
prop to
define the styles for the highlighted parts.
Highlight a word#
<Highlight query='spotlight' styles={{ px: '1', py: '1', bg: 'orange.100' }}>With the Highlight component, you can spotlight words.</Highlight>
Usage with Heading#
The Highlight component can be used within any of the typography components. Here's an example of how to use it within Heading
<Heading lineHeight='tall'><Highlightquery='spotlight'styles={{ px: '2', py: '1', rounded: 'full', bg: 'red.100' }}>With the Highlight component, you can spotlight words.</Highlight></Heading>
Highlight with multiple words#
To highlight multiple phrases that have the same style, pass the substrings you
want to highlight as an array to the query
prop
<Heading lineHeight='tall'><Highlightquery={['spotlight', 'emphasize', 'Accentuate']}styles={{ px: '2', py: '1', rounded: 'full', bg: 'teal.100' }}>With the Highlight component, you can spotlight, emphasize and accentuatewords.</Highlight></Heading>
The query for the strings is case insensitive. Notice "Accentuate" in the query.
Highlight substrings#
The Highlight component allows you to highlight substrings of a word. A good use case for this is in a search query.
<Box><Text>Search result for: "spot"</Text><Text mt='6' fontWeight='bold'><Highlight query='spot' styles={{ py: '1', fontWeight: 'normal' }}>Spotlight bulb</Highlight></Text><Text fontWeight='bold'><Highlight query='spot' styles={{ py: '1', fontWeight: 'normal' }}>Spot cleaner</Highlight></Text><Text fontWeight='bold'><Highlight query='spot' styles={{ py: '1', fontWeight: 'normal' }}>Spot ceiling</Highlight></Text></Box>
Customizing rendered elements#
In cases where you want to customize multiple rendered elements and their
styles, use the useHighlight
hook.
import { useHighlight } from '@chakra-ui/react'
// prettier-ignore;() => {const chunks = useHighlight({text: 'With the Highlight component, you can spotlight, emphasize and accentuate words instantly',query: ['spotlight', 'emphasize', 'accentuate', 'instantly']})return (<Heading lineHeight="tall">{chunks.map(({ match, text }) => {if (!match) return textreturn text === 'instantly' ? (<Box as='u' fontFamily='NewYork'>{text}</Box>) : (<Mark bg='black' color="white" fontFamily='NewYork' px='2' py='1'>{text}</Mark>)})}</Heading>)}