Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il posizionamento del contenuto generato da CSS

Introdurre le forme, come i triangoli, e posizionarle per abbellire elementi come titoli e liste
Introdurre le forme, come i triangoli, e posizionarle per abbellire elementi come titoli e liste
Link copiato negli appunti

Abbiamo imparato in uno degli ultimi articoli la semplice tecnica che ci consente di realizzare forme triangolari attraverso i CSS. Ora faremo un passo avanti e vedremo in che modo possiamo inserire i triangoli nel contesto di una pagina e/o di un layout. Passeremo, insomma, dalla teoria alla pratica in uno scenario d'uso reale.

Il contenuto generato

Se i triangoli non sono elementi strutturali con un ruolo semanticamente definito ma hanno una funzione puramente decorativa, è buona norma non definirli nel markup del nostro documento. Non faremo dunque ricorso a div o altri tag nel codice HTML. Sfrutteremo invece una funzionalità molto comoda dei CSS: il cosiddetto contenuto generato.

Si tratta della possibilità offerta dal linguaggio di creare dei contenuti (testuali o visuali) direttamente dal foglio di stile, senza che tali contenuti siano presenti nell'albero del documento. I contenuti così generati saranno resi a video dai browser in grado di supportare gli pseudo-elementi :before e :after, oltre alla principale proprietà ad essi associata, content.

La funzione di :before e :after è intuibile a partire dal nome. Con :before possiamo inserire del contenuto prima dell'elemento a cui è associato lo pseudo-elemento; con :after il contenuto sarà inserito dopo. Se per esempio volessimo inserire la parola 'Titolo' prima del testo di ogni elemento h1 useremo questo codice:

h1:before{
content: "Titolo";
}

Per approfondire rimandiamo alla lezione sugli pseudo-elementi della guida CSS.

Posizione del contenuto generato

Oltre che l'inserimento di contenuti tramite :before e :after, i CSS consentono anche di intervenire sulla formattazione e sul posizionamento del contenuto generato. In pratica, alla stringa di testo 'Titolo' dell'esempio precedente possiamo applicare proprietà come display, margin, padding, position, etc. È questa possibilità che sfrutteremo per posizionare i triangoli nel layout del nostro esempio.

Abbiamo usato i triangoli in due contesti:

  • per creare lo sfondo nero con le frecce per i titoli (figura 1);
  • per creare un marcatore a forma di triangolo per le liste presenti nella barra laterale (figura 2).
Figura 1. Titolo con triangoli
Titolo con triangoli
Figura 2. Lista con marcatori a forma di triangolo
Lista con marcatori a forma di triangolo

Formattare i titoli

Per formattare come in figura 1 l'aspetto dei titoli h2, siamo partiti da questo codice:

h2 {
  color: #F58529;
  font-size: 140%;
  padding: 10px 20px;
  background-color: #000;
  margin: 10px 20px;
  position: relative;
}

Due i punti da osservare. Per creare lo spazio da destinare ai triangoli sui due lati abbiamo dato un margine di 20px a sinistra e a destra. Abbiamo quindi assegnato position: relative perché useremo il posizionamento assoluto per i contenuti generati, ovvero per i triangoli.

La freccia sul lato sinistro del titolo la otteniamo inserendo un triangolo tramite lo pseudo-elemento :before:

h2:before {
  content: "";
  width: 0;
  height: 0;
  line-height: 0;
  border-left: 20px solid #000;
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;
  position: absolute;
  right: -20px;
  top: 0px;
}

La proprietà content

width: 0;
  height: 0;
  line-height: 0;
  border-left: 20px solid #000;
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;

Generata la forma, posizioniamo il tutto:

position: absolute;
  right: -20px;
  top: 0px;

La stessa operazione, invertendo la forma del triangolo e adeguando le coordinate per il posizionamento, compiamo per il lato destro del titolo, dove useremo lo pseudo-elemento :after

h2:after {
  content: "";
  width: 0;
  height: 0;
  line-height: 0;
  border-right: 20px solid #000;
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;
  position: absolute;
  left: -20px;
  top: 0px;
}

Creare un marcatore delle liste

Ancora più semplice il lavoro per creare il marcatore delle liste. Iniziamo eliminando il marcatore di default dai list-item e usando sugli stessi, per i motivi già visti, il posizionamento relativo:

#sidebar ul { margin: 10px 0; }
#sidebar li {
  line-height:25px;
  list-style: none;
  padding-left: 15px;
  position: relative;
}

Per inserire il triangolo come marcatore sfruttiamo, ovviamente, lo pseudo-elemento :before e il posizionamento assoluto:

#sidebar li:before {
  content: "";
  width: 0;
  height: 0;
  line-height: 0;
  border-left: 5px solid #F58529;
  border-top: 5px solid transparent;
  border-bottom: 5px solid transparent;
  position: absolute;
  left: -3px;
  top: 8px;
}

Gli esempi sono disponibili per il download.

Conclusioni e approfondimenti

Il posizionamento del contenuto generato è una tecnica molto potente e versatile. Combinata con certe proprietà dei CSS3 consente di ottenere effetti visuali di sicuro impatto: ci torneremo in altri articoli. Per ora concludiamo con due link di approfondimento:

Ti consigliamo anche