Angoli arrotondati con l’uso di una unica immagine di sfondo

Monday 20 October 08 by Onsitus in CSS Tutorials

Per creare un elemento a angoli arrotondati, abbiamo la proprietà css3 border-radius che (purtroppo) non è ancora supportata da tutti i browser. Nel fratempo, possiamo ricreare gli angoli arrotondati in css con l’uso di un unica immagine e la proprietà background-position (e qualche extra div nel nostro html).

Questa unica immagine è composta dai 4 angoli e impostata come immagine di sfondo a 4 div differente seguendo questa struttura html:

  • div id="contenitore" : il div principale che contiene sia gli angoli che il contenuto
    • div class="css_angoli" id="angolo_superiore_sinistra" : il div che contiene la parte superiore e a quale è applicato l’immagine di sfondo per creare l’angolo sinistra
      NB: l’uso di una classe comune per tutti gli div con un angolo per evitare di ripetere stesse regole css per ogni uno e l’uso d’un identificatore unico per ogni div con un angolo per posizionare la stessa immagine di sfondo con il background-position

      • div class="css_angoli" id="angolo_superiore_destra" : il div a quale è applicato l’immagine di sfondo per creare l’angolo superiore destra
      • div class="colore_sfondo" : il div che riempi lo spazio con il colore di sfondo tra i 2 angoli
        NB: l’uso di questo extra div è dovuto al fatto che gli angoli sono png trasparente e non si vuole riempire tutto il div del colore di sfondo, il quale coprirebbe tutta la larghezza e renderebbe l’effetto inutile
    • div class="contenuto" : il div che contiene il proprio contenuto
    • div class="css_angoli" id="angolo_inferiore_sinistra" : il div che contiene la parte inferiore e a quale è applicato l’immagine di sfondo per creare l’angolo sinistra
      • div class="css_angoli" id="angolo_inferiore_destra" : il div a quale è applicato l’immagine di sfondo per creare l’angolo inferiore destra
      • div class="colore_sfondo" : lo stesso div che per la parte superiore (di la l’uso della class visto che condividano stesso stile css)

Le regole css usate

Lo stile css è basato principalmente sul uso della proprietà background, riusando la stessa immagine di sfondo e posizionata per ogni angolo in maniera differente con la proprietà background-position.

Altro quello è usato le margine (margin) per allineare i div ‘colore_sfondo’ con i suoi angoli e il height per impostare un altezza specifica (l’altezza degli angoli).

Per fare capire meglio le regole css applicate, allego un immagine del box model.

css angoli arrotondati

Di seguito due esempi concreti con relative spiegazione.

Esempio 1 con tinta unita

Immagine usata:

css angoli arrotondati : questa immagine è composta dai 4 angoli e sarà usata come immagine di sfondo

HTML usato (come spiegato prima):

<div id="contenitore">
<div class="css_angoli" id="angolo_superiore_sinistra">
<div class="css_angoli" id="angolo_superiore_destra"></div>
<div class="colore_sfondo"></div>
</div>
<div class="contenuto">CONTENUTO</div>
<div class="css_angoli" id="angolo_inferiore_sinistra">
<div class="css_angoli" id="angolo_inferiore_destra"></div>
<div class="colore_sfondo"></div>
</div>
</div>

Le regole css applicate:

#contenitore{
/*la larghezza del riquadro - non obbligatorio*/
width:300px;
}
/*stile css comune per tutti gli angoli*/
.css_angoli{
/*l’immagine di sfondo*/
background:url(angoli_arrotondati.png) no-repeat;
/*l’altezza - la metà dell’immagine di sfondo*/
height:25px;
}
#angolo_superiore_sinistra{
/*immagine di sfondo posizionata in alto a sinistra*/
background-position:top left;
}
#angolo_superiore_destra{
/*immagine di sfondo posizionata in alto a destra*/
background-position:top right;
}
#angolo_inferiore_sinistra{
/*immagine di sfondo posizionata in basso a sinistra*/
background-position:bottom left;
}
#angolo_inferiore_destra{
/*immagine di sfondo posizionata in basso a destra*/
background-position:bottom right;
}
.colore_sfondo{
/*colore di sfondo per riempire la zona tra i 2 angoli*/
background-color:#99CC33;
/*l’altezza*/
height:25px;
/*posizionamento dell’elemento in rapporto con suoi angoli*/
/*eguale a margin-top:-25px;margin-right:25px;margin-bottom:0;margin-left:25px;*/
margin:-25px 25px 0 25px;
}
.contenuto{
/*colore di sfondo del contenuto*/
background-color:#99CC33;
/*spazio di 20px a destra e sinistra tra il bordo dell’elemento e il suo contenuto - non obbligatorio*/
padding:0 20px;
}

Il risultato con una larghezza fissa di 300px

#contenitore{
width:200px;
}
.css_angoli{
background:
url(angoli_arrotondati_1.png)
no-repeat;
height:25px;
}
#angolo_superiore_sinistra{
background-position:top left;
}
#angolo_superiore_destra{
background-position:top right;
}
#angolo_inferiore_sinistra{
background-position:bottom left;
}
#angolo_inferiore_destra{
background-position:bottom right;
}
.colore_sfondo{
background-color:#99CC33;
height:25px;
margin:-25px 25px 0 25px;
}
.contenuto{
background-color:#99CC33;
padding:0 20px;
}

Il risultato senza specificare una larghezza - larghezza fluida

.css_angoli{
background:url(angoli_arrotondati_1.png) no-repeat;
height:25px;
}
#angolo_superiore_sinistra{
background-position:top left;
}
#angolo_superiore_destra{
background-position:top right;
}
#angolo_inferiore_sinistra{
background-position:bottom left;
}
#angolo_inferiore_destra{
background-position:bottom right;
}
.colore_sfondo{
background-color:#99CC33;
height:25px;
margin:-25px 25px 0 25px;
}
.contenuto{
background-color:#99CC33;
padding:0 20px;
}

Esempio 2 con sfondo decorato

Questo esempio, fa l’uso di 4 immagine:

  • angoli_arrotondati.png :un immagine composta dai 4 angoli posizionata con il background-position come visto prima
  • bordi_orizzontali.png: un immagine composta dai bordi superiore e inferiore applicata a div ‘colore_sfondo’, ripetuta orizzontalmente con repeat-x e di nuovo posizionata con il background position (top o bottom)
  • bordo_right.png: un immagine per il bordo destra applicata al div ‘contenuto’, ripetuta verticalmente con repeat-y
  • bordo_left.png: un immagine per il bordo sinistra applicata a un extra div dentro ‘contenuto’, ripetuta verticalmente con repeat-y

Il risultato incluso di html e regole css:

<!–inizio contenitore principale–>
<div>
<!–inizio parte superiore–>
<!–angolo superiore sinistra–>

<div style="background:url(angoli_arrotondati.png) no-repeat top left;height:25px;">
<!–angolo superiore destra–>
<div style="background: url(angoli_arrotondati.png) no-repeat top right;height:25px;"></div>
<!–bordo superiore–>
<div style="background:url(bordi_orizzontali.png) repeat-x top;height:25px;margin:-25px 25px;"></div>
</div>

<!–fine parte superiore–>
<!–bordo sinistra - inizio contenitore contenuto–>

<div style="background:#8AE3FF url(bordo_left.png) repeat-y left;">
<!–bordo destra - contenuto proprio–>
<div style="background:url(bordo_right.png) repeat-y right;padding:0 20px;">
CONTENUTO
</div>
</div>

<!–fine contenitore contenuto–>
<!–inizio parte inferiore–>
<!–angolo inferiore sinistra–>

<div style="background:url(angoli_arrotondati.png) no-repeat bottom left;height:25px;">
<!–angolo inferiore destra–>
<div style="background:url(angoli_arrotondati.png) no-repeat bottom right;height:25px;"></div>
<!–bordo inferiore–>
<div style="background:url(bordi_orizzontali.png) repeat-x bottom;height:25px;margin:-25px 25px;"></div>
</div>

<!–fine parte inferiore–>
</div>
<!–fine contenitore principale–>

PS: metodo provato su IE6, IE7, FF2, FF3, Safari3, Opera9 su Windows

14 commenti

Rimani aggiornato con il RSS Feed

{ 4 trackbacks }

CSS - Angoli Arrotondati (Rounded Corners) | webquadro.it
02.10.09 at 15:23
Rounded boxes from CSS? - Forum Flash CS3 Flash CS4
02.12.09 at 11:35
Come posso creare queste tabelle? - AlterVista | Spazio web gratis, hosting free php mysql
07.21.09 at 06:00
[HTML,CSS]Background repeat e trasparenza - Pagina 2 - HTML, XML, CSS, Javascript, DOM - MasterDrive.it
08.10.10 at 15:52

{ 10 comments… read them below or add one }

spazione 10.30.08 at 21:09

sistema pulito. occhio a dei piccoli refusi:

e le ” invece che ”

spazione 10.30.08 at 21:11

e l’id angolo_inferiore_sinistra invece che angoli_inferiore_sinistra. prima nn me lha pubblicato

Onsitus 10.31.08 at 08:31

Buongiorno Spazione,
Volevo solo vedere se siete attenti a quello che scrivo :p
Errore corretta! (grazie) ;)
Non ho capito il ‘invece che’. Boh…

spazione 11.03.08 at 13:00

Di nulla! praticamente mi riferivo al tipo di Virgolette usate per richiamare le varie classi e id. è un tipo di virgolette che almeno Dreamweaver non accetta!

Onsitus 11.03.08 at 15:48

Hai ragione…non mi ero accorta di questa cosa.
Non uso Dreamweaver ma Notepad++ per scrivere xhtml/css.
Mi da stesso errore comunque se faccio copia/incolla.
Sarà il wordpress che scambia i “”. Vedrò se si può sistemare.
Grazie per farmelo sapere. Non avevo proprio capito a che ti riferiva (sinceramente credevo che era un errore mio d’italiano - succede spesso :p)

Onsitus 11.03.08 at 16:06

Ok, sistemato anche quelli ” invece di "
Su notepad++ va adesso, spero che sia stessa cosa per Dreamweaver.
Poi mi dovrò fare il giro del sito, visto che quel errore sarà da tutte parte :(

spazione 11.04.08 at 00:20

ti consiglio di utilizzare tool tipo questo http://quickhighlighter.com per la pubblicazione online di codici come php, css etc

Onsitus 11.04.08 at 08:38

Aggiunto nei segnalibri, proprio fatto bene e utile.
L’unica cosa che manca direi, sarebbe l’opzione semplice senza tutto il css aggiunto!

davide 11.18.09 at 16:29

G E N I A L E

Betty 04.15.10 at 16:55

Grazie mille… molto utile!

Scrivi un commento

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Previous post: Stile css per un input type="file"

Next post: CSS3 background: uso di sfondi multipli