Définir avec CSS l'apparence du web graphique des capteurs dans l'IoT
Dans l'article précédent de la série sur comment réaliser des graphiques d'état de capteurs connectés à l'Internet des objets IoT explique la manière utiliser une page Web développée en HTML comme structure pour les graphiques. Les éléments de la page Web, réduits au minimum à l'aide d'objets <div>
, n'ont pas défini directement son apparence, mais ont fait référence au informations d'apparence dans une feuille de style CSS, c'est ce qui va être expliqué dans cette partie de la série.
Dans la solution que je propose pour réaliser des graphes de capteurs connectés à l'IoT, on utilise un document CSS qui est chargé à partir du document HTML. Si le code HTML sera généré depuis une application sur le serveur, par exemple dans PHP, il serait très simple de l'inclure dans le code qui définit la page Web au lieu de le charger à partir de celle-ci, ce qui pourrait être un peu optimisé en enregistrant un appel. Quelle que soit l'option choisie, la méthode la plus pratique comprend modifier le code CSS dans un document séparé pour le gérer plus confortablement et pouvoir le réutiliser. Dans l'exemple développé dans le tutoriel de cette série d'articles, on lui a donné le nom estilo.css
.
De la même manière, Lorsqu'il s'agit de projets complexes, il sera conseillé d'utiliser plusieurs feuilles de style distinctes dans différents documents., à la fois pour pouvoir réutiliser des fonctionnalités spécifiques sans avoir à toutes les charger à chaque fois, et pour éditer le code plus facilement en le répartissant dans différents documents selon la structure logique correspondante.
Les styles CSS Ils tentent de décrire tous les extrêmes du comportement et de l'apparence d'une page Web à partir de plusieurs types d'approches, toutes valables simultanément, tout en essayant de respecter autant que possible la compatibilité avec les spécifications des versions précédentes. Cela signifie qu’il existe de nombreuses solutions possibles qui répondent aux mêmes besoins. ainsi qu'un nombre élevé de ressources disponibles (propriétés CSS). En raison de l'approche didactique de l'article et afin de ne pas dérouter les nouveaux utilisateurs CSS, seules les propriétés et les structures nécessaires à l’objectif final, qui consiste à représenter graphiquement les données des capteurs connectés à l’Internet des objets. En même temps, il existe également un petite introduction à CSS, feuilles de style en cascade.
Formatage des propriétés CSS
El format de base Il se compose d'un nom de propriété, du signe deux-points, de la valeur de la propriété et du signe point-virgule. nombre:valor;
CSS vous permet d'utiliser différentes unités de mesure dans le même document y compris ceux liés à la structure (la mesure de ce que contient un élément) en pourcentage, par rapport à l'appareil sur lequel ils sont représentés, comme le pixel, ou absolus comme les centimètres. Les unités sont exprimées après la valeur selon le codage des abréviations suivant.
Code | Unité |
% | pourcentage de conteneur |
ch | par rapport à la largeur du nombre zéro |
cm | centimètres |
em | par rapport au type de base du conteneur |
ex | par rapport à la hauteur de la lettre x |
in | pulgadas |
mm | millimètres |
pc | picas (mesure typographique) |
pt | points (typographiques) |
px | Pixel |
rem | par rapport au type de base du document |
vh | par rapport à 1 % de la hauteur des yeux (écran mobile) |
vmax | par rapport à 1% de la plus grande dimension de la vue (écran mobile) |
vmin | par rapport à 1% de la plus petite dimension de la vue (écran mobile) |
vw | par rapport à 1 % de la largeur de vue (écran mobile) |
Pour l’application que nous allons réaliser, il est important de considérer au moins trois unités de style. Le % pour prendre des mesures par rapport à la taille du contenant d'un article, le pixel pour les mesures en fonction de la résolution de l'écran et les millimètres (en fait, toute mesure absolue) pour faire des rapports imprimés.
Il ya une certaine propriétés complexes, ou composite, qui dépendent de plusieurs valeurs (comme la couleur, la taille, le style...), pour indiquer la valeur il y a deux possibilités en CSS : écrire, dans l'ordre approprié, tous les valeurs séparées par des espaces ou utiliser la somme de propriétés simples équivalentes au complexe. Par exemple, les quatre marges d'un objet peuvent être spécifiées dans une seule propriété margin
ou peut être défini avec des propriétés margin-top
, margin-right
, margin-bottom
y margin-left
. D'ailleurs, cet ordre (dans le sens des aiguilles d'une montre) est celui suivi par les descriptions des valeurs qui "entourent" un élément comme la marge intérieure (padding) ou extérieure, la bordure...
Avec ce qui a été expliqué jusqu'à présent, nous pouvons maintenant voir quelques exemples de propriétés
1
2
3
4
|
margin:10px 20px 0 10px;
width:500px;
height:100%;
color:#FF0099;
|
Dans l'exemple ci-dessus La couleur est définie à l'aide d'un code de 6 chiffres hexadécimaux qui représentent, par paires, la valeur de la composante rouge, verte et bleue.. Lorsqu'il arrive, comme dans l'exemple, que les deux chiffres sont égaux, cela peut être abrégé en #F09
(ce qui correspond d'ailleurs aux soi-disant "couleurs Web sécurisées"). Dans la proposition finale j'éviterai d'utiliser ces abréviations pour unifier les critères et le rendre plus lisible. Vous pouvez également abréger les valeurs de propriétés complexes, telles que margin
dans l'exemple, lorsque toutes les valeurs ou paires opposées sont répétées. Dans le même esprit de sauvegarde du texte, il est également possible d'omettre l'unité lors de la spécification d'une propriété lorsque la valeur est zéro, car elle n'est pas pertinente dans ce cas.
Certaines valeurs, en plus de pouvoir être exprimées numériquement, ont un nom ce qui rend le code plus lisible et permet de mieux les mémoriser. Par exemple, au lieu du code numérique hexadécimal de la cible, #FFFFFF
(o #FFF
), peut s'écrire white
avec le même résultat. De cette façon, la couleur noire, #000000
(o #000
), peut être remplacé par black
.
Aussi là les valeurs sont exprimées par un code spécial, un nom. Par exemple, pour indiquer que la marge latérale est définie automatiquement par le navigateur (normalement elle correspondra à la fonction centrale), la valeur spéciale est utilisée auto
, qui n'a aucune correspondance numérique avec aucune valeur.
Pour exprimer une manière particulière d'utiliser une série de valeurs composites (complexes) d'une propriété CSS Vous pouvez choisir des formats avec une syntaxe similaire à celle des fonctions. Par exemple, pour exprimer une couleur comme les trois valeurs de ses composantes rouge, verte et bleue (la Modèle RVB) s'écrirait color: rgb(128, 255, 64);
. Dans ce style d'expression, il est également possible d'utiliser des unités ; Dans l'exemple ci-dessus, les composantes de couleur sont une valeur décimale de 0 à 255, mais il peut être plus facile de l'exprimer en pourcentage du total de chaque composante de couleur, auquel cas cela pourrait également s'écrire sous la forme color: rgb(50%, 100%, 25%);
.
Calculer des valeurs en CSS
Dans les versions les plus récentes de CSS il est possible de faire opérations mathématiques simples pour calculer des valeurs. Pour ce faire, utilisez calc
et l'opération à effectuer est exprimée entre parenthèses. Vous pouvez indiquer des unités, des parenthèses et des opérateurs simples tels que somme (+
), soustraction (-
), multiplications (*
) et division (/
). L'expression serait du type width:calc((90%-20px)/2));
.
Les variables peuvent être utilisées dans des opérations mathématiques dans CSS se référant dans le calcul d'une propriété à la valeur d'une autre avec var
. Afin de pouvoir utiliser une variable sans avoir besoin de faire référence à une propriété réelle du style, il est également permis de citer une propriété qui n'existe pas. CSS recommande le format --nombre-variable
(deux tirets devant le nom de la propriété inventée). De cette façon, pour définir la hauteur d'un élément comme la moitié de sa largeur, une expression dans CSS comme height:calc(var(width)/2);
et pour définir une nouvelle variable "épaisseur" (que d'autres propriétés pourraient utiliser) vous écririez, par exemple, --grosor:4px;
pour pouvoir plus tard l'appeler margin-top:calc(var(--grosor)*4);
Propriétés CSS dépendantes du navigateur
CSS Il s'agit d'une spécification normalisée par le consortium W3C (World Wide Web Consortium) mais beaucoup les propriétés ou les styles de comportement atteignent les navigateurs avant de faire partie de la spécification d'une version.
pour que le code CSS fonctionne avec les fonctionnalités actuelles d'un navigateur, mais ne perdez pas la compatibilité avec les nouvelles fonctionnalités, un préfixe est utilisé. Ce préfixe dépend du moteur de rendu qui utilise le navigateur Web que vous souhaitez référencer (pour lequel le style est défini).
Le préfixe -webkit
Cela fonctionne pour les navigateurs basés sur WebKit comme Safari o Chrome. Le préfixe -moz
Il est utilisé pour les navigateurs basés sur le moteur de rendu de Mozilla, actuellement GeckoComme Firefox et ses dérivés. Se référer à EdgeHTML, l' moteur de rendu navigateur Edge de Microsoft (anciennement Trident), le préfixe est utilisé -ms
. Le cas du navigateur Opera est un peu spécial depuis qu'il a commencé à utiliser le sien moteur de rendu, désigné par -o
, mais fonctionne actuellement avec WebKit, qui s'exprime sous la forme -webkit
.
Pour utiliser une propriété faisant référence à un navigateur, écrivez son nom en le préfixant et en le séparant par un trait d'union comme dans -o-border-radius:10px;
, qui servirait à définir une bordure arrondie (un coin arrondi) dans les anciennes versions du navigateur Opera.
Commentaires
Pour clarifier le code CSS Vous pouvez utiliser des commentaires, ce qui le rendra plus lisible mais avec l'inconvénient d'augmenter sa taille. La syntaxe des commentaires dans CSS C'est comme des commentaires multilignes C + + ce que vous savez sûrement déjà : à partir de /*
et se terminant par */
, Comme dans C + +, peut occuper plusieurs lignes.
Sélecteurs
La définition de les propriétés sont attribuées aux objets dans un document HTML les regrouper dans des sélecteurs et en les plaçant entre accolades. Un sélecteur peut référencer un élément de langage HTML (une étiquette), comme div
, une classe (attribuée à class
en HTML) un identifiant (attribué avec id
en HTML) ou tout (le « sélecteur universel ») représenté par l'astérisque (*
). L'exemple suivant montre un sélecteur de chaque type :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
* /* El asterisco es el selector universal */
{
margin:2px 6px 4px 20px;
}
div /* div es una etiqueta HTML */
{
width:500px;
height:200px;
}
.grafico /* «grafico» es el nombre de una clase que se usará en HTML con class=”grafico” */
{
color:#A0B0C0;
}
#superior /* «superior» es un identificador que se usará en HTML con id=”superior” */
{
width:100%;
color:#CCCCCC;
}
|
Les étiquettes de HTML sont exprimées dans la définition de style avec leur nom, les classes sont marquées en mettant un point avant le nom (.
) et un signe dièse (#
) pour les identifiants.
Une partie du grand pouvoir de CSS réside dans le possibilité de regrouper les sélecteurs lors de la définition de leurs propriétés. Il existe plusieurs façons de regrouper les sélecteurs. En les regroupant, en les séparant par des virgules, on exprime que chacun des sélecteurs cités possède ces propriétés.
1
2
3
4
5
6
7
8
9
10
11
|
.consumo, .humedad, .temperatura
{
color:#FF00AA;
width:100%;
height:100%;
}
.temperatura
{
height:50%;
}
|
L'exemple précédent indique que les classes de consommation, d'humidité et de température partagent la couleur, la largeur et la hauteur. Un nouveau concept est également introduit dans ce code : les propriétés peuvent être redéfinies, et dans ce cas les plus récemment décrites prévalent. De cette manière, les éléments de la classe de température auraient finalement une hauteur de 50 % de l'objet qui les contient.
Si les sélecteurs regroupés ne sont pas séparés par des virgules, la condition imposée aux propriétés est cumulative, c'est-à-dire qu'un élément doit satisfaire tous les sélecteurs pour qu'il acquière l'apparence ou le comportement qu'ils définissent. Si les sélecteurs font référence à des balises HTML L'ordre dans lequel ils apparaissent doit être décroissant dans le niveau d'inclusion : d'abord le niveau hiérarchique le plus élevé et enfin le niveau le plus bas.
1
2
3
4
5
6
7
8
9
10
11
|
div.temperatura
{
color:#FF00AA;
width:100%;
height:100%;
}
.temperatura .consumo
{
height:50%;
}
|
Dans l'exemple précédent les éléments sont définis div
qui sont également de la classe de température et les éléments qui ont à la fois la classe de température et la classe de consommation (les deux en même temps) comme dans class="temperatura consumo"
. Les éléments <div>
De code HTML avec class="temperatura"
ils auraient un maximum de 100%
Propriétés CSS pour définir le texte
Une distinction peut être faite entre trois types de propriétés qui affectent l'apparence du texte : (1) celles qui déterminent la police avec laquelle il est présenté, (2) celles qui déterminent l'apparence du littéral (le contenu du texte). et (3) les génériques, c'est-à-dire ceux qui affectent à la fois l'apparence du texte et celle des autres composants. En général, ce qui a été dit pour expliquer ceux du dernier groupe s'appliquera également aux mêmes propriétés appliquées aux autres éléments.
Typographie (police)
-
font-family
indique le nom de la police utilisée pour un élément. Vous pouvez écrire un seul nom ou une liste, par ordre de préférence et en séparant les noms par des virgules, des polices qui seront utilisées alternativement si celle souhaitée n'existe pas. Dans le même esprit, il est possible d'utiliser des polices génériques avec les nomsmonospace
,serif
,sans-serif
,cursive
,fantasy
. Parmi ces polices génériques, la plus importante (pour la présentation des données disponibles) est la première qui, comme son nom l'indique, utilisera la police à espacement fixe disponible dans le système et prédéfinie par le navigateur. La deuxième,serif
, il utilisera celui par défaut disponible serif (finition ou grâce). Sans enchères si le tiers est indiqué,sans-serif
. Imiter l'écriture dessinée à la main aveccursive
(une façon de l'appeler qui pourrait clairement être améliorée) et la typographie décorative du système avecfantasy
, le dernier des cinq.Quant au code CSS Les espaces ont une signification particulière en tant que séparateur ; lorsque le nom de la famille de polices est composé de plusieurs mots séparés par des espaces, il est écrit entre guillemets pour éviter toute confusion.
1font-family: DejaVu, Helvetica, Arial, “a palo seco”, sans-serif;Les navigateurs Web sont capables d'utiliser des polices locales (celles installées sur le système sur lequel ils fonctionnent) ainsi que d'autres spécifiquement chargées, chevauchant même celles installées localement. Pour charger une police, utilisez
@font-face
indiquant son nom, l'emplacement de téléchargement de sa définition et, le cas échéant, une description de son format.12345678910111213141516@font-face{font-family:“SircuitoExpandedLight”;src: url(‘/EOT/Sircuito-Expanded-Light.eot’);}@font-face{font-family:“SircuitoRegularMedium”;src: url(‘tipos/Sircuito-Regular-Medium.eot’);src: url(‘tipos/Sircuito-Regular-Medium.eot?iefix’) format(‘eot’),url(‘tipografia/Sircuito-Regular-Medium.woff’) format(‘woff’),url(‘tipografia/Sircuito-Regular-Medium.ttf’) format(‘truetype’),url(‘tipografia/Sircuito-Regular-Medium.svg#webfont’) format(‘svg’);-webkit-font-smoothing:antialiased;}Dans la première des deux définitions de l'exemple précédent, la lettre du document est chargée Sircuito-Expanded-Light.eot qui se trouve dans le dossier EOT à l'intérieur du dossier principal (racine) et est attribué comme nom de famille CircuitÉlargiLumière. Au fait, aimez-vous cette police ? C'est gratuit, vous pouvez téléchargez gratuitement la police Sircuito que j'ai conçue pour l'image GranaBot.
Comme on peut le voir dans l'exemple, la propriété url, qui correspond au localisateur de ressources uniforme, permet de préciser l'emplacement du document avec la police téléchargée. La barre oblique permet de séparer le nom des différents dossiers du chemin d'accès à la police, en commençant par celui contenant le document depuis lequel l'appel est effectué ou depuis la racine si le URL Commencez par un bar.
Le deuxième exemple utilise plusieurs documents alternatifs pour qu'une même définition fonctionne pour plusieurs navigateurs (chacun chargera le type qu'il est capable d'interpréter)
La dernière ligne de la définition inclut la propriété
font-smoothing
pour adoucir la lettre (appliquer un anti crénelage). Comme il ne s'agit pas d'une propriété standard, le préfixe est utilisé-webkit
. -
font-size
sert à indiquer la taille de la lettre comme dansfont-size:12px;
-
font-weight
Définit l'épaisseur de la police. Elle peut être exprimée sous forme d'une valeur numérique, généralement un multiple de 100 compris entre 100 et 900, selon les poids typographiques usuels, ou plus fréquemment par un nom :normal
pour l'épaisseur de la base,bold
pour les plus audacieux,bolder
pour la version habituellement appelée noire,light
pour l'amende (communément appelée légère) etlighter
pour les plus fins (parfois appelés minces).La valeur numérique de la version normale de la police est de 400 (sans unité) et de 700 pour la version grasse.
Par défaut, si aucune autre valeur n'est indiquée, l'apparence de la police est celle qui correspond à
normal
ou 400 donc, s'il n'a pas été modifié dans l'élément générique ou dans le conteneur dont il hérite, il n'est pas nécessaire d'indiquerfont-weight
avec le couragenormal
. -
font-stretch
Il sert à indiquer la largeur de la lettre, à condition qu'elle soit disponible dans la famille correspondante. Les valeurs possibles que peut prendre la propriété, classées de la plus étroite à la plus large, sont :ultra-condensed
,extra-condensed
,condensed
,semi-condensed
,normal
,semi-expanded
,expanded
,extra-expanded
yultra-expanded
. Avec les mêmes critères que ceux utilisés dans la propriété précédente, la largeur par défaut estnormal
et il n'est pas nécessaire de l'indiquer expressément à moins qu'il n'ait été modifié dans un ordre hiérarchique supérieur à celui défini. -
Avec
font-style
Vous pouvez indiquer si un texte est dessiné avec une lettre inclinée ou oblique, ce qui affecte son apparence, ou avec une lettre cursive, qui exprime une signification particulière (des mots étrangers, par exemple), ou avec une lettre ronde, c'est-à-dire ni les précédentes. ou normale. la valeuroblique
remplit la première fonction, celle d’apparence et de valeuritalic
le deuxième. Le fait que l’apparence des deux soit souvent similaire, voire identique, signifie que l’utilisation (la signification) est parfois confuse, il convient donc d’y prêter attention. Comme pour les autres propriétés,normal
sert à désactiver les valeurs précédentes. -
text-decoration
sert à souligner (avec la valeurunderline
), surligné (avec la valeuroverline
), barré (avec la valeurline-through
) ou flash (avec la valeurblink
) le texte affecté par cette propriété. -
Pour compléter la série de l'aspect typographie, bien que pour notre application ce ne soit pas très pertinent,
font-variant
, vous permet de postuler lettres minuscules (petites lettres majuscules) aux textes.
Texte
-
text-align
indique au navigateur comment le bloc de texte doit être aligné. Les alignements possibles sont à gauche (ce qui est considéré par défaut) avec le codeleft
, centre avec la valeurcenter
, c'est vrai en utilisantright
et justifié aux deux extrémités parjustify
. -
line-height
définit la séparation entre les lignes de texte. Dans ce cas, si des pourcentages sont utilisés, la valeur de 100 % correspond à la hauteur du texte au lieu de la mesure du contenant. La mesure la plus utilisée par rapport au texte correspond à 120%. Une ligne à 100 % signifierait que le bas d’une ligne touche le haut de la suivante. Bien que la conception typographique comprenne généralement un peu d’espace, il est courant de laisser un peu plus de marge entre les lignes.Pour exprimer la séparation entre les lignes, il est également possible d'indiquer un coefficient (une valeur sans unité) avec lequel calculer la hauteur de la ligne en fonction de la hauteur de la zone de texte.
-
letter-spacing
est la valeur de l'espace entre les lettres des mots, appelé en typographie crénage o désinfection. -
word-spacing
représente la mesure des espaces entre les mots. -
white-space
définit le comportement des espaces blancs dans un texte. Quand la valeur est utiliséenormal
, qui est pris par défaut, joint plusieurs espaces vides dans le code HTML dans l'une des présentations de la page Web (affichée par le navigateur) et prend les espaces blancs comme référence pour couper une ligne s'il n'y a pas d'espace dans le bloc.La valeur
nowrap
Il joint également les espaces vides répétés en un seul, mais ne divise pas les lignes de texte dans les espaces vides même si la ligne ne rentre pas dans le conteneur, déborde de l'espace si nécessaire et écrit à l'extérieur si nécessaire. Pour diviser expressément les lignes, vous pouvez utiliser l'étiquette<br>
de HTML.En utilisant
pre
Les espaces vides ne sont pas non plus unifiés en les réunissant en un seul, ni les lignes divisées en utilisant les espaces comme référence.pre-line
joignez les blancs répétés et coupez les lignes si nécessaire en utilisant les blancs comme référence.pre-wrap
préserve les espaces répétés et coupe les lignes si nécessaire en utilisant les espaces comme référence.
Couleur
En CSS la couleur peut être exprimée selon Modèle de couleur RVB ou selon Modèle de couleur HSL et dans les deux cas on peut inclure des informations de transparence, la valeur d'un quatrième canal que l'on appelle habituellement canal alpha o composition alpha, ce qui donne naissance aux modèles RGBA et HSLA.
Pour exprimer la couleur dans un format RGB en utilisant la notation hexadécimale, la syntaxe est utilisée #RRGGBB
, avec RR étant la valeur de la composante rouge (en principe, à l'aide de deux chiffres hexadécimaux), GG étant la valeur de la composante verte et BB étant la valeur de la composante bleue. Comme déjà dit, si les deux chiffres de chaque composant ont la même valeur, cela peut être exprimé comme suit : #RGB
limiter le nombre de couleurs disponibles aux couleurs dites Web sécurisées
En plus de cette manière de représenter la couleur, la plus classique et la plus utilisée, elle peut s'exprimer comme rgb(R,G,B)
, hsl(HSL)
, rgba(R,G,B,A)
y hsla(HSLA)
de l'indiquer sous la forme RGB, HSL et leurs formes respectives avec indication de transparence (canal alpha)
Sauf demande contraire en ajoutant le suffixe d'unité, le Modèle RVB utilise des valeurs décimales de 0 à 255, pour les trois composantes, la valeur du composant alpha est un coefficient (décimal de zéro à un) et la première valeur du Modèle de couleur HSL, la teinte, est une valeur décimale comprise entre 0 et 360 (sans unités) représentant un angle. Les valeurs de saturation et de luminosité du Modèle HSL Ils sont généralement exprimés en pourcentages.
Comme cela a déjà été dit, bien que leur utilisation ne soit pas très fréquente, les couleurs peuvent être indiquées par leur nom au format color:black;
au lieu de color:#000000;
. Le premier format est plus lisible mais se limite à un bref tableau de valeurs également plus difficile à modifier numériquement à partir d'une application écrite en JavaScript.
Pour notre proposition de représentation graphique des données des capteurs connectés à l’IoT, nous n’aurons besoin que de trois propriétés liées à la couleur. Ils serviront à la fois à indiquer le nom du texte, qui est maintenant expliqué, et à indiquer le nom de tout composant qui le supporte.
-
color
indique la couleur de l'élément HTML et celui de ce qu'il contient (qui en hérite) à moins qu'il ne soit expressément modifié en attribuant individuellement d'autres couleurs. -
background-color
Utilisé pour définir la couleur de fond d'un élément HTML. En plus d'indiquer la couleur comme valeur RGB o HSL vous pouvez utiliser une valeur spécialetransparent
pour que l'objet n'ait pas de couleur de fond et qu'il soit possible de voir ce qui se trouve derrière lui, c'est-à-dire qu'il ne recouvre pas les éléments sur lesquels il a été dessiné. -
opacity
permet de définir l'opacité (indirectement, la transparence) d'un élément et de tout son contenu (à ne pas confondre avec la transparence du fond). Si la transparence est attribuée à des éléments contenus dans d'autres qui sont eux-mêmes transparents, celle-ci sera augmentée, cela ne fonctionnera pas séparément. Vous ne pouvez pas rendre plus opaque un objet contenu dans un objet transparent. La valeur deopacity
Il s'exprime sous la forme d'un coefficient commeopacity:0.5;
pour indiquer une opacité de 50 %.Les anciennes versions du navigateur de Microsoft n'utilisaient pas cette propriété, mais possédaient la propriété
filter
(filtre) qui, entre autres valeurs, pourrait prendre en charge alpha (pour le canal alpha) auquel un pourcentage d'opacité pourrait être attribué avecopacity
selon le format :1filter:alpha(opacity=50); /* Opacidad del 50% en una versión 8.0 o anterior de Microsoft Internet Explorer */
Guide des tailles :
En CSS, la mesure des éléments <div>
, que nous avons choisi pour composer le conteneur graphique, est défini avec width
(largeur) et height
(haut).
entre le contenu de <div>
et sur son périmètre il y a une zone de remplissage qui est déterminée avec la valeur de padding
. Autour du périmètre de l'objet se trouve le bord dont la mesure est spécifiée avec la propriété border
. Séparer l'extérieur de l'objet <div>
des autres objets environnants, il existe un espace dont la mesure est déterminée par margin
.
Dans des conditions normales, la mesure de l'espace utilisé par l'objet <div>
peut être calculé comme la somme de sa largeur ou de sa hauteur plus le rembourrage (padding
) plus bordure (border
) plus marge (margin
). Lorsque la mesure pertinente établie est l'espace intérieur utile de l'objet <div>
, cette composition est très pratique, mais si l'on connaît la mesure totale disponible ce comportement peut-il être modifié, défini par défaut, de sorte que la mesure totale de la largeur et de la hauteur soit celle indiquée par width
(largeur) et height
(hauteur) en soustrayant la mesure du remplissage, de la bordure et de la marge, au lieu de les ajouter. Pour utiliser ce mode, attribuez le propriété box-sizing
la valeur border-box
(la valeur par défaut est content-box
)
Le diagramme suivant montre graphiquement les valeurs résultant de width
(largeur) et height
(élevé) si vous utilisez box-sizing:border-box;
(le total) oubox-sizing:content-box;
(l'intérieur)
Les valeurs des mesures sont exprimées avec les unités déjà expliquées. Lorsqu'il s'agit de propriétés définies par plusieurs valeurs, les chiffres exprimés avec différents types de moyennes peuvent être mélangés. De plus, il existe certaines valeurs particulières qui sont pertinentes pour l'utilisation que nous allons faire dans cette implémentation de graphiques de capteurs dans l'IoT. Plus précisément, nous pouvons utiliser la valeur auto
sur la propriété margin
comme ressource pour centrer les objets dans certaines circonstances.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
.caja_chica
{
box-sizing:border-box;
width:400px;
height:100px;
padding:5px 10px 15px 20px;
border:2px solid #000000;
margin:10px 10px 10px 10px;
}
.caja_grande
{
width:400px;
height:100px;
padding:5px 10px 15px 20px;
border:2px dashed #FF0000;
margin:10px 10px 10px 10px;
}
|
Dans l'exemple ci-dessus, pour la classe « small_box » une bordure de 2 pixels d'épaisseur est définie, dessinée avec un trait noir (#000000
) continu (solid
). Dans la classe « big_box » la ligne utilisée pour la bordure est en pointillés (dashed
) et la couleur rouge (#FF0000
). Pour exprimer ces valeurs séparément, nous pouvons utiliser border-width
pour l'épaisseur, border-style
pour l'AVC et border-color
pour la couleur. Ces propriétés de bord sont à leur tour composites et sont formées par les entités supérieure, droite, inférieure et gauche, en suivant le sens des aiguilles d'une montre comme expliqué ci-dessus.
Les deux classes définies ont les mêmes mesures, mais la première est plus petite car, en utilisant la valeur border-box
pour la propriété box-sizing
, le remplissage, la bordure et la marge sont dessinés à l'intérieur de l'objet plutôt qu'autour du contenu, comme c'est le cas par défaut. Dans la classe "big_box" ce n'est pas indiqué, donc la valeur est prise par défaut content-box
ce qui provoque l'augmentation du remplissage, de la bordure et de la marge jusqu'à la taille indiquée par width
y height
.
La valeur de la marge de classe dans l'exemple ci-dessus est de 10 pixels en haut, à droite, en bas et à gauche, elle pourrait donc être exprimée sous la forme d'une valeur unique. margin:10px;
. Il est très intéressant de connaître cette alternative pour comprendre le code développé par des tiers même si, dans cette proposition d'implémentation, pour le rendre plus lisible, il est proposé d'indiquer, répétées, les valeurs.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
.laconica /* Clase lacónica */
{
background-color:#00F; /* Equivale a background-color:#0000FF; */
padding:10px 5px; /* Equivale a padding:10px 5px 10px 5px; */
margin:1%; /* Equivale a margin:1% 1%; que equivale a margin:1% 1% 1% 1%; */
border:1px solid #000;
/* Lo anterior puede expresarse de forma menos compacta como:
border-width:1px;
border-style:solid;
border-color:#000;
*/
}
.explicita
{
background-color:#0000FF;
padding:10px 5px 10px 5px;
margin:1% 1% 1% 1%;
border-width:1px 1px 1px 1px;
border-style:solid solid solid solid;
border-color:#000000 #000000 #000000 #000000;
}
.locuaz
{
/* Color de fondo */
background-color:rgb(0,0,255);
/* Relleno, dimensiones */
padding-top:10px;
padding-right:5px;
padding-bottom:10px;
padding-left:5px;
/* Margen, dimensiones */
margin-top:1%;
margin-right:1%;
margin-bottom:1%;
margin-left:1%;
/* Borde, grosor */
border-top-width:1px;
border-right-width:1px;
border-bottom-width:1px;
border-left-width:1px;
/* Borde, estilo */
border-top-style:solid;
border-right-style:solid;
border-bottom-style:solid;
border-left-style:solid;
/* Borde, color */
border-top-color:#000000;
border-right-color:#000000;
border-bottom-color:#000000;
border-left-color:#000000;
}
|
Les trois classes de l'exemple précédent produisent le même résultat, la définition du dit « laconique » étant plus compacte et moins celle du dit « bavard » qui, plus que pour ajouter de la clarté à la lecture, est la forme normalement utilisé pour modifier un aspect partiel et concret d'une propriété, en réutilisant les autres valeurs par héritage (elles sont fournies par le conteneur ou fournies par l'une des classes affectées à l'élément). Si la charge imposée au serveur par le texte supplémentaire de cette façon de définir les propriétés et d'autres circonstances qui, pour rendre le code plus lisible, comme les commentaires, augmentent la taille et donc le trafic, étaient pertinentes, il serait possible de traitez-le (par exemple) à partir de PHP dans le cadre de la stratégie de génération de code à partir de ce langage.
Les dimensions du modèle de boîte affectent principalement les éléments <div>
mais il est possible d'imposer ce comportement à d'autres éléments avec la propriété display
et la valeur block
. Pour faire circuler un élément comme du texte sur une ligne, utilisez display:inline;
et les deux comportements, mesures et flux, peuvent être combinés avec display:inline-block;
La valeur none
sur la propriété display
, utilisé comme display:none;
, permet également de masquer des objets, qui serviront à les "allumer" et à les "éteindre" de JavaScript.
Si les dimensions d'un élément ne sont pas spécifiées, il prend toutes les dimensions nécessaires pour adapter son contenu (en fait, il s'adapte au contenu sans avoir besoin d'établir une dimension). Mais si les dimensions sont indiquées, il peut arriver que les objets contenus ne rentrent pas ; dans un tel cas, les dimensions ne sont pas respectées, elles sont augmentées pour permettre de voir tout le contenu.
Pour que les éléments contenus dans une autre de mesures fixes soient rognés lorsqu'ils dépassent la taille, on utilise la propriété overflow
avec le courage hidden
. avec la valeur scroll
, les objets qui débordent du conteneur sont également découpés, comme cela se produit avec hidden
mais une barre de défilement s'affiche et peut être vue lors de son déplacement. La valeur auto
fait apparaître la barre de défilement uniquement lorsque cela est nécessaire en fonction de la taille du contenu.
Vous pouvez également établir une taille minimale pour que les conteneurs occupent cet espace même si le contenu n'en a pas besoin et sans limiter leurs dimensions pour augmenter lorsque le contenu l'exige. Les propriétés en charge de cette tâche sont min-width
pour l'acho et min-height
pour le grand. Dans le sens inverse, max-width
définir une largeur maximale et max-height
une hauteur maximale qui annule width
ya height
.
Flux d'éléments sur la page Web
Les rectangles (blocs) que nous avons définis avec des éléments <div>
, ils sont placés l'un sous l'autre par défaut. Pour modifier ce comportement, vous pouvez utiliser la propriété float
, indiquant left
o right
comme valeur, de sorte qu'ils s'écoulent respectivement de gauche à droite ou de droite à gauche. Au contraire, pour éviter qu'un objet « flotte » à droite ou à gauche d'un autre, vous pouvez utiliser la propriété clear
avec les valeurs left
, right
o both
, qui remplacent le flux de gauche à droite, de droite à gauche ou les deux.
Contrairement à ce qui se passe dans d'autres circonstances, le flux produit float
ne modifie pas automatiquement les dimensions du conteneur, il est donc utile d'inclure dans ses propriétés overflow:auto;
pour forcer la taille (hauteur) du conteneur à changer lorsqu'un objet le déborde en raison de son emplacement avec float
.
Une autre façon de configurer le flux du contenu d'un élément consiste à le diviser en colonnes avec la propriété column-count
(qui pour le moment devrait être accompagné de -webkit-column-count
et de -moz-column-count
) La taille des colonnes peut être indiquée (en fait suggérée) avec column-width
(-webkit-column-width
-moz-column-width
) et la séparation entre les colonnes avec column-gap
(-webkit-column-gap
-moz-column-gap
)
Pour que les blocs ne soient pas divisés et que leur contenu soit réparti sur plusieurs colonnes, vous pouvez utiliser display:inline-block;
bien que cela l’implique sûrement. laisser une partie de la colonne inutilisée.
Placement
Pour établir l'emplacement des éléments sur la page web, CSS utilise plusieurs modes de positionnement qui peuvent être différents pour chaque élément, c'est-à-dire qu'il est possible de mélanger différents critères de positionnement sur un même site web.
-
position:static;
C'est le positionnement par défaut (il n'est pas nécessaire de l'indiquer s'il n'a pas été modifié au préalable). Ce type de positionnement suit le déroulement "naturel" de la page : un élément après l'autre en partant de la gauche, en grandissant, tant que il y a de l'espace, à droite et de haut en bas. Il n'utilise pas de coordonnées horizontales ou verticales pour établir sa localisation, il suit la position qui correspond à l'ordre de l'objet. -
position:fixed;
Il permet de placer un objet à une position fixe dans la fenêtre du navigateur (comme un menu par exemple). L'emplacement de l'élément est précisé horizontalement avecleft
oright
pour déterminer la séparation respectivement à gauche ou à droite et avectop
obottom
pour la séparation au-dessus ou en dessous du bord de la fenêtre du navigateur (fenêtre).En utilisant ce type de positionnement et d’autres, les objets peuvent se chevaucher. Objets dessinés en premier (définis plus tôt dans le code HTML) peuvent être couverts par ceux tirés ultérieurement (ceux inclus ultérieurement dans le code HTML). Pour modifier l'ordre normal, vous pouvez utiliser la propriété
z-index
, les objets ayant la valeur la plus élevée dansz-index
Ils couvrent ceux qui ont moins de valeur. -
position:relative;
Déplace l'élément de sa position "normale" comme indiqué par les propriétésleft
oright
horizontalement ettop
obottom
verticalement. -
position:absolute;
Place l'élément dans une position fixe par rapport à l'objet qui le contient. Sa localisation s'exprime, comme dans les cas précédents, parleft
,right
,top
ybottom
Le nom de ce type de positionnement prête à confusion au début, puisque la position est établie par rapport à l'objet hiérarchiquement supérieur à celui qui utilise la propriété, dont on peut se demander si elle est absolue.
Il est également important de rappeler que l'élément qui contient les objets
<div>
que nous utilisons au premier niveau hiérarchique est<body>
, donc, si le<div>
Qu'est ce que tu utilisesposition:absolute;
n'est pas contenu dans un autre, son positionnement sera "absolu" par rapport à la page web.
Propriétés pour des médias et caractéristiques spécifiques (requêtes multimédias)
CSS permet de définir dans une même feuille de style différentes apparences pour différents supports ou supports selon le type de périphérique utilisé (comme un écran, ou une imprimante), ses dimensions, son orientation (verticale ou paysage) ou encore sa résolution. Cela sert à pouvoir afficher, de la manière la plus appropriée pour un contexte, la même page Web.
Pour faire référence aux médias, utilisez @media
de la même manière que ce qui a déjà été expliqué pour les polices avec @font-face
, entouré d'accolades ({
y }
) les définitions des différents éléments : labels HTML, classes, identifiants...
Les types de médias disponibles dans CSS3 sont: all
, pour désigner n'importe quel média (tous), screen
pour tout type d'écran (anciennes versions de CSS Ils ont fait la distinction entre les écrans de télévision et d'ordinateur) print
pour la sortie de l'imprimante et speech
pour les lecteurs Web audio qui interprètent les informations avec des synthétiseurs vocaux.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@media screen
{
.texto
{
color:#FFFFFF;
background-color:#000000;
}
}
@media print
{
.texto
{
color:#000000;
background-color:#FFFFFF;
}
}
|
Dans l'exemple ci-dessus, les éléments de la classe text ont un fond noir et du texte blanc à l'écran mais sont imprimés avec un fond blanc et du texte noir.
Des conditions peuvent être imposées aux médias pour définir différents ensembles de propriétés en fonction, par exemple, de la résolution disponible ou du rapport de fenêtre. Ces conditions et les moyens eux-mêmes peuvent être composés d'opérations logiques and
, not
y only
pour exiger que vous vous conformiez à plusieurs, que vous ne vous conformiez pas ou seulement lorsque vous vous conformez, respectivement.
Parmi les conditions disponibles, nous les trouvons particulièrement intéressantes max-width
(largeur maximale de la fenêtre), max-height
(hauteur maximale de la fenêtre), min-width
(largeur minimale de la fenêtre), min-height
(hauteur minimale de la fenêtre), orientation
(l'orientation, qui peut être landscape
, paysage ou portrait
, verticale), max-resolution
(résolution maximale en dpi
, points par pouce ou en dpcm
, points par centimètre) et min-resolution
(résolution minimale, également en dpi
o dpcm
).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
@media all
{
.bloque_principal
{
background-color:#CCCCCC;
}
}
@media screen and (min-width:320px)
{
.bloque_principal
{
width:300px;
margin-left:auto;
margin-rigth:auto;
}
}
@media screen and (min-width:640px)
{
.bloque_principal
{
width:620px;
}
}
@media print
{
.bloque_principal
{
background-color:#FFFFFF;
}
}
|
Dans l'exemple précédent, on commence par définir une couleur de fond pour que, dans tous les médias, les éléments de la classe main_block aient la couleur de fond #CCCCCC. Lorsqu'il est affiché sur un écran et que la fenêtre fait au moins 320 pixels de large, les marges gauche et droite seront automatiques (centrer le bloc) et la largeur de l'élément sera de 300 pixels. Si la résolution de l'écran est de 640 pixels, la largeur du bloc sera de 620 pixels. Étant donné que la deuxième définition de média n’inclut pas d’informations sur la marge et que les appareils qui remplissent la deuxième condition rempliront également la première, la marge horizontale sera toujours automatique.
Enfin, dans l'exemple, la couleur d'arrière-plan est modifiée pour qu'elle soit blanche sur l'impression.
La manière habituelle de définir les styles pour différents supports est généralement de commencer par les styles courants, généralement les couleurs et les polices, suivis des géométries les plus restrictives (les mesures des appareils avec le plus petit nombre de pixels) généralement pour les smartphones et les tablettes où, en plus Il sera important de savoir s'ils sont utilisés verticalement ou horizontalement avec orientation
et sûrement aussi sa résolution avec min-resolution
. Ensuite, les différentes tailles pour les écrans plus grands sont indiquées, et cela se termine généralement par les supports d'impression et vocaux, qui dans l'exemple des graphiques IoT ont été omis.
Utiliser @media
Des conditions imposantes telles que les dimensions, la résolution et l'orientation permettent au concepteur de créer une seule page Web qui, avec différents styles, sera la plus appropriée pour chaque appareil. Ce comportement est généralement appelé conception réactive ; design adaptable, dans une traduction très libre.
CSS pour conteneur graphique SVG
Avec ce qui a été expliqué jusqu'à présent, il est désormais possible de définir les styles que le Conteneur HTML de graphiques SVG avec lequel représenter l’état des capteurs connectés à l’IoT. Dans le code suivant se trouve la proposition comprenant, commentée, la répartition en colonnes qui correspond à un plus grand nombre de graphiques que ceux qu'utilise la proposition de la série d'articles, afin qu'elle puisse être réutilisée dans d'autres cas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
@font-face /* Descripción del tipo de letra ancho */
{
font-family:“SircuitoExpandedLight”;/* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Expanded-Light.eot’);
src: url(‘tipos/Sircuito-Expanded-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Expanded-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Expanded-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Expanded-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra normal */
{
font-family:“SircuitoRegularLight”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Regular-Light.eot’);
src: url(‘tipos/Sircuito-Regular-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Regular-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Regular-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Regular-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra comprimido */
{
font-family:“SircuitoCondensedLight”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Condensed-Light.eot’);
src: url(‘tipos/Sircuito-Condensed-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Condensed-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Condensed-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Condensed-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra normal de grosor normal */
{
font-family:“SircuitoRegularMedium”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Regular-Medium.eot’);
src: url(‘tipos/Sircuito-Regular-Medium.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Regular-Medium.woff’) format(‘woff’),
url(‘tipos/Sircuito-Regular-Medium.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Regular-Medium.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@media all
{
body
{
font-family:“SircuitoCondensedLight”;
margin:0px;
column-count:1;
-webkit-column-count:1; /* Viejos Chrome, Opera y Safari */
-moz-column-count:1; /* Viejos Firefox */
column-gap:8px;
-webkit-column-gap:8px;
-moz-column-gap:8px;
background-color:#FFFFFF;
}
.bloque_sensor, .bloque_titulo, .bloque_descripcion, .bloque_fecha, .bloque_grafico
{
display:inline-block;
box-sizing:border-box;
width:100%;
color:#205587;
}
.bloque_sensor
{
min-width:320px;
height:100%;
background-color:#EDEDED;
}
.bloque_titulo
{
padding:16px 16px 0px 20px;
font-size:25px;
}
.bloque_descripcion
{
padding:2px 16px 0px 20px;
font-size:15px;
}
.bloque_fecha
{
padding:2px 16px 8px 20px;
font-size:17px;
}
.bloque_grafico
{
height:200px;
padding:4px 20px 20px 20px;
}
.grafico
{
background-color:#A8C3EA;
}
}
@media (min-width:360px)
{
body
{
margin:8px 8px 0px 8px;
}
.bloque_sensor
{
margin:0px 0px 8px 0px;
background-color:#E9E9E9;
}
}
@media (min-width:460px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:530px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
@media (min-width:690px)
{
body
{
font-family:“SircuitoCondensedLight”;
column-count:2;
-webkit-column-count:2; /* Viejos Chrome, Opera y Safari */
-moz-column-count:2; /* Viejos Firefox */
}
}
@media (min-width:870px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:1010px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
/*
@media (min-width:1020px)
{
body
{
font-family:”SircuitoCondensedLight”;
column-count:3;
-webkit-column-count:3;
-moz-column-count:3;
}
}
@media (min-width:1280px)
{
body
{
font-family:”SircuitoRegularLight”;
}
}
@media (min-width:1570px)
{
body
{
font-family:”SircuitoExpandedLight”;
}
}
*/
@media (min-width:1610px)
{
body
{
font-family:“SircuitoCondensedLight”;
column-count:4;
-webkit-column-count:4; /* Viejos Chrome, Opera y Safari */
-moz-column-count:4; /* Viejos Firefox */
}
}
@media (min-width:1710px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:2010px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
/*
@media (min-width:2200px)
{
body
{
font-family:”SircuitoRegularLight”;
column-count:5;
-webkit-column-count:5;
-moz-column-count:5;
}
}
@media (min-width:2520px)
{
body
{
font-family:”SircuitoExpandedLight”;
}
}
*/
|
Ci-dessous, vous pouvez voir à quoi ressembleraient ces styles. Code HTML du conteneur proposé pour les graphiques SVG de l'article précédent.
Le prochain article de cette série explique comment dessiner avec SVG Graphiques de données de l'état des capteurs connectés à l'Internet des objets (IoT).
Poster un commentaire