Utils

Raccourcis en développement

ctrl+g pour afficher la grille.

ctrl+w passer d’une page pleine largeur à une page avec barre latérale, et inversement.

Layout

Variables associées :

$grid-gutter: 60px
$grid-max-width: 1980px
$grid-breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)

Pour placer un container (goutières latérales et max-width)

@mixin container
    max-width: $grid-max-width
    padding-left: $grid-gutter
    padding-right: $grid-gutter
    margin-left: auto
    margin-right: auto
    width: 100%

Usage des colonnages avec CSS Grid.

Utilise le mixin grid, avec le nombre de colonnes voulues, et à quel breakpoint. Par défaut, pas de grid sous le breakpoint md

@mixin grid($cols: 12, $breakpoint: md)
    @include media-breakpoint-up($breakpoint)
        display: grid
        grid-gap: 0 $grid-gutter
        grid-template-columns: repeat($cols, 1fr)

Problème : il faut mettre les appels avec des breakpoints dans l’ordre croissant de largeur. Faut-il vraiment gérer le breakpoint dans le mixin ? Par exemple, on veut 3 posts côte à côte en xl, et 2 en md :

.posts
   @include grid(2)
   @include grid(3, xl)

Pour assigner une valeur (width, padding…) d’un nombre de colonnes, on utilise le mixin col

@function col($nb, $base: 12)
    $nb: $nb/$base * 12
    $nbCol: calc( (100% + #{$grid-gutter}) / 12 * #{$nb} )
    @return #{$nbCol}

Faut-il aussi gérer le breakpoint dans le mixin ?

Reset

Création d’un mixin button-reset qui efface les propriétés par défaut des boutons :

 appearance: none
    background: transparent
    border: none
    border-radius: 0
    cursor: pointer
    user-select: none
    &:active, &:focus
        box-shadow: 0 0 0 0.25rem rgba($main-color, 0.25)
        outline: 0

Enjeu pour la transcription : Est-ce que cela restera un bouton ? Possibilité d’utiliser <details> pour le collapse.

Même principe pour enlever le style par défaut des listes :

@mixin list-reset
    list-style: none
    padding-left: 0
    margin-bottom: 0
    margin-top: 0

Misc

Création d’un mixin permettant de paraméter l’équivalent de inset pour la rétrocompatibilité :

@mixin inset($top: 0, $right: $top, $bottom: $top, $left: $top)
    inset: $top $right $bottom $left
    // polyfill for inset
    @supports not (inset: $top)
        bottom: $bottom
        left: $left
        right: $right
        top: $top

Création d’un mixin permettant de reproduire le fonctionnement bootstrap du stretched-link des cards :

@mixin stretched-link($pseudo-element: after)
    &::#{$pseudo-element}
        bottom: 0
        content: ''
        left: 0
        position: absolute
        right: 0
        top: 0
        z-index: $zindex-stretched-link

Utilisé principalement pour masquer les <caption>, le mixin visually-hidden permet de faire en sorte de dissimuler un élément lisible par les technologie d’assistance.

@mixin visually-hidden
    clip: rect(0,0,0,0) !important
    border: 0 !important
    height: 1px !important
    margin: -1px !important
    overflow: hidden !important
    padding: 0 !important
    position: absolute !important
    white-space: nowrap !important
    width: 1px !important

Icons

Le mixin icon, déclaré comme ceci : @include icon(icon-name, pseudo-element) où “icon” correspond au nom de l’icon défini dans le fichier configuration.sass et “pseudo-element”, paramétré par défaut comme ::before permet de définir quel pseudo-element contient l’icon. Ce deuxième paramètre est donc facultatif.

@mixin icon($icon-name: '', $pseudo-element: before, $font-size: px2rem(10))
    &::#{$pseudo-element}
        content: map-get($icons, $icon-name)
        display: inline-block
        font-family: 'Icon'
        font-size: $font-size
        font-style: normal
        font-variant: normal
        font-weight: normal
        line-height: 1
        speak: never
        text-transform: none
        vertical-align: middle
        @content // TODO : important de documenter ça