.quality-box {
width: calc(20% - 20px);
margin: 10px;
display: inline-block;
}
{...}
Lorem ipsum <strong>dolor</strong> sit amet, consectetur adipiscing <b>elit</b>. Vestibulum at molestie risus.
Etiam nec est congue, <em>accumsan</em> sapien quis, viverra justo. Class <u>aptent</u>
taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Aliquam in malesuada felis. Sed <i>laoreet</i> velit velit, eget dictum nibh suscipit vel.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum at molestie risus. Etiam nec est congue, accumsan sapien quis, viverra justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam in malesuada felis. Sed laoreet velit velit, eget dictum nibh suscipit vel.
Les <div>
sont faits pour afficher des blocs de contenus.
Les <span>
sont faits pour afficher du texte de façon linéaire.
On ne met pas de <div>
dans des <span>
.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Application de démo</title>
<link rel="icon" type="image/png" href="focus.png" />
<link rel="stylesheet" href="./styles/mes-styles.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css">
<style>
body {
padding:0;
margin:0;
}
</style>
<!--[if IE 7]><link rel="stylesheet" type="text/css" href="screen-ie7.css" /><![endif]-->
</head>
<body style="border:1px solid red;">
// le contenu de la page
</body>
</html>
@import url('/Content/header.css');
footer {
background-color:green;
}
// Conditional-CSS syntax examples [if IE] - Used if the browser is IE [if ! Opera] - Used if the browser is not Opera [if IE 5] - Used if browser is IE 5 [if lte IE 6] - Used if the browser is IE 6 or less (IE 5, IE 4 etc) [if ! gt IE 6] - Same effect as the previous statement, if not greater than IE 6
[if IE].container {
height: 100%;
width: 100%;
text-align: center;
line-height: 2em;
[if gte IE 7]background: url('ie7.png') no-repeat center center;
[if lte IE 6]background: url('ie.jpg') no-repeat center center;
}
Les carottes sont cuites.
Les carottes sont cuites.
p .carotte {
color: orange;
text-decoration: underline;
font-style: italic;
}
Les carottes sont cuites.
Les carottes sont cuites.
Pattern | Meaning | CSS level | |
---|---|---|---|
warning | * |
Any element | 2 |
E |
An element of type E | 1 | |
E.warning |
An E element whose class attribute is "warning" | 1 | |
E#myId |
An E element with ID equal to "myId" | 1 |
Paragraphe
Paragraphe bleu
p {
color: green;
}
p#bleu {
color: blue;
}
Pattern | Meaning | CSS level | |
---|---|---|---|
E F |
An F element descendant of an E element | 1 | |
E > F |
An F element child of an E element | 2 | |
E + F |
An F element immediately preceded by an E element | 2 | |
E ~ F |
An F element preceded by an E element | 3 |
Hey !
Les carottes sont cuites
div > span {
color: red;
}
Pattern | Meaning | CSS level | |
---|---|---|---|
E[foo] |
an E element with a "foo" attribute | 2 | |
E[foo="bar"] |
an E element whose "foo" attribute value is exactly equal to "bar" | 2 | |
E[foo~="bar"] |
an E element whose "foo" attribute value is a list of whitespace-separated values, one of which is exactly equal to "bar" | 2 | |
E[foo^="bar"] |
an E element whose "foo" attribute value begins exactly with the string "bar" | 3 | |
E[foo$="bar"] |
an E element whose "foo" attribute value ends exactly with the string "bar" | 3 | |
E[foo*="bar"] |
an E element whose "foo" attribute value contains the substring "bar" | 3 | |
E[foo|="en"] |
an E element whose "foo" attribute has a hyphen-separated list of values beginning (from the left) with "en" | 2 |
table tbody tr td[align="center"] {
text-align:center;
}
Expressions permettant classifier les éléments sur des caractéristiques qui ne peuvent pas être déduites du DOM
Pattern | Meaning | CSS level | |
---|---|---|---|
E:root |
an E element, root of the document | 3 | |
E:nth-child(n) |
an E element, the n-th child of its parent | 3 | |
E:nth-last-child(n) |
an E element, the n-th child of its parent, counting from the last one | 3 | |
E:nth-of-type(n) |
an E element, the n-th sibling of its type | 3 | |
E:nth-last-of-type(n) |
an E element, the n-th sibling of its type, counting from the last one | 3 |
Pattern | Meaning | CSS level | |
---|---|---|---|
E:first-child |
an E element, first child of its parent | 2 | |
E:last-child |
an E element, last child of its parent | 3 | |
E:first-of-type |
an E element, first sibling of its type | 3 | |
E:last-of-type |
an E element, last sibling of its type | 3 | |
E:only-child |
an E element, only child of its parent | 3 | |
E:only-of-type |
an E element, only sibling of its type | 3 | |
E:empty |
an E element that has no children (including text nodes) | 3 |
Pattern | Meaning | CSS level | |
---|---|---|---|
E:link |
an E element being the source anchor of a hyperlink of which the target is not yet visited (:link) or already visited (:visited) | 1 | |
E:visited |
an E element during certain user actions | 1 | |
E:active |
an E element during certain user actions | 1 and 2 | |
E:hover |
an E element during certain user actions | 1 and 2 | |
E:focus |
an E element during certain user actions | 1 and 2 | |
E:target |
an E element being the target of the referring URI | 3 | |
E:lang(fr) |
an element of type E in language "fr" (the document language specifies how language is determined) | 2 | |
E:enabled |
a user interface element E which is enabled or disabled | 3 | |
E:disabled |
a user interface element E which is enabled or disabled | 3 | |
E:checked |
a user interface element E which is checked (for instance a radio-button or checkbox) | 3 | |
E:not(s) |
an E element that does not match simple selector s | 3 |
Pseudo-éléments : expressions offrant l’accès à de l’information, du contenu, qui n’est pas directement accessible via le DOM
Pattern | Meaning | CSS level | |
---|---|---|---|
E::first-line |
the first formatted line of an E element | 1 | |
E::first-letter |
the first formatted letter of an E element | 1 | |
E::before |
generated content before an E element | 2 | |
E::after |
generated content after an E element | 2 |
A égal à 1 si l'attribut "style" est défini, 0 sinon B nombre d'ID utilisés dans le sélecteur C nombre de classes, de pseudo-classes et d'attributs dans le sélecteur D nombre de nom d'éléments et pseudo-éléments dans le sélecteur
Sélecteur | A | B | C | D |
---|---|---|---|---|
* {} |
0 | 0 | 0 | 0 |
li {} |
0 | 0 | 0 | 1 |
li::first-line {} |
0 | 0 | 0 | 2 |
ul li {} |
0 | 0 | 0 | 2 |
ul ol+li {} |
0 | 0 | 0 | 3 |
h1 + *[rel="up"] {} |
0 | 0 | 1 | 1 |
ul ol li.red {} |
0 | 0 | 1 | 3 |
ul ol li:not(.red) {} |
0 | 0 | 1 | 3 |
li.red.level {} |
0 | 0 | 2 | 1 |
#x34y {} |
0 | 1 | 0 | 0 |
style="color:red" {} |
1 | 0 | 0 | 0 |
!important
- Priorité / Précédence
- Ordre textuel
Définir le positionnement d'un élément par rapport :
- aux limites de la zone d'affichage
- aux limites de son conteneur
- au flux HTML
E {
position: static | relative | absolute | fixed;
}
{position: static}
http://codepen.io/anon/pen/PPyXeGC'est la valeur par défaut affectée à chaque éléments du flux HTML.L’élément est affiché selon l’ordre du flux et de conteneur.
{position: relative}
http://codepen.io/Tommass/pen/PPyVEQAffiche l’élément par rapport à son conteneur parent.L’élément est affiché selon l’ordre du flux et de conteneur.
{position: absolute}
L'élement est retiré du flux.Il se positionne :
- Au niveau du conteneur parent ayant une position
relative
ouabsolute
- A defaut, par rapport au conteneur principal : le navigateur
{position: fixed}
- Le contenu est retiré du flux
- Il se positionne toujours par rapport à la partie visible du navigateur
- Sa position est fixe à l'écran, le scroll n’agit pas sur l’élément qui reste toujours au même endroit
La propriété z-index permet de définir la "profondeur" d'un élément.Un élément avec un z-index élevé sera placé devant un élément avec un z-index inférieur.Cependant, il faut savoir que z-index ne s'applique :
- qu'aux éléments positionnés (
relative
,absolute
oufixed
)- relativement à son contexte d'empilement
Il s'agit de l'ensemble des éléments qui ont un parent commun et qui sont placés d'arrière en avant.un élément, quel que soit son z-index, situé dans un contexte d'empilement situé plus bas dans l'ordre d'empilement qu'un second contexte, ne sera jamais affiché devant un élément de ce second contexte.Ici, l'élément 2 est affiché devant l'élément 1.
Test des contextes d'empilement : https://codepen.io/sgoretti/pen/EbWWwpUn contexte d'empilement est créé :
- à la racine du document (élément
html
)- quand la propriété
position
est différente destatic
et que lez-index
est différent deauto
- lorsque l'opacité est inférieure à 1
- lorsqu'une des propriétés
transform
oufilter
est différente denone
- quand le
z-index
est différent deauto
pour un élément enfant de Flexbox (même s'il eststatic
)- et d'autres...
Exemple d'empilement tordu sans z-index : https://codepen.io/iamvdo/pen/pDABxAu sein de chaque contexte d'empilement, les règles qui définissent lordre d'affichage des éléments sont les suivantes :
- Les bordures et
background
de l'élément racine du contexte d'empilement- les éléments positionnés avec un
z-index
négatif- les éléments
block
non-positionnés- les flottants
- les éléments
inline
non-positionnés- les éléments positionnés avec un
z-index: auto
ouz-index: 0
- les éléments positionnés avec un
z-index
positif
http://codepen.io/Tommass/pen/EVdJdrEmpile les éléments de droite à gauche ou de gauche à droite Permet aux éléments proches de venir s’empiler autour Ne prend pas de place dans son conteneur parent Influence le contenu
https://codepen.io/sgoretti/pen/OOpmrv
- N’est pas considéré par le conteneur
- Est considéré par ses frangins...
float: right
inverse l'ordre d'affichage des éléments, le premier dans le html étant logiquement affiché le plus à droite..
Peut-être utilisé pour le template d'une page
error_outline Nouvelle propriété display:flex
introduite par CSS3.
error_outline Plutôt utiliser position:absolute
.
La propriétédisplay
définit le type de boîte utilisée pour le rendu d'un élément.Elle peut avoir un impact sur la relation de la boite avec ses frères ou sur l'affichage de ses enfants.
https://codepen.io/sgoretti/pen/bYqrWpLes valeurs les plus utilisées pour la propriété display :
block
: l'affichage par défaut. Un élémentdisplay: block
s'affichera sous son précédent frère non-flottant ou positionnéinline
: l'élément s'affiche à la suite (de façon linéaire) de son précédent frère. Les objets inline n'ont pas de width ni de height (qui sont calculées par rapport au contenu)inline-block
: affiché à la suite, mais garde les propriétés du block
Les valeurs les plus utilisées pour la propriété display :
table
et toute la liste destable-*
: permet de simuler le fonctionnement d'un tableau avec des divs (un divtable
contient des divstable-row
qui contiennent des divstable-cell
, par exemple)flex
: sera vu plus tardgrid
: sera vu plus tardnone
: l'élément n'est pas affiché et ne prend pas de place sur la page
display: none
illustré dans l'exemple :focus
dans : https://codepen.io/sgoretti/pen/aVJNeZ
E {
display:flex;
}
Permet dans de jouer plus facilement avec
- le positionnement
- l’orientation
- l’ordre d’affichage
Sans avoir à toucher au code HTML
Remplace la combinaison des propriétés
position
display
float
YES ! YES ! YES !Utilisez cette propriété dans vos style CSSSurchargez les propriétés pour les vieux navigateurs si vous avez cette contrainte.
- Structure d'une page
- Onglets
- Menus
- Centrer un élément verticalement dans son container
Si vous comprenez son utilisation et si les navigateurs cibles sont compatibles,Utilisez cette propriété dans vos style CSS.Au pire, surchargez les propriétés pour les vieux navigateurs si vous avez cette contrainte.
- Structure d'une page
- Listes (lignes ou cartes)
- En association avec flexbox
@font-face {
font-family: 'OpenSansRegular';
src: url('../font/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../font/OpenSans-Regular-webfont.woff') format('woff'),
url('../font/OpenSans-Regular-webfont.ttf') format('truetype'),
url('../font/OpenSans-Regular-webfont.svg#OpenSansLight') format('svg');
font-weight: normal;
font-style: normal;
}
html {
font-family: 'OpenSansRegular', verdana, arial;
}
Veillez à toujours livrer votre projet avec les fonts "embedded" dans votre application.
L’attribut média permet de préciser le media sur lequel s’applique la CSS
@import url('/Content/header.css') screen;
@media screen {
p.test {
font-family: verdana,sans-serif;
font-size: 14px;
}
}
Media type | Description |
---|---|
All | Used for all media type devices (default) |
aural | Used for speech and sound synthesizers |
braille | Used for braille tactile feedback devices |
embossed | Used for paged braille printers |
handheld | Used for small or handheld devices |
print | Used for printers |
projection | Used for projected presentations, like slides |
screen | Used for computer screens |
tty | Used for media using a fixed-pitch character grid, like teletypes and terminals |
tv | Used for television-type devices |
media
est utilisée pour définir des conditionsmedia="screen, 3d-glasses, print and resolution > 90dpi“
HEAD
@import url('/css/print-color.css') print and (color);
@media screen and (orientation: portrait) { … }
@media screen and (min-width: 400px) and (max-width: 700px) {
/* le header est plus petit */
header {
height: 50px;
}
/* le footer disparait */
footer {
display:none;
}
}
div {
text-overflow: ellipsis;
}
footer {
opacity: 0.3
}
header {
rgba(255, 0, 0, 0.75)
}
header {
hsla(95, 98%, 68%, 0, 19)
}
div {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
div {
background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet);
}
div {
text-shadow: 2px 2px #ff0000;
box-shadow: inset 0px 3px 3px 0px #dcdfe1
}
Generateur
http://www.cssmatic.com/box-shadow
div {
background: url('https://i.chzbgr.com/full/8359208704/h660F24F2/');
background-size: cover;
background-repeat: no-repeat;
background-position: 0% 50%;
}
http://codepen.io/Tommass/pen/BoGaba
.newspaper {
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
}
http://codepen.io/Tommass/pen/GpwRYL
div {
background: /* top, transparent red, faked with gradient */
linear-gradient(
to bottom,
rgba(53, 58, 97, 0.64),
rgba(0,0,0, 0.64)
),
url('https://i.chzbgr.com/full/8359208704/h660F24F2/');
}
http://codepen.io/Tommass/pen/epQYrg
La fonction CSS calc() peut être utilisée à n'importe quel endroit ou unelongueur
,frequency
,angle
,time
,number
, ouinteger
est nécessaire. Grâce à calc(), il est possible de réaliser des calculs pour déterminer la valeur d'une propriété CSS.
.banniere {
position: absolute;
left: 40px;
width: 90%; /* valeur pour les navigateurs ne supportant pas calc() */
width: calc(100% - 80px);
border: solid black 1px;
}
https://developer.mozilla.org/fr/docs/Web/CSS/calc
La propriété filter permet de réaliser des effets de flou, modifier la teinte, ...
.mon-image {
filter: blur(3px) grayscale(0.7);
}
http://html5-demos.appspot.com/static/css/filters/index.html
Unit | Description |
---|---|
% | percentage |
in | inch |
cm | centimeter |
mm | millimeter |
em | 1em is equal to the current font size. 2em means 2 times the size of the current font. E.g., if an element is displayed with a font of 12 pt, then '2em' is 24 pt. The 'em' is a very useful unit in CSS, since it can adapt automatically to the font that the reader uses |
rem | same as em but taking the root element font size. Allows more consistency for the value of the unit |
ex | one ex is the x-height of a font (x-height is usually about half the font-size) |
pt | point (1 pt is the same as 1/72 inch) |
pc | pica (1 pc is the same as 12 points) |
px | pixels (a dot on the computer screen) |
vw | % of screen width |
vh | % of screen height |
header {
animation:animation-de-tom 5s;
-webkit-animation:animation-de-tom 5s;
}
@keyframes animation-de-tom {
0% { background:red; }
10% { background:yellow; }
20% { background:blue; }
30% { background:green; }
40% { background:violet; }
50% { background:cyan; }
60% { background:magenta; }
70% { background:purple; }
80% { background:orange; }
90% { background:white; }
100% { background:red; }
}
Les animations doivent servir à jouer des transitions entre les états de votre SPA.
FOCUS va produire une bonne partie des transitions induites par les composants. Certaines IHM métiers nécessiteront des transitions personnalisées
Des librairies existent pour vous faciliter la vie : https://daneden.github.io/animate.css/
.bouton {
/* définit l'origine de la transformation: ici le centre du bouton */
transform-origin:0% 0%;
-ms-transform-origin:0% 0%;
-webkit-transform-origin:0% 0%;
-moz-transform-origin:0% 0%;
-o-transform-origin:0% 0%;
/* la transformation : une rotation de 90 degrés */
transform:rotate(-90deg);
-ms-transform:rotate(-90deg);
-webkit-transform:rotate(-90deg);
-moz-transform:rotate(-90deg);
-o-transform:rotate(-90deg);
}
Combinées aux animations, elles peuvent être utilisées pour générer des éléments graphiques dynamiques.
Par exemple, les spinners : http://tobiasahlin.com/spinkit/.
Ne pas réinventer la roue : utilisez des librairies CSS du marché.
.bouton {
transition: width 0.2s;
width: 90px;
}
.bouton:hover {
width: 110px;
}
Syntactically Awesome Style Sheets
$
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}
On importe un fichier avec @import 'monFichier';
On travaille avec une logique variables + composants et on ne se prive pas du nesting et des variables. On écrit pas de fichiers CSS.La doc
Un des problèmes du CSS, c'est que toutes les classes ont un scope global, sans forcément être stockées dans un même fichier.
CSS modules permet d'écrire du CSS scopé localement.
.red {
font-size: 25px;
background-color: red;
color: white;
}
import React from 'react'
import btn from './styles.css'
export default class CoolButton extends React.Component {
render() {
return (
)
}
}
composes
agit comme @extend
, etc.)
Il s'agit de traitements appliqués au code CSS/SASS afin de générer le ou les fichiers CSS utilisés par l'application.
.rotate90 {
transform: rotate(90 deg);
}
.rotate90 {
transform: rotate(90 deg);
-moz-transform: rotate(90 deg);
-webkit-transform: rotate(90 deg);
-ms-transform: rotate(90 deg);
}
Il s'agit d'un ensemble d'adaptations au CSS permettant d'utiliser des fonctionnalités avancées que le CSS n'offre pas (nesting, variables, etc.)
La séparation des préocccupations, c'est le fait que chaque couche, chaque langage, ne doit s'occuper que de ce pour quoi il est prévu.
Hello there!
.text-center
? Le nom reflète directement la façon dont est affiché l'élément, il s'agit de style.
.greeting {
text-align: center;
}
Hello there!
input
, button
, header
, etc. ou le nom du composant, par exemple.Block-Element--Modifier
@extend
de sass ou composes
de css-modules)_variables.scss
Avec ses couleurs, des polices et autres paramètres globaux...
data-project
, ou une nomenclature type BEM&
[data-focus='select'] {
select {
border-top:0;
border-left:0;
border-right: 0;
border-bottom: 1px solid $select-border-color;
padding: 3px 3px 3px 0;
color: $select-text-color;
}
...
}
On gère au cas par cas les problèmes spécifiques avec des styles conditionnels, on présente au client un mode dégradé graphiquement pour les vieux browsers...
.quality-title {
background: $colorGradient1;
background: linear-gradient(0deg, $colorGradient1, $colorGradient2);
}
data-project='my-component'
.