Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Card

Container that groups related content and actions.

use radix_yew_themes::{ AccentColor, Avatar, Box, Card, Flex, FlexAlign, Radius, Text, TextAs, Weight, }; use yew::prelude::*; #[function_component] pub fn CardExample() -> Html { html! { <Box max_width="240px"> <Card> <Flex gap=3 align={FlexAlign::Center}> <Avatar size=3 src="https://images.unsplash.com/photo-1607346256330-dee7af15f7c5?&w=64&h=64&dpr=2&q=70&crop=focalpoint&fp-x=0.67&fp-y=0.5&fp-z=1.4&fit=crop" radius={Radius::Full} fallback="T" /> <Box> <Text r#as={TextAs::Div} size=2 weight={Weight::Bold}> {"Teodros Girmay"} </Text> <Text r#as={TextAs::Div} size=2 color={AccentColor::Gray}> {"Engineering"} </Text> </Box> </Flex> </Card> </Box> } }

API Reference

This component is based on the div element and supports common margin props.

PropTypeDefault
as_childOption<Callback<CardChildProps>>-
sizeResponsive<1..5>1
variantCardVariantCardVariant::Surface

Examples

As Another Element

Use the as_child prop to render the card as a link or a button. This prop adds styles for the interactive states, like hover and focus.

use radix_yew_themes::{AccentColor, Box, Card, CardChildProps, Text, TextAs, Weight}; use yew::prelude::*; #[function_component] pub fn CardAsAnotherElementExample() -> Html { html! { <Box max_width="350px"> <Card as_child={Callback::from(|CardChildProps { class, style, .. }| html! { <a class={class} style={style} href="#" > <Text r#as={TextAs::Div} size=2 weight={Weight::Bold}> {"Quick start"} </Text> <Text r#as={TextAs::Div} color={AccentColor::Gray} size=2> {"Start building your next project in minutes"} </Text> </a> })} /> </Box> } }

Size

Use the size prop to control the size.

use radix_yew_themes::{ AccentColor, Avatar, Box, Card, Flex, FlexAlign, FlexDirection, Radius, Text, TextAs, Weight, }; use yew::prelude::*; #[function_component] pub fn CardSizeExample() -> Html { html! { <Flex gap=3 direction={FlexDirection::Column}> <Box width="350px"> <Card size=1> <Flex gap=3 align={FlexAlign::Center}> <Avatar size=3 radius={Radius::Full} fallback="T" color={AccentColor::Indigo} /> <Box> <Text r#as={TextAs::Div} size=2 weight={Weight::Bold}> {"Teodros Girmay"} </Text> <Text r#as={TextAs::Div} size=2 color={AccentColor::Gray}> {"Engineering"} </Text> </Box> </Flex> </Card> </Box> <Box width="400px"> <Card size=2> <Flex gap=4 align={FlexAlign::Center}> <Avatar size=4 radius={Radius::Full} fallback="T" color={AccentColor::Indigo} /> <Box> <Text r#as={TextAs::Div} weight={Weight::Bold}> {"Teodros Girmay"} </Text> <Text r#as={TextAs::Div} color={AccentColor::Gray}> {"Engineering"} </Text> </Box> </Flex> </Card> </Box> <Box width="500px"> <Card size=3> <Flex gap=4 align={FlexAlign::Center}> <Avatar size=5 radius={Radius::Full} fallback="T" color={AccentColor::Indigo} /> <Box> <Text r#as={TextAs::Div} size=4 weight={Weight::Bold}> {"Teodros Girmay"} </Text> <Text r#as={TextAs::Div} size=4 color={AccentColor::Gray}> {"Engineering"} </Text> </Box> </Flex> </Card> </Box> </Flex> } }

Variant

Use the variant prop to control the visual style.

use radix_yew_themes::{AccentColor, Card, CardVariant, Flex, FlexDirection, Text, TextAs, Weight}; use yew::prelude::*; #[function_component] pub fn CardVariantExample() -> Html { html! { <Flex direction={FlexDirection::Column} gap=3 max_width="350px"> <Card variant={CardVariant::Surface}> <Text r#as={TextAs::Div} size=2 weight={Weight::Bold}> {"Quick start"} </Text> <Text r#as={TextAs::Div} color={AccentColor::Gray} size=2> {"Start building your next project in minutes"} </Text> </Card> <Card variant={CardVariant::Classic}> <Text r#as={TextAs::Div} size=2 weight={Weight::Bold}> {"Quick start"} </Text> <Text r#as={TextAs::Div} color={AccentColor::Gray} size=2> {"Start building your next project in minutes"} </Text> </Card> </Flex> } }

With Inset Content

Use the Inset component to align content flush with the sides of the card.

use radix_yew_themes::{ Box, Card, Inset, InsetClip, InsetPadding, InsetSide, Strong, Text, TextAs, }; use yew::prelude::*; use yew_style::Style; #[function_component] pub fn CardWithInsetContentExample() -> Html { html! { <Box max_width="240px"> <Card size=2> <Inset clip={InsetClip::PaddingBox} side={InsetSide::Top} pb={InsetPadding::Current}> <img src="https://images.unsplash.com/photo-1617050318658-a9a3175e34cb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=600&q=80" alt="Bold typography" style={Style::from([ ("display", "block"), ("object-fit", "cover"), ("width", "100%"), ("height", "140px"), ("background-color", "var(--gray-5)"), ])} /> </Inset> <Text r#as={TextAs::P} size=3> <Strong>{"Typography"}</Strong>{" is the art and technique of arranging type to make written language legible, readable and appealing when displayed."} </Text> </Card> </Box> } }

See Also