CSS

linguaggio usato per definire la formattazione di documenti HTML, XHTML e XML
Disambiguazione– Se stai cercando altri significati, vediCSS (disambigua).

Cascading Style Sheets,meglio noto comeCSS(in italianofogli di stile a cascata), è un linguaggio usato per definire laformattazionedi documentiHTML,XHTMLeXML,ad esempio isiti webe relativepagine web.Le regole per comporre il CSS sono contenute in un insieme di direttive (Recommendations) emanate a partire dal1996dalW3C.

Cascading Style Sheets
Estensione.css
Tipo MIMEtext/css
Uniform Type Identifier (UTI)public.css
SviluppatoreW3C
1ª pubblicazione17 dicembre 1996
Formato aperto?
Sito webw3.org/TR/CSS

L'introduzione del CSS si è resa necessaria per separare i contenuti delle pagine HTML dalla loro formattazione o layout e permettere unaprogrammazionepiù chiara e facile da utilizzare, sia per gli autori delle pagine stesse sia per gli utenti, garantendo contemporaneamente anche ilriutilizzo di codiceed una sua più facile manutenzione.

Lo stesso argomento in dettaglio:Tipografia webeFormattazione del testo.

Per permettere agli autori di poter plasmare liberamente l'aspetto dellepagine web,dal 1993 in poiNetscape NavigatoredInternet Explorer,i due software di navigazione che si disputavano gli utenti nella notaguerra dei browser,presentaronotag proprietari,ovvero non aderenti aglistandardné compatibili con i browser concorrenti. Un esempio di questi tag era<font>che andava a definire ilfontdei caratteri.

Questi tag proprietari di formattazione erano l'unico modo per gli autori di definire la formattazione, così il loro uso è diventato molto intenso. Tuttavia questi tag presentavano tre problemi:

  1. Il primo problema è costituito dalla lunghezza dei tag. Se confrontata con una pagina che adotta il linguaggioCSS,una pagina che non lo adotta è in genere più pesante (in termini dibit) in un rapporto che spesso raggiunge lo 0,2%.[senza fonte]Inoltre, le istruzioni CSS possono essere raccolte in unfileesterno che rimane memorizzato nellacachedel browser, riducendo ulteriormente la quantità di dati che iserverdevono trasmettere.
  2. Il secondo problema risiede nella mancanza di logica del codice (X)HTML. Un codice non aderente agli standard, ridondante e confuso comporta infatti molto lavoro aggiuntivo per i browser, che devono cercare di correggere ed interpretare (quando possibile) direttive arbitrarie.
  3. Il terzo problema è la mancanza di compatibilità con icomputer palmarie glismartphone.Queste pagine infatti sono progettate per schermi con risoluzione minima 800×600 pixel. Dispositivi come i palmari (o i più modernitablet) che possono avere una risoluzione inferiore ed una forma dello schermo ben diversa dal rapporto 4:3 dei monitor percomputer,si trovano quindi impossibilitati a visualizzare correttamente la pagina con il risultato che l'utente si troverà una pagina confusa e scomoda da leggere.

Un'ulteriore questione era, nelle pagine web non standard, l'uso del tag<table>(letabelle) per realizzare l'impaginazione delle pagine web. L'impaginazione tabellare viene considerata deprecabile dai puristi, in quanto le tabelle sono pensate per impaginare dati tabulari e nonlayoutweb. Oltre a questo, l'uso delle tabelle comporta anche svantaggi pratici: aumento del peso delle pagine, come già indicato al problema 1, e peggioramento dell'accessibilità, in quanto l'ordine logico dei dati può dover essere sacrificato per motivi di layout.

Un altro modo di creare siti web negli anni 90 e 2000 (fino al suo abbandono il 31 dicembre 2020 da parte di Adobe[1]) eraAdobe Flashche permetteva (in modo vettoriale) di creare animazioni, trasformazioni e in generale un layout molto più accattivante di HTML e CSS. Oltretutto permetteva di integrare qualsiasi font anche se l'utente sul suo dispositivo non lo aveva. Questi problemi furono risolti con HTML5 e CSS3.

Un altro problema era creare la formattazione delle pagine HTML incorporando gli stili nei tag e il carattere tipografico nel tag "font" (ora deprecato). Ciò rendeva il codice complicato e spesso disordinato. Ad esempio:

<pstyle="color:blue;font-size:46px;">
Wikipedia è un'enciclopedia
</p>

Per tentare di risolvere questa situazione, nel 1996 ilW3Cemanò le specifiche CSS 1. I CSS 1 erano un interessante sistema per separare contenuto daformattazione.La base di questo linguaggio, infatti, consisteva nel fatto che il contenuto sarebbe stato sempre definito dal codice (X)HTML, mentre la formattazione si sarebbe trasferita su un codicecompletamente separato,il CSS appunto. I richiami tra i due codici venivano effettuati tramite due particolari attributi:classeID.Queste specifiche:

  1. Erano un'efficace soluzione al primo problema (escludendo la questione del tag<table>) perché riducevano notevolmente le dimensioni delle pagine.
  2. Risolvevano il secondo in modo parziale perché consentivano al codice (X)HTML di ritornare in gran parte semplice ed essenziale, ma presentavano qualche mancanza che costringeva a ricorrere ai tag HTML.
  3. Non prendevano però in considerazione il terzo problema, dato che nel 1996 iPDA(i palmari) erano scarsamente diffusi.

I CSS sviluppavano un'idea semplice ma efficace, ma nonostante le loro grandi potenzialità non ebbero successo a causa della mancanza di browser in grado di supportarli.

CSS 2 e CSS 2.1

modifica

Per includere le nuove funzionalità e rendere i CSS un linguaggio ben supportato, nel 1998 il W3C pubblicò le specifiche CSS 2. Nel 2004 iniziarono i lavori sulle specifiche aggiornate CSS 2.1 che divennero raccomandazione ufficiale il 7 giugno 2011. I CSS 2 sono la naturale evoluzione dei CSS 1 ed offrono potenti soluzioni per risolvere soprattutto il terzo problema, con la possibilità di creare fogli di stile separati per i dispositivi portatili. Anche il secondo problema è ormai pienamente risolvibile, scrivendo una pagina (X)HTML esclusivamente indirizzata alla struttura e ai contenuti e manovrandola poi esclusivamente con i CSS per impaginarla.

A partire daInternet Explorer 5,FirefoxeOpera 7,i CSS 2 hanno potuto avvalersi di browser in grado di interpretarli e sono quindi entrati a far parte del codice di molti siti web.

Si cominciò a creare i primi tipi di layout senza tabelle (solitamente a uno, due o tre colonne)[2][3]:

  • layout fisso: aveva una dimensione standard su tutti i dispositivi.
  • layout fluido-elastico: variava la larghezza al variare della larghezza della finestra del browser ma nel caso di schermi molto ampi i testi si dilatavano molto e il layout presentava righe di testo molto lunghe e fastidiose da leggere.
Lo stesso argomento in dettaglio:CSS Animations.

A differenza delle specifiche CSS 2, che è costituita da un'unica specifica, le specifiche CSS3 sono costituite da sezioni separate dette "moduli". A causa di questa modularizzazione, le specifiche CSS3 hanno differenti stati di avanzamento e stabilità.[4]A novembre 2014, cinque moduli risultavano pubblicati formalmente dalW3Ccomeraccomandazioni:

HTMLe CSS3 costituiscono un linguaggioturing completo[5][6],condizione sufficiente per un linguaggio per essere considerato unlinguaggio di programmazione.

I CSS3 presentano nuove possibilità e proprietà rispetto a CSS2[7][8].Le più importanti sono:

  • la possibilità di utilizzare codice CSS al posto delle immagini (jpg, png...) per creare trasparenze, bordi arrotondati e ombreggiature
  • la possibilità di creareanimazioni,trasformazioni e scalature come era possibile fare conAdobe Flash
  • nuovi selettori e classi
  • la possibilità di adattare il layout delle pagine web a vari dispositivi e media non più utilizzando più fogli di stile per ogni dispositivo ma uno solo che adatta la pagina a tutti.
  • la possibilità di sostituireJavaScriptper crearetooltip,gallerie d'immagine e altro[9][10][11].
PROPRIETÀ CSS3 TIPOLOGIE ESEMPIO
Selettori
Selettori di base
  • Selettore universale
  • Selettori di tipo
  • Selettori di classe
  • Selettori di ID
* {color: red}

h1 {color: red}

.titolo {color: red}

#titolo {color: red}

Selettori combinatori o di relazione
  • Selettore di discendenti
  • Selettore di figli
  • Selettore di fratelli adiacenti
  • Selettore generale di fratelli
div#container p {color: red}

body > p {color: red}

h1 + h2 {color: red}

h1 ~ h2 {color: red}

Selettori di attributo
  • E[attribute]
  • E[attribute=value]
  • E[attribute~=value]
  • E[attribute|=value]
  • E[attribute^=value]
  • E[attribute$=value]
  • E[attribute*=value]
a[title] {color: blue}

a[title= "Lorem" ] {color: blue}

a[title~= "dolor" ] {color: blue}

a[title^= "Lorem" ] {color: blue}

a[title$= "amet" ] {color: blue}

a[title*= "dolor" ] {color: blue}

Pseudo-classi e pseudo-classi strutturali
  • E:root
  • E:nth-child()
  • E:nth-last-child()
  • E:last-child
  • E:only-child
  • E:nth-of-type()
  • E:nth-last-of-type()
  • E:first-of-type
  • E:last-of-type
  • E:only-of-type
  • E:empty
:root {background-color: red}
Altre pseudo-classi
  • Pseudo-classe:target
  • Pseudo-classe:not
  • Pseudo-classi degli stati degli elementi della UI (User Interface):
    • E:enabled
    • E:disabled
    • E:checked
div:target {border: 3px}

div:not(.nero) {color: red}

input:enabled {color:red}

Pseudo-classi per la validazione
  • :default
  • :valid
  • :invalid
  • :in-range
  • :out-of-range
  • :required
  • :optional
  • :read-only
  • :read-write
:default {background:red}
Pseudo-elementi
  • ::first-letter
  • ::first-line
  • ::before
  • ::after
::first-letter {color:red}
Colore
Opacità opacity div {background:white; color:black; opacity: 0.5}
Colore RGBa rgb

rgba

body {background-color: rgb(100%, 100%, 100%)}

_____________________

body {background-color: rgb(255, 255, 255)}

_____________________

body {background-color: rgba(255, 255, 255, 0.5)}

Colore HSLa hsl

hsla

body {background-color: hsl(0, 100%, 50%) }

______________________

#box1 { background-color: hsla(0,100%,100%,0.5); }

Bordi
Angoli arrotondati
  • border-top-left-radius
  • border-top-right-radius
  • border-bottom-right-radius
  • border-bottom-left-radius
  • border-radius
#box1 {border-top-left-radius: 20px}
Bordi decorati border-image #border (border-image: url(border.png) 27 27 27 27 round round; }
Ombre dei contenitori box-shadow box-shadow: 5px 5px 10px 2px #333333;
Sfondi
Sfondi multipli url(prima immagine), url(seconda immagine),... background-image: url(immagine1.png), url(immagine2.png);
Taglio della immagine di sfondo
  • border-box
  • padding-box
  • content-box
#box {background-clip: border-box}

#box {background-clip: padding-box}

#box {background-clip: content-box}

Posizione della immagine di sfondo
  • border-box
  • padding-box
  • content-box
background-origin: padding-box;
Dimensione dello sfondo
  • dimensione espressa in percentuale;
  • dimensione espressa con un’unità di misura;
  • proprietàcover;
  • proprietàcontain.
background-size: 50% 50%;

background-size: 200px 50px;

background-size: cover;

background-size: contain;

Gradienti come immagini di sfondo linear-gradient background-image: linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
Testo e font
Web fonts

(alternativa aGoogle fonts)

@font-face @font-face {
font-family: myFirstFont;
src: url(sansation_light.woff);

}

Interruzione del testo word-wrap: #box {word-wrap: break-word; }
Ombra sotto il testo text-shadow: p {text-shadow: 2px 2px 3px #333;}
Orientamento del testo (ad esempio per le lingue dove il testo è verticale)[12][13][14] writing-mode:"valore";

text-orientation:"valore";

text-orientation: mixed;

upright;

sideways;

use-glyph-orientation;


writing-mode: horizontal-tb;

vertical-rl;

vertical-lr;

Caratteri speciali content: "carattere speciale"; h1:after {
content: ' \00A7';

}

Direzione del testo horizontal-tb;

vertical-rl;

p.contenuto1 {
writing-mode: horizontal-tb;

}

Contorno del testo width:

color:

h1 {text-stroke: 1px black;}
Interruzione del testo text-overflow: clip;

text-overflow: ellipsis ellipsis;

text-overflow: ellipsis "[..]";

Valori globali:

  • inherit;
  • initial;
  • revert;
  • unset;
.overflow-clip-clip

{text-overflow: clip clip;}

.overflow-clip-ellipsis {text-overflow: clip ellipsis;}

.overflow-ellipsis-ellipsis {text-overflow: ellipsis ellipsis;}

Layout e box model
Eccedenze overflow-x:

overflow-y:

#box2 {overflow-x: hidden; }
Posizione dei contenitori box-sizing: #box1 { box-sizing: content-box; }
Layout multicolonna
  • Proprietà di base:
    • column-width
    • column-count
    • column-gap
    • column-rule
  • Per pagine stampate:
    • break-before
    • break-after
    • break-inside
  • Gestione delle colonne
    • column-span
    • column-fill
#container { width: 750px; margin: 20px auto; column-width: 350px; column-gap: 25px; }
Flexible box layout
  • Display: box
  • Orientamento dei box
  • Direzione e l’ordine dei box
  • Allineamento e spazio box-align box-pack Box flessibili
display: box;

box-orient: vertical;

box-align: center;

box-pack: justify;

box-flex: 1;

Media queries
  • all:il CSS si applica a tutti i dispositivi di visualizzazione;
  • screen:schermo di computer;
  • print:pagina stampata;
  • projection:presentazioni e proiezioni;
  • speech:dispositivi a sintesi vocale;
  • braille:supporti basati sull’uso del braille;
  • em Boss ed:stampanti braille;
  • handheld:dispositivi mobili con schermo piccolo e dotati di browser con limitate capacità grafiche;
  • tty:dispositivi a carattere fisso come i terminali;
  • tv:visualizzazione su schermi televisivi
@media screen and (color) {regole css}
Transizioni, trasformazioni e animazioni
Transizioni
  • transition-property
  • transition-duration
  • transition-timing-function
  • transition-delay
div {transition-property: background-color; transition-duration: 2s; }
Trasformazioni
  • transform e transform-origin
  • matrix
  • translate
  • scale
  • rotate
  • skew
  • trasformazioni multiple
transform: rotate(40deg);

transform-origin: left bottom;

matrix( a, b, c, d, tx, ty );

transform: translate(10px, 10px);

transform: scale(0.5);

transform: rotate(180deg);

transform: skew(15deg, 20deg);

transform: rotate(180deg) skew(20deg, 30deg) scale(2);

Animazioni @keyframe
  • animation-name
  • animation-duration
  • animation-iteration-count
  • animation-timing-function
  1. ease;
  2. linear;
  3. ease-in;
  4. ease-out;
  5. ease-in-out;
  6. cubic-bezier.
@keyframes 'pulse' { from { background-color: red; opacity: 1.0; -transform: scale(1.0) rotate(0deg); }
Grafica
Filtri filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url(); img {
filter: blur(5px);

}

Maschere
  • mask-clip
  • mask-composite
  • mask-image
  • mask-mode
  • mask-origin
  • mask-position
  • mask-repeat
  • mask-size
mask: url(masks.svg#star) luminance;

Caratteristiche

modifica
Un file CSS esterno può formattare un numero infinito di pagine HTML ed evita quindi di riscrivere lo stesso codice in tutte le pagine.

Il codice

modifica

L'inserimento di codice CSS nelle pagine web può essere effettuato in tre modi diversi:

  • Inserendo nel tag<head>della pagina in codice HTML un collegamento ad un foglio di stile esterno, cioè un file contrassegnato dall'estensione.csscome negli esempi seguenti, tramite il taglinko tramite ladirettivaimport,che può essere utilizzata anche negli stessi file.cssper collegare più file tra loro:
<html>
<head>
<title>Esempio</title>
<linkrel="stylesheet"type="text/css"href="foglio_di_stile.css"/>
</head>
oppure
<html>
<head>
<title>Esempio</title>
<styletype="text/css">
@importurl(foglio_di_stile.css);
</style>
</head>

questa soluzione garantisce il massimo riuso di codice possibile potendo essere richiamato in ciascuna delle pagine web HTML desiderate.

  • Inserendo, sempre all'interno dell'<head>tra gli specifici tag<style>e</style>le dichiarazioni css.
<html>
<head>
<title>Esempio</title>
<styletype="text/css">
codicecss
</style>
</head>

Questa soluzione garantisce un minor riuso di codice rispetto al precedente potendo essere utilizzato solo all'interno della pagina HTML in cui è dichiarato.

  • In linea all'interno degli elementi
<tag style= "dichiarazioni CSS" >...</tag>

Questa soluzione garantisce un riuso di codice ancora minore rispetto al precedente.

Un foglio di stile CSS è sintatticamente strutturato come una sequenza diregole,che sono coppie costituite da unselettoree unblocco di dichiarazioni,racchiuso tra parentesi graffe. Un selettore è unpredicatoche individua certi elementi del documento HTML; una dichiarazione, separata con unpunto e virgoladalle altre, è a sua volta costituita da unaproprietà, ovvero un tratto di stile (come il colore del testo) e unvaloreda assegnare a quest'ultimo (per esempio blu). separati dai due punti.

selettore1{
proprietà1:valore1;
proprietà2:valore2;
}
selettore2{
proprietà3:valore3
}

Selettori

modifica

Si descrivono di seguito alcune delle principali tipologie di selettori.

Selettori di tipo

modifica

I selettori di tipo applicano la regola a tutti gli elementi della pagina del tipo determinato. Esempi:

body{
[...]
}

o

p{
[...]
}

Selettori di classe

modifica

Le classi applicano la regola a tutti gli elementi della pagina che presentano la proprietàclass= "nome_classe".La sintassi CSS è la seguente:

.nome_classe{
[...]
}

Selettori d'identificatore

modifica

Gli identificatori (comunementeID) applicano la regola a quell'elemento della pagina che presenta la proprietàid= "nome_identificatore".Gli ID contraddistinguono elementiunici.La sintassi CSS è la seguente:

#nome_identificatore{
[...]
}

Selettori di pseudo-classe

modifica

Le pseudoclassi identificano elementi in base alle loro proprietà.

  • first-childindividua un elemento solo se è ilprimo figliodell'elemento padre. Così quindi
p:first-child{
[...]
}

individuerà nel codice (X)HTML sottostante solo il primo paragrafo.

<body>
<p>Lorem ipsum</p>
<p>Lorem ipsum</p>
<p>Lorem ipsum</p>
</body>
  • linkevisitedsi applicano ai collegamenti. La prima identifica i collegamenti non visitati, la seconda quelli visitati. La sintassi CSS è:
a:link{
[...]
}
  • active,focusehoveridentificano gli elementi solo in particolari condizioni, la prima se l'elemento è attivo, la seconda se è selezionato, la terza se il cursore del mouse è sopra di esso. Quindi
p:hover{
[...]
}

si applicherà solo se il puntatore del mouse andrà sopra un paragrafo e solo per il tempo che vi rimarrà.

  • langsi utilizza per identificare gli elementi di una certa lingua ma il suo supporto è esiguo.

Selettori di pseudo-elementi

modifica

Gli pseudo-elementi identificano solo una parte di un elemento, senza la necessità di utilizzare la marcatura (X)HTML.

  • first-lineindividua solo la prima linea di un paragrafo. Se la finestra del browser cambia dimensione si adatterà automaticamente alla nuova dimensione della linea. La sintassi CSS è la seguente:
p::first-line{
[...]
}
  • first-letterindividua solo il primo carattere di un elemento.
  • beforeeaftersono due pseudoclassi utilizzate nella creazione deicontenuti generati.Non individuano un elemento, ma una posizione dove creare i contenuti. Sono poco utilizzate, dato il mancato supporto di Internet Explorer.

Selettori di gerarchia

modifica

Identificano solamente gli elementi che si trovino in una particolare relazione derivante dalla struttura arborescente del documento (X)HTML, come la discendenza, la figliolanza, la fratellanza.

  • Il selettore di discendenza identifica solo gli elementi contenuti in altri elementi. Così
pspan{
[...]
}

identifica solo gli elementi<span>contenuti in elementi<p>.

  • Il selettore figlio identifica invece solo gli elementi che siano contenutidirettamentenell'elemento padre. Così
div>p{
[...]
}

individua solo i<p>contenuti direttamente in un<div>.

  • Il selettore fratello identifica ilprimoelemento immediatamente successivo ad un altro con cui condivida lo stesso padre. Così
h1+p{
[...]
}

individua solo il primo<p>fratello di<h1>

Selettori di attributo

modifica

Il selettore di attributi permette, tramite la sintassi che segue, di identificare elementi (X)HTML in base ai loro attributi.

a[title=Esempio]{
[...]
}

Questa regola si applica solo agli elementi<a>che presentano l'attributotitle= "Esempio".I selettori di attributi sono molti e permetterebbero un controllo eccellente della pagina, ma Internet Explorer non li supporta ed il loro uso è quindi molto limitato.

Esempio di Griglia CSS

Griglie CSS

modifica

Le Griglie CSS sono un sistema di layout bidimensionale, ossia che può gestire sia colonne che righe, a differenza diflexboxche è in gran parte un sistema monodimensionale. Si applicano le regole CSS sia a un elemento genitore (che diventa il Grid Container) che ai figli di quell'elemento (che diventano Grid Items)[15].

CSS
.grid-container {
display: grid;
grid-template-columns: auto auto auto;
background-color: #2196F3;
padding: 10px;
}
.grid-item {
background-color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(0, 0, 0, 0.8);
padding: 20px;
font-size: 30px;
text-align: center;
}
---------------------------------------
HTML
<divclass="grid-container">
<divclass="grid-item">1</div>
<divclass="grid-item">2</div>
</div>

CSS per la stampa

modifica
Confronto tra pagina web a schermo e stampata

Con i CSS si può fare in modo che l'utente, nel caso stampi una pagina web, stampi solo determinati elementi della pagina e non tutta. Solitamente si toglie dalla pagina stampata il menu, l'immagine di sfondo e i banner pubblicitari. Nel caso la pagina web sia particolarmente ricca di grafica e impaginata in modo creativo e non standard, si tende a farla stampare in modo più classico e standard[16][17].Un'alternativa al CSS per la stampa sono alcuni plugin dei browser che permettono all'utente di togliere dalla stampa determinati elementi della pagina web[18].

Esempio di CSS esterno per la stampa collegato ad una pagina web HTML:

<linkrel="stylesheet"href="main.css"/>
<linkrel="stylesheet"media="print"href="print.css"/>

Esempio di CSS esterno per la stampa:

/* main.css */
body{
margin:2em;
color:#fff;
background-color:#000;
}

/* print.css */
@mediaprint{

body{
margin:0;
color:#000;
background-color:#fff;
}

}
Lo stesso argomento in dettaglio:Colori Web.

I colori Websonocoloriusati nellavisualizzazione di pagine WebsulWorld Wide Webe nei metodi per descrivere e specificare tali colori. I colori possono essere specificati come una triplettaRGBo in formatoesadecimale(unatripletta esadecimale) o in alcuni casi in base ai loro nomi comuni inglesi. Uno strumento di prelievo colore o un altrosoftware di graficaviene spesso utilizzato per generare valori di colore. Un esempio:#0099CC(un tipo di azzurro che si può anche scriverePacific Blue).

Cambiamento del nome dei colori

modifica

I CSS3 permettono di rinominare i colori a piacere e richiamarli successivamente[19]:

$color-danube:#668DD1;

/* RICHIAMO */
$color- Alpha:$color-danube;

Creazione di variabili

modifica
Lo stesso argomento in dettaglio:SasseLess (CSS).

Sass(SyntacticallyAwesomeStyleSheets) è un'estensione del linguaggio CSS che permette di utilizzarevariabili,di crearefunzionie di organizzare il foglio di stile in piùfile.

Less(LESS) è unpreprocessoreCSS che estende il normale linguaggio CSS permettendo (oltre alla normale sintassi dei fogli di stile) anche l'utilizzo difunzioni,operatorievariabili,la nidificazione delle istruzioni, la creazione di "mixin" e numerose altre caratteristiche che rendono il codice più facile da scrivere, da mantenere e da comprendere.

Proprietà

modifica

Le proprietà CSS sono numerose. Le più utilizzate sono:

  • width e height.Queste proprietà vengono utilizzate per impostare l'altezza e la larghezza di un determinato elemento.
  • background.Definisce lo sfondo di un elemento. È una scorciatoia (shorthand properties) perbackground-attachment,background-color,background-image,background-positionebackground-repeat.
  • border.Definisce il bordo di un elemento. È una scorciatoia (shorthand properties) perborder-color,border-styleeborder-width.
  • color.Definisce il colore del testo di un elemento. Per definire lo sfondo si utilizza la proprietàbackground.
  • position.Definisce il tipo di metodo di posizionamento utilizzato per un elemento (statico, relativo, fisso, assoluto o appiccicoso).
  • z-index.Specifica l'ordine di un elemento posizionato e dei suoi discendenti (sopra o sotto gli altri presenti in pagina).
  • float.Questa proprietà definisce un bloccoflottante,ovvero che permette la disposizione di altri elementi ai suoi lati.
  • font-family.Definisce le proprietà del carattere. È una scorciatoia (shorthand properties) perfont-family,font-sizeefont-weight.
  • marginepadding.Definiscono lo spazio circostante gli elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.
  • text-align.Definisce l'allineamento degli elementi, tra cui il testo.
  • !important.Fa prevalere una regola CSS rispetto alle altre
  • min-widthemax-width.Permettono di far apparire e scomparire un elemento a seconda della dimensione del dispositivo
  • clear.Impedisce che a fianco di un elemento compaiano altri elementi con il float

Se non specificata, una proprietà assume i valori predefiniti di ogni browser, o in seconda istanza lo stile utente scelto, altrimenti può assumere uno dei seguenti:

  • inherit
  • auto
  • numero
  • percentuale
  • colore
  • URI
  • font
  • altri valori tipici di ogni proprietà

La stringainheritspecifica che la proprietà deve ereditare il valore dagli elementi da cui l'elemento discende. La stringaautoha significati molto diversi a seconda della proprietà a cui viene assegnata.

Se i numeri sono contraddistinti da un'unità di misura è necessario che tale unità sia espressa (tranne che nel caso dello zero). Tra il numero e l'unità non devono esserci spazi, come nell'esempio che segue:

p{
margin:5px;
border:1em;
padding:0;
}

I colori possono essere indicati con più di un sistema. Ad esempio il colore arancione può essere indicato con:

orange/* colore predefinito */
rgb(255,165,0)/* formato rgb da 0 a 255 */
rgb(100%,64%,0%)/* è possibile utilizzare le percentuali */
rgba(255,165,0,1)/* è possibile specificare l' Alpha che va da 0 a 1 */
hsl(39,100%,50%)/* notazione hue saturation lightness */
hsla(39,100%,50%,1)/* è possibile specificare l' Alpha */
#ffa600/* formato esadecimale RRGGBB */
#ffa600ff/* formato esadecimale RRGGBBAA */
#fa0/* formato esadecimale RGB approssimazione del valore iniziale */
#fa0f/* formato esadecimale RGBA approssimazione del valore iniziale */

L'URLviene indicato nelle forme

url(http://esempio.it/file.html)
url("http://esempio.it/file.html")

I CSS permettono di indicare nella proprietàfont-familypiù di un font, o una famiglia di font (serif e sans). In questo modo il browser utilizzerà il primo che troverà installato sulsistema operativo.La dichiarazione utilizza questa sintassi:

p{
font-family:"Arial","Verdana",serif;
}

CSS per SVG

modifica

È possibile utilizzare i CSS per modificare gli stili di SVG (linguaggio facente parte di HTML5)[20].Esempio:

svg{
background-color:beige;
}

CSS perHTML5 Canvas

<!DOCTYPE html>
<html>
<head>
<title>Canvas element size: 600 x 300,
Canvas drawing surface size: 300 x 150</title>
<style>
body{
background:#dddddd;
}
#canvas{
margin:20px;
padding:20px;
background:#ffffff;
border:thininset#aaaaaa;
width:600px;
height:300px;
}
</style>
</head>
<body>
<canvasid="canvas">
Canvas not supported
</canvas>
</body>
</html>

Creazione automatica dei CSS

modifica

Con programmi di grafica e fotoritocco comePhotoshopè possibile convertire i livelli in stili CSS[21].

Utilizzo del 3D

modifica

I CSS3 hanno introdotto la proprietà "3D Transform" che consente di creare alcune animazioni e forme in 3D ma non possono equiparare le possibilità diWebGL[22][23].

Il supporto dei Browser ai CSS

modifica

La lista che segue è dimotori di renderingperché a loro è assegnato il compito di formattare la pagina secondo le istruzioni CSS.

Gecko(Mozilla FirefoxeNetscape Navigator)
Gecko ha un ottimo supporto dei CSS 1,2 e 3 ed è per questo spesso utilizzato nella verifica della resa delle pagine web. Gecko e Mozilla Firefox sonosoftware libero.Anche Netscape Navigator (obsoleto dal 1º marzo 2008[24]) era distribuito sottolicenza libera.
Trident (Internet ExplorereAOL Explorer)
Internet Explorer (obsoleto dall'agosto 2020[25]in favore diEdge), dallaversione 9supportava CSS 3. Una peculiarità di Internet Explorer erano i cosiddetticommenti condizionaliche consentivano di applicare delle regole di CSS soltanto a una determinata versione di Internet Explorer. Questa funzionalità era ampiamente utilizzata laddove si presumeva un'utenza che utilizzava ancora vecchie versioni di Internet Explorer e che perciò richiedevano frequentemente alcune regole di CSS addizionali per la corretta visualizzazione della pagina web.[26]In molti casi era necessario utilizzare regole di stile CSS ad-hoc esclusivamente per Internet Explorer a causa delle differenze sostanziali nel modo in cui alcune versioni di Internet Explorer si discostavano dagli standard, come per esempio nel "box modelnon-standard "utilizzato da alcune versioni di Internet Explorer e che differivano sostanzialmente da quello imposto dagli standard del World Wide Web Consortium.[27][28]La sintassi dei commenti condizionali era la seguente:
<!--'''[if IE]>'''
''regole CSS ad-hoc per Internet Explorer''
'''<![endif]'''-->
poiché<!--introduceva di norma un commento, i browser diversi da Explorer 5.0 o superiori non interpretavano il codice. I commenti condizionali permettevano di specificare un foglio di stile specifico per Internet Explorer nel modo che segue:
<!--[if IE]>
<link rel= "stylesheet" type= "text/css" href= "'''foglio_di_stile_ad-hoc_per_IE.css'''" >
<![endif]-->

Trident e Internet Explorer sonosoftware proprietario.

Presto(Opera)
Presto offre un ottimo supporto dei CSS 1,2 e 3. Opera offre inoltre un'opzione che permette all'utente di disattivare i fogli di stile o usarne di propri. Presto e Opera sonosoftware proprietario.
KHTMLeWebKit(Safari,Google ChromeeKonqueror)
KHTML è attualmente il motore che offre il maggior supporto ai CSS, offrendo una quasi totale interpretazione anche dei CSS 3. KHTML e WebKit sonosoftware libero;Safari e Google Chrome sonosoftware proprietari(mantenuti rispettivamente daAppleeGoogle), mentre Konqueror èsoftware libero(sottolicenza GPL,mantenuto dalla community diKDE).

Oltre alle differenze di compatibilità, ogni motore di rendering aggiunge ai CSS standard alcuni nuovi elementi o nuove proprietà.

Normalmente tali proprietà iniziano con un prefisso che cambia in base al browser, per esempio-webkitindica che la proprietà riguarda il motore di rendering WebKit, ad esempio-webkit-appearance.Tutte queste proprietà però dovrebbero essere utilizzate esclusivamente quando si desidera solo utilizzare quel browser con quel determinato motore di rendering poiché tutte queste proprietà sono caratteristiche aggiuntive valide solo per quel determinato motore di rendering e non sono proprietà standard definite dal World Wide Web Consortium.

Edge HTML(Microsoft Edge)

EdgeHTML supporta bene i CSS, compresi i CSS3. EdgeHTML e Microsoft Edge sonosoftware proprietario.

Utilizzo su diversi dispositivi

modifica

Prima dell'arrivo dei CSS3, con i CSS2 si facevano più file CSS per lo stesso sito web che caricava il file CSS corrispondente al dispositivo utilizzato dall'utente. In HTML si specificava la seguente sintassi:

<link rel= "stylesheet" type= "text/css" href= "foglio.css"media= "screen"/>

Il codice precedente associa il foglio di stile solo ai browser standard percomputer desktope portatili. I valori dell'attributo "media" sono gli stessi della regola CSS "media queries".Sebbene sia ancora possibile creare più fogli di stile per diversi media e specificarlo nel tag" link rel ", da quando lemedia queriessono supportati da tutti i moderni browser la maggior parte degli sviluppatori utilizza esse poiché consentono in un solo foglio CSS di adattare la relativa pagina HTML a tutti i dispositivi utilizzando molte meno righe di codice[29].

Riduzione delle chiamate al server

modifica
Esempio di uso di uno sprite in CSS

Ogni richiesta del server separata (time to first byteo TTFB) influisce sulla velocità di essa (quando si richiamano nel codice immagini, font, video, elementi JS...). Con i CSS si possono aumentare notevolmente le prestazioni di una pagina riducendo quel numero di richieste.

Immagini

modifica

Utilizzare i CSS3 per evitare di utilizzare le immagini (jpg, png,...) ad esempio per gli angoli arrotondati, le ombre, i gradienti e le trasparenze.

Lo stesso argomento in dettaglio:Sprite (informatica).
Un singolospritediPixel Dungeonrealizzato con 147 sotto-immagini

Utilizzare iCSS Sprite,attuando una sola chiamata al server utilizzando una sola immagine che ne contiene molte per più parti della pagina web (o dell'intero sito web).

Comprimere i file CSS con il metodo "minify"per ridurre il peso del file CSS e quindi la banda utilizzata per richiamare tale file dal server. Si può fare anche con pagine HTML eJavaScript[30].In questo modo però il codice sarà privo di spazi e la modifica risulterà più complessa.

Inoltre ci sono più modi di arrivare allo stesso risultato con i CSS. Il metodo che si dovrebbe scegliere è quello che consente di scrivere meno codice possibile per ridurre al minimo il peso del file ".css". Ad esempio:

.foo{color:#ff0000;}
.bar{color:rgba(255,0,0,1);}

/* EQUIVALE A */

.bar,.foo{color:red}

Non usare troppi font incorporati (@font-faceeGoogle Fonts).

Numero di file

modifica

Ridurre al minimo il numero di file CSS e il numero di file in generale. Adattare ad esempio il layout delle pagine web a vari dispositivi e media non utilizzando più fogli di stile per ogni dispositivo ma uno solo che adatta la pagina a tutti attraverso lemedia queries.In questo modo il server avrà la chiamata per un solo foglio CSS.

JavaScript

modifica

SostituireJavaScriptcon i CSS per crearetooltip,gallerie d'immagine e altro[9][10][11].I CSS richiedono infatti meno risorse di JS.

Fogli di stile preferiti e alternativi

modifica

Come descritto, ad ogni pagina si possono collegare più fogli di stile. Tuttavia è anche possibile far scegliere all'utente quali applicare. Per farlo si definiscono innanzitutto i fogli di stile permanenti, cioè non disattivabili, secondo la sintassi già vista. Poi si definiscono i fogli preferiti, cioè attivi al caricamento della pagina, ma disattivabili, aggiungendo l'attributo<title>come nell'esempio che segue:

<link rel= "stylesheet" type= "text/css" href= "foglio_preferito.css"title= "Esempio1"/>

A questo punto si possono specificare fogli di stile alternativi cioè non attivi al caricamento, ma attivabili dall'utente, come nell'esempio che segue:

<link rel= "alternatestylesheet "type=" text/css "href=" foglio_alternativo.css "title= "Esempio2"/>

Per attivare e disattivare i fogli di stile l'utente può ricorrere all'apposito menu del suo browser, tuttavia Internet Explorer non offriva questa possibilità quindi era necessario creare uno scriptJavaScriptche svolgesse la funzione di sostituire i fogli. Il codice era stato pubblicato la prima volta su (EN)A List Apart.Tuttavia se questo script era facile da mettere in opera per gli sviluppatori, richiedeva un browser aggiornato con un buon supporto delDOM,oltre che avere attivati sia JavaScript e icookie.Un sistema più complesso ma molto più robusto poteva essere uno scriptlato servercomePHP.Un esempio è disponibile sempre sullostesso sito.

Pattern

modifica
Pattern CSS

I pattern sono figure modulari che si ripetono all'infinito che solitamente fanno da sfondo a elementi HTML come contenitori DIV, bottoni, il background della pagina web, paragrafi. Si possono creare direttamente in CSS, con le immagini o fondendo entrambi i metodi ossia creando un'immagine base e ripetendola con la regolabackground-repeat[31].In questi tre casi non c'è bisogno di realizzare un'immagine di sfondo della grandezza del contenitore che peserebbe molto di più.

Lo stesso argomento in dettaglio:Acid3.

Acid3 è un test con cui è possibile verificare l'aderenza di unbrowsera determinati standard web compresi i CSS3[32].

Stylusè un linguaggio per preprocessore di fogli di stile dinamico compilato in Cascading Style Sheets (CSS). Il suo design è influenzato daSasseLESS.È considerata la quarta sintassi del preprocessore CSS più utilizzata[33].È stato creato da TJ Holowaychuk, un ex programmatore di Node.js e creatore del linguaggio Luna. È scritto in JADE eNode.js.

Selettori

modifica

A differenza del CSS, che utilizza le parentesi graffe per aprire e chiudere i blocchi di dichiarazione, viene utilizzata l'indentazione. Inoltre, i punti e virgola (;) vengono facoltativamente omessi. Quindi, il seguente CSS:

body
color:white;
}

può essere abbreviato in:

body
color:white;

Inoltre, anche i due punti (:) e le virgole (,) sono facoltativi; ciò significa che quanto sopra può essere scritto come segue:

body
colorwhite

Variabili

modifica

Stylus consente di definire variabili, tuttavia, a differenza di LESS e Sass, non utilizza un simbolo per definire le variabili. Inoltre, l'assegnazione delle variabili viene eseguita automaticamente separando la proprietà e le parole chiave. In questo modo, le variabili sono simili alle variabili in Python.

messaggio='Hello, World!'
div::before
contentmessaggio
color#ffffff

Il compilatore Stylus tradurrebbe l'esempio sopra in:

div::before{
content:"Hello, World!";
color:#ffffff;
}

Mixin e funzioni

modifica

Sia i mixin che le funzioni sono definiti nello stesso modo, ma vengono applicati in modi diversi.

Ad esempio:

border-radius(n)
-webkit-border-radiusn
-moz-border-radiusn
border-radiusn

quindi, per includerlo come mixin:

div.rettangolo
border-radius(10px)

che verrebbe compilato in:

div.rettangolo{
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
}

Interpolazione

modifica

Per includere variabili negli argomenti e negli identificatori, le parentesi graffe circondano le variabili. Per esempio,

-webkit-{'border'+'-radius'}

corrisponde a

-webkit-border-radius

CSS dinamici

modifica

Dynamic CSS, o DCSS, è un termine che comprende un insieme di tecnologie utilizzate assieme per creare fogli di stile dinamici, utilizzando una combinazione di qualsiasilinguaggio di programmazioneper illato server(come ad esempioPHP/ASP/Perl/JSP) e CSS)[34].L'idea iniziale del DCSS è stata scritta nel luglio 2002 daJori Koolstra,un programmatore olandese[35].

DCSS permette di lavorare con variabili in CSS e con la riscrittura dinamica del codice sorgente CSS. MoltiCMShanno creato moduli aggiuntivi, per esempioDrupal.

Esempio:

$persistent=[
'bgmast'=>'bbd9ee',/* elenco */
'fgmast'=>'4d4d4d',
'bgmenu'=>'e7e4d3',/* menu */
'fgmenu'=>'444',
'bgcont'=>'fff',/* contenuto */
'fgcont'=>'444'
];

Modifica del cursore con i CSS

modifica
Lo stesso argomento in dettaglio:Cursore.

I CSS possono generare una serie di diversi cursori del mouse che l'utente vedrà appena arrivato sulla paginaHTMLche li contiene[36][37]:

Progetti in divenire

modifica
CSS3regioneexclusion

Il W3C sta sviluppando alcune specifiche CSS3 per creare layout simili a quelli perrivistee settimanali, con la possibilità di far scorrere il testo attorno alle immagini prive di sfondo (PNG e GIF) e forme geometriche[38][39][40][41].

CSS inline

<divid=”circle”
style="exclusion-shape: poly(x1, y1,.., xN, yN)"></div>
<divstyle="region-thread:content;
exclusions: #circle; "></div>

CSS esterno

.exclusion{
wrap-flow:both;
position:absolute;
width:200px;
}

.region{
flow-from:article;
box-sizing:border-box;
position:absolute;
width:200px;
height:200px;
padding:10px;
}

Esempi di CSS3

modifica

Standardizzazione

modifica

Frameworks

modifica

I framework CSS sono librerie pre-preparate che hanno lo scopo di consentire uno stile più semplice e conforme agli standard delle pagine Web utilizzando il linguaggio Cascading Style Sheets. I framework CSS includono Blueprint,Bootstrap,Cascade Framework, Foundation,MDBootstrape Materialise. Come le librerie di linguaggi di programmazione e scripting, i framework CSS sono solitamente incorporati come fogli.css esterni a cui si fa riferimento nell'HTML <head>. Forniscono una serie di opzioni già pronte per la progettazione e il layout della pagina web. Sebbene molti di questi framework siano stati pubblicati, alcuni autori li usano principalmente per la prototipazione rapida, o per imparare da, e preferiscono 'creare manualmente' CSS appropriato per ogni sito pubblicato senza il sovraccarico di progettazione, manutenzione e download dovuto a molte funzionalità inutilizzate nello stile del sito.

Metodologie di progettazione

modifica

Con l'aumentare della dimensione delle risorse CSS utilizzate in un progetto, un team di sviluppo deve spesso decidere una metodologia di progettazione comune per mantenerle organizzate. Gli obiettivi sono la facilità di sviluppo, la facilità di collaborazione durante lo sviluppo e le prestazioni dei fogli di stile distribuiti nel browser. Le metodologie popolari includono OOCSS (CSS orientato agli oggetti), ACSS (CSS atomico), oCSS (foglio di stile Cascade organico), SMACSS (architettura scalabile e modulare per CSS) e BEM (blocco, elemento, modificatore)

  1. ^Flash & The Future of Interactive Content | Adobe Blog,suweb.archive.org,2 dicembre 2017.URL consultato il 27 gennaio 2021(archiviato dall'url originaleil 2 dicembre 2017).
  2. ^Alessandro Fulciniti,I più comuni layout table-less,suHTML.it.URL consultato il 2 febbraio 2021.
  3. ^(EN)Fixed vs. Fluid vs. Elastic Layout: What’s The Right One For You?,suSmashing Magazine,2 giugno 2009.URL consultato il 2 febbraio 2021.
  4. ^CSS current work,suw3.org.
  5. ^Stupid Machines - rule 110,sugithub.
  6. ^Rule 110 OnLine Demonstration,sueli.fox-epste.in.
  7. ^CSS3: guida completa,suHTML.it.URL consultato il 27 gennaio 2021.
  8. ^W3Schools Online Web Tutorials,suw3schools.URL consultato il 28 gennaio 2021.
  9. ^ab(EN)5 things you can do with CSS instead of JavaScript,suLogRocket Blog,29 ottobre 2019.URL consultato il 28 gennaio 2021.
  10. ^ab(EN)Creating beautiful tooltips with only CSS,suLogRocket Blog,29 giugno 2020.URL consultato il 28 gennaio 2021.
  11. ^ab(EN)49 CSS Galleries,suFree Frontend.URL consultato il 28 gennaio 2021.
  12. ^Styling vertical Chinese, Japanese, Korean and Mongolian text,suw3.org.URL consultato il 7 febbraio 2022.
  13. ^(EN)text-orientation - CSS: Cascading Style Sheets | MDN,sudeveloper.mozilla.org.URL consultato il 7 febbraio 2022.
  14. ^(EN)writing-mode - CSS: Cascading Style Sheets | MDN,sudeveloper.mozilla.org.URL consultato il 7 febbraio 2022.
  15. ^(EN)A Complete Guide to Grid,suCSS-Tricks.URL consultato il 2 febbraio 2021.
  16. ^(EN)How to Create Printer-friendly Pages with CSS - SitePoint,susitepoint.URL consultato il 24 agosto 2021.
  17. ^(EN)How To Set Up A Print Style Sheet,suSmashing Magazine,24 novembre 2011.URL consultato il 24 agosto 2021.
  18. ^Print Friendly & PDF,suchrome.google.URL consultato il 24 agosto 2021.
  19. ^(EN)What do you name color variables?,suCSS-Tricks,7 dicembre 2018.URL consultato il 4 febbraio 2021.
  20. ^SVG and CSS - SVG: Scalable Vector Graphics | MDN,sudeveloper.mozilla.org.URL consultato il 28 gennaio 2021.
  21. ^(EN)Exporting CSS From Photoshop When Building From A PSD File,suSquare Internet,11 agosto 2019.URL consultato il 28 gennaio 2021.
  22. ^Guida per il 3D nei browser – WebGL Contro CSS 3D Transforms,suWE RAD,5 maggio 2017.URL consultato il 29 gennaio 2021.
  23. ^(EN) Pratik,10+ CSS 3D Transforms Example With Code Snippets,suOnAirCode,27 marzo 2018.URL consultato il 29 gennaio 2021.
  24. ^End of Support for Netscape web browsers - The Netscape Blog,suweb.archive.org,29 dicembre 2007.URL consultato il 27 gennaio 2021(archiviato dall'url originaleil 29 dicembre 2007).
  25. ^(EN)Internet Explorer Web Browser End of Support - Microsoft 365,sumicrosoft.URL consultato il 27 gennaio 2021.
  26. ^ (EN)CSS Conditional comments,suquirksmode.org.URL consultato il 10 giugno 2014.
    «Older IE versions frequently need some extra CSS in order to show your pages right. Conditional comments are the best way to add this CSS, since the system is explicitly designed for this use case»
  27. ^ (EN)Internet Explorer and the CSS box model,su456bereastreet.URL consultato il 10 giugno 2014.
    «Internet Explorer’s non-standard way of calculating box dimensions»
  28. ^ (EN)CSS2 Box model,suw3.org,W3C.
  29. ^CSS @media Rule,suw3schools.URL consultato il 28 gennaio 2021.
  30. ^CSS Minifier,sucssminifier.URL consultato il 27 gennaio 2021.
  31. ^(EN)51 CSS Background Patterns,suFree Frontend.URL consultato il 5 febbraio 2021.
  32. ^The Acid3 Test,suacid3.acidtests.org.URL consultato il 3 febbraio 2021.
  33. ^Poll Results: Popularity of CSS Preprocessors
  34. ^(EN)Generating Dynamic CSS with PHP - Digital Web,inDigital Web,24 gennaio 2014.URL consultato il 17 febbraio 2021.
  35. ^Wayback Machine(TXT), suweb.archive.org,19 agosto 2010.URL consultato il 17 febbraio 2021(archiviato dall'url originaleil 19 agosto 2010).
  36. ^cursor - CSS | MDN,sudeveloper.mozilla.org.URL consultato il 17 febbraio 2021.
  37. ^CSS cursor property,suw3schools.URL consultato il 17 febbraio 2021.
  38. ^(EN) Christian Cantrell Published: August 3rd, 2012 Comments: 0 Your browser may not support the functionality in this article,Magazine-like Layout for the Web with CSS Regions and Exclusions - HTML5 Rocks,suHTML5 Rocks - A resource for open web HTML5 developers.URL consultato il 23 agosto 2021.
  39. ^w3c(PDF), sulists.w3.org.
  40. ^(EN)Exclusions will hopefully be like more powerful grid-friendly floats,suCSS-Tricks,21 novembre 2018.URL consultato il 23 agosto 2021.
  41. ^CSS Exclusions Module Level 1,suw3.org.URL consultato il 23 agosto 2021.

Bibliografia

modifica

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica
Controllo di autoritàLCCN(EN)sh2001004461·GND(DE)4467617-7·BNE(ES)XX550325(data)·BNF(FR)cb13739222f(data)·J9U(EN,HE)987007537193405171
Portale Internet:accedi alle voci di Wikipedia che trattano di internet