Une collection de conseils pour vous aider à mener vos compétences CSS au niveau pro.
Pour d’autres listes géniales, consultez la liste organisée par [@sindresorhus](https://github.com/sindresorhus/) des listes impressionnantes.
box-sizing
unset
au Lieu de Réinitialiser Toutes les
Propriétés
:not()
pour Appliquer / ne pas Appliquer des
Bordures à la Barre de Navigation
line-height
à body
: focus
pour les Éléments de Formulaire
nth-child
Négatif
max-height
pour des Sliders en CSS Pur
rem
pour le Dimensionnement Global; Utilisez
em
pour le Dimensionnement Local
:root
pour le Type Flexible
font-size
sur les Éléments de Formulaire pour une
Meilleure Expérience Mobile
display: none
sur les sauts de ligne utilisés
comme espacement
La réinitialisation CSS aide à faire respecter une cohérence de style entre les différents navigateurs en faisant table rase pour les éléments de style. Vous pouvez utiliser la bibliothèque de réinitialisation CSS comme Normalize, et al, ou vous pouvez utiliser une approche de réinitialisation plus simplifiée :
Maintenant, les éléments seront dépouillés des marges et de zones de
remplissage, et box-sizing
vous permet de gérer la mise en
page avec le modèle de boîte CSS.
Remarque: Si vous suivez le conseil
Hériter box-sizing
ci-dessous vous pouvez choisir de ne pas inclure la propriété box-sizing
dans votre reset CSS.
retour à la table des matières
box-sizing
Laisser box-sizing
être héritée de html
:
Cela rend plus facile le fait de changer box-sizing
dans des
plugins ou autres composants qui exploitent d’autres comportements.
retour à la table des matières
unset
au Lieu de Réinitialiser Toutes les Propriétés
Lors de la réinitialisation des propriétés d’un élément, il n’est pas nécessaire de réinitialiser chaque propriété individuelle :
button {
background: none;
border: none;
color: inherit;
font: inherit;
outline: none;
padding: 0;
}
Vous pouvez spécifier toutes les propriétés d’un élément en utilisant le
raccourci all
. Définir la valeur sur
unset
change les propriétés d’un élément à leurs valeurs
initiales :
Remarque: les raccourcis all
etunset
ne sont pas pris en charge dans IE11.
retour à la table des matières
:not()
pour Appliquer / ne pas Appliquer des
Bordures à la Barre de Navigation
Au lieu de mettre à l’encadrement…
… puis l’enlever du dernier élément…
…Utiliser la pseudo-classe :not()
pour appliquer uniquement
aux éléments que vous voulez :
Le sélecteur CSS définit la frontière comme un humain la décrirait.
retour à la table des matières
Vous pouvez vérifier si une police est installée localement avant de la récupérer à distance, ce qui est également une bonne astuce de performance.
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank Mono"),
/* Otherwise, download it! */
url("//...a.server/fonts/DankMono.woff");
}
code {
font-family: "Dank Mono", system-ui-monospace;
}
Pointe du chapeau à Adam Argyle pour avoir partagé ce protip et cette démo.
retour à la table des matières
line-height
à body
Vous n’avez pas besoin d’ajouter line-height
à chaque
<p>
, <h*>
, et al.
séparément. Au lieu de cela, ajoutez-le à body
:
De cette façon, les éléments textuels peuvent hériter de
body
facilement.
retour à la table des matières
:focus
pour les éléments de formulaire
Les personnes voyantes utilisant le clavier se fient au focus pour déterminer où vont les événements de clavier sur la page. Mettez en évidence les éléments de formulaire, de façon cohérente par rapport à la mise en œuvre par défaut du navigateur :
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
retour à la table des matières
Non, ce n’est pas de la magie noire, vous pouvez vraiment centrer des éléments verticalement. Vous pouvez le faire avec flexbox…
html,
body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
…et aussi avec CSS Grid :
Vous voulez centrer autre chose ? Verticalement, horizontalement… quoi que ce soit, à tout moment, en tout lieu ? CSS-Tricks a un article sympa sur comment faire tout cela.
Remarque: Surveillez certains comportement bogués avec flexBox dans IE11.
retour à la table des matières
Faites que les liste d’éléments ressemblent de vraies listes, séparées par des virgules :
Utilisez la pseudo-classe :not()
and aucune virgule ne sera
ajoutée au dernier élément.
Remarque: Il est possible que cette astuce ne soit pas idéale pour l’accessibilité, en particulier pour les lecteurs d’écran. Et copier / coller à partir du navigateur ne fonctionne pas avec le contenu généré par CSS. Procéder avec prudence.
retour à la table des matières
nth-child
Négatif
Utilisez un nth-child
négatif en CSS pour sélectionner des
éléments de 1 à n.
li {
display: none;
}
/* select items 1 through 3 and display them */
li:nth-child(-n+3) {
display: block;
}
Ou, puisque vous avez déjà appris un peu
en utilisant :not()
, essayez :
/* select all items except the first 3 and display them */
li:not(:nth-child(-n+3)) {
display: none;
}
retour à la table des matières
Il n’y a aucune raison de ne pas utiliser SVG pour les icônes :
Le SVG permet de bien mettre à l’échelle et ce pour tous types de résolution, de plus il est pris en charge dans tous les navigateurs depuis retour au IE9. Donc laissez tombé vos fichiers .png, .jpg ou .gif-JIF-etc.
Remarque: Si vous avez seulement des boutons sous forme d’icônes SVG pour les utilisateurs voyants et que le SVG ne parvient pas à charger, cela vous aidera à maintenir l’accessibilité :
retour à la table des matières
Il a peut être un nom étrange, mais utiliser le sélecteur universel
(*
) avec le sélecteur de frère adjacent (+
) peut
fournir une capacité de CSS puissante :
Dans cet exemple, tous les éléments dans le flux du document qui suivent
d’autres éléments recevront margin-top: 1.5em
.
Pour en savoir plus sur le sélecteur “chouette lobotomisée”, lire la publication de Heydon Pickering sur A List Apart.
retour à la table des matières
max-height
pour des Sliders en CSS Pur
Mettre en œuvre des sliders en CSS uniquement en utilisant
max-height
avec débordement caché :
.slider {
max-height: 200px;
overflow-y: hidden;
width: 300px;
}
.slider:hover {
max-height: 600px;
overflow-y: scroll;
}
L’élément s’étends jusqu’à la valeur max-height
au survol et
le slider s’affiche à la suite du débordement.
retour à la table des matières
Il peut être pénible de travailler avec des tableaux. Essayez d’utiliser
table-layout: fixed
pour maintenir les cellules à largeur
égale :
Des tableaux sans douleurs.
retour à la table des matières
Lorsque vous travaillez sur les gouttières des colonnes, vous pouvez vous
débarrasser de nth
, first-
et
last-child
en utilisant la propriété flexbox
space-between
:
Maintenant les gouttières de vos colonnes apparaissent toujours uniformément espacées.
retour à la table des matières
Affichez des liens lorsque l’élément <a>
n’a pas de
valeur de texte mais que l’attribut href
a un lien :
C’est assez pratique.
retour à la table des matières
Ajouter un style pour les liens " par défaut" :
Maintenant, les liens qui sont insérés via un CMS, qui ne disposent
généralement pas d’un attribut class
, auront une distinction
sans affecter de manière générique la cascade.
retour à la table des matières
Pour créer une boîte avec une proportion intrinsèque, tout ce que vous devez faire est d’appliquer une zone de remplissage en haut ou en bas de à un div :
.container {
height: 0;
padding-bottom: 20%;
position: relative;
}
.container div {
border: 2px dashed #ddd;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
En utilisant 20% pour le rembourrage, cela rend la hauteur de la boîte égale à 20% de sa largeur. Peu importe la largeur de la fenêtre d’affichage, la div enfant gardera son ratio d’aspect (100% / 20% = 5: 1).
retour à la table des matières
Faire des images cassées esthétiquement plus agréables avec un peu de CSS :
img {
display: block;
font-family: sans-serif;
font-weight: 300;
height: auto;
line-height: 2;
position: relative;
text-align: center;
width: 100%;
}
Maintenant, ajoutez les règles pseudo-éléments pour afficher un message d’utilisateur et une référence URL de l’image brisée :
img::before {
content: "We're sorry, the image below is broken :(";
display: block;
margin-bottom: 10px;
}
img::after {
content: "(url: " attr(src) ")";
display: block;
font-size: 12px;
}
En savoir plus sur la styliser de ce patron dans Ire Aderinokun’ message original.
retour à la table des matières
rem
pour le Dimensionnement Global; Utilisez
em
pour le Dimensionnement Local
Après avoir défini la taille de la police de base à la racine (html { font-size: 100%; }
), définir la taille de la police pour les éléments textuels à
em
:
Définissez ensuite la taille de police pour les modules à
rem
:
Maintenant, chaque module devient compartimentée et plus faciles à styliser, plus maintenable, et flexible.
retour à la table des matières
Ceci est une super astuce pour une feuille de style personnalisée par l’utilisateur. Évitez de surcharger un utilisateur avec le son d’une vidéo lue Automatiquement lorsque la page est chargée. Si le son n’est pas coupé, ne pas montrer la vidéo :
Encore une fois, nous trions parti de l’utilisation de la pseudo-classe
:not()
.
retour à la table des matières
:root
pour le Type Flexible
La taille type de police dans une mise en page responsive devrait être en
mesure de s’ajuster à chaque fenêtre d’affichage. Vous pouvez calculer la
taille de la police basée sur la hauteur de la fenêtre et la largeur en
utilisant : root
:
Maintenant, vous pouvez utiliser l’unitée de root em
basée
sur la valeur calculée par: root
:
retour à la table des matières
font-size
sur les Éléments de Formulaire pour une
Meilleure Expérience Mobile
Pour éviter aux navigateurs mobiles (iOS Safari, et al.) de
zoomer sur des éléments de formulaire HTML quand un menu déroulant
<select>
est touché, ajoutez font-size
à
la règle de sélection :
:dancer:
retour à la table des matières
Les événements de pointeur vous permettent de spécifier comment la souris interagit avec l’élément qu’elle touche. Pour désactiver l’événement de pointeur par défaut sur un bouton, par exemple :
C’est aussi simple que cela.
retour à la table des matières
display: none
sur les sauts de ligne utilisés comme
espacement
Comme Harry Roberts l’a souligné, cela peut aider à empêcher les utilisateurs du système de gestion de contenu d’utiliser des sauts de ligne supplémentaires pour l’espacement:
retour à la table des matières
Les versions actuelles de Chrome, Firefox, Safari, Opera, Edge, et IE11.