aforemny/material-components-web-elm/4.0.0

NOTE: the latest version is 9.1.0

Material.Card

Cards contain content and actions about a single subject.

Table of Contents

Resources

Basic Usage

import Html exposing (Html, text)
import Material.Button as Button
import Material.Card as Card
import Material.IconButton as IconButton


main =
    Card.card Card.config
        { blocks =
            [ Card.block <|
                Html.div []
                    [ Html.h2 [] [ text "Title" ]
                    , Html.h3 [] [ text "Subtitle" ]
                    ]
            , Card.block <|
                Html.div []
                    [ Html.p [] [ text "Lorem ipsum…" ] ]
            ]
        , actions =
            Just <|
                Card.actions
                    { buttons =
                        [ Card.button Button.config "Visit" ]
                    , icons =
                        [ Card.icon IconButton.config
                            "favorite"
                        ]
                    }
        }

Configuration

type Config msg

Configuration of a card

Default configuration of a card

Configuration Options

setOutlined : Bool -> Config msg -> Config msg

Specify whether a card should have a visual outline

setAttributes : List (Attribute msg) -> Config msg -> Config msg

Specify additional attributes

Card

card : Config msg -> Content msg -> Html msg

Card view function

type alias Content msg =
{ blocks : List (Block msg)
, actions : Maybe (Actions msg)
}

The content of a card is comprised of blocks and actions.

Outlined Card

A card may display a border by setting its setOutlined configuration option to True.

Card.card
    (Card.config |> Card.setOutlined True)
    { blocks =
        [ Card.block <|
            Html.div [] [ Html.h1 [] [ text "Card" ] ]
        ]
    , actions = Nothing
    }

Card Blocks

A card's primary content is comprised of blocks. Blocks may be comprised of arbitrary HTML or a media element. Optionally, a group of card blocks can be marked as the card's primary action which makes that group of blocks interactable.

type Block msg

A card's content block

Generic Block

Generic card blocks are the most common and allow you to specify card content using arbitrary HTML. Note that you will have to carefully adjust styling such as padding and typography yourself.

Card.block <|
    Html.div []
        [ Html.h2 [] [ text "Title" ]
        , Html.h3 [] [ text "Subtitle" ]
        ]
block : Html msg -> Block msg

Card block containing arbitrary HTML

Card.block <|
    Html.div [] [ text "Lorem ipsum…" ]

Media Block

Cards may contain a media block usually as the first content block. The media will be displayed using a background image, and you may chose from square or a 16 to 9 aspect ratio.

squareMedia : List (Attribute msg) -> String -> Block msg

Card media block with a square aspect ratio

sixteenToNineMedia : List (Attribute msg) -> String -> Block msg

Card media block with a 16:9 aspect ratio

media : List (Attribute msg) -> String -> Block msg

Card media block of unspecified aspect ratio

Primary Action Block

A group of card blocks can be marked as the primary action of the card. A primary action block may be clicked upon and displays a visual interaction effect.

Card.primaryAction
    [ Html.Events.onClick CardClicked ]
    [ Card.block <|
        Html.h2 [] [ text "Title" ]
    , Card.block <|
        Html.p [] [ text "Lorem ipsum…" ]
    ]
primaryAction : List (Attribute msg) -> List (Block msg) -> List (Block msg)

A card's primary action block

Card Actions

Card actions are comprised of buttons and icons. These are exposed as variants to the standard buttons and icons, but they do share the same configuration.

Card.actions
    { buttons =
        [ Card.button Button.config "View" ]
    , icons =
        [ Card.icon IconButton.config "favorite" ]
    }
type Actions msg

Card actions type

{ buttons : List (Button msg)
, icons : List (Icon msg)
}
-> Actions msg

Card actions

A card may contain as actions buttons as well as icons.

type Button msg

Card action's button type

button : Config msg -> String -> Button msg

A card action button

Card.button Button.config "Visit"
type Icon msg

Card action's icon type

icon : Config msg -> String -> Icon msg

Card action icon

Card.icon IconButton.config "favorite"

Card Full Bleed Actions

While a card's action buttons are usually left-aligned, a special case exists when there is only a single button as card action.

Card full bleed action

If a card's action is comprised of a single button, that button can be made full width by using cardFullBleedActions.

Card.fullBleedActions
    (Card.button Button.config "Visit")

Focus a Card

You may programatically focus a card by assigning an id attribute to it and use Browser.Dom.focus.

Note that cards must have a primary action element to be focusable.

Card.card
    (Card.config
        |> Card.setAttributes
            [ Html.Attributes.id "my-card" ]
    )
    { blocks = Card.primaryAction [] []
    , actions = Nothing
    }