CSS
I selettori
Ricerca…
introduzione
I selettori CSS identificano specifici elementi HTML come target per gli stili CSS. Questo argomento spiega in che modo i selettori CSS hanno come target elementi HTML. I selezionatori usano una vasta gamma di oltre 50 metodi di selezione offerti dal linguaggio CSS, inclusi elementi, classi, ID, pseudo-elementi e pseudo-classi e modelli.
Sintassi
- # id
- . nome della classe
- : pseudo-classname
- :: pseudo-elementname
- [ attr ] / * ha l'attributo attr . * /
- [ attr = " valore "] / * ha l'attributo attr , e il suo valore è esattamente " valore ". * /
- [ attr ~ = " valore "] / * ha l'attributo attr , e il suo valore, quando diviso su spazi , contiene " valore ". * /
- [ attr | = " valore "] / * ha l'attributo attr , e il suo valore è esattamente " valore ", o il suo valore inizia con " valore - ". * /
- [ attr ^ = " valore "] / * ha l'attributo attr , e il suo valore inizia con " valore ". * /
- [ attr $ = " valore "] / * ha l'attributo attr e il suo valore termina con " valore ". * /
- [ attr * = " valore "] / * ha l'attributo attr , e il suo valore contiene " valore ". * /
- Elemento-name
- *
Osservazioni
- A volte vedrai i doppi due punti (
::
:) invece di uno solo (:
. Questo è un modo per separare le pseudo-classi dagli pseudo-elementi . - Vecchi browser, come Internet Explorer 8, supportano solo un singolo due punti (
:
) per la definizione di pseudo-elementi. - A differenza delle pseudo-classi, può essere usato un solo pseudo-elemento per selettore, se presente deve apparire dopo la sequenza di selettori semplici che rappresentano i soggetti del selettore (una versione futura della specifica W3C può consentire più pseudo-elementi per selettore ).
Selettori di attributi
Panoramica
I selettori di attributi possono essere utilizzati con vari tipi di operatori che modificano di conseguenza i criteri di selezione. Selezionano un elemento utilizzando la presenza di un determinato attributo o valore di attributo.
Selettore (1) | Elemento abbinato | Seleziona elementi ... | Versione CSS |
---|---|---|---|
[attr] | <div attr> | Con attributo attr | 2 |
[attr='val'] | <div attr="val"> | Dove l'attributo attr ha valore val | 2 |
[attr~='val'] | <div attr="val val2 val3"> | Dove val appare nel lista separata da spazi di attr | 2 |
[attr^='val'] | <div attr="val1 val2"> | Dove il valore di attr inizia con val | 3 |
[attr$='val'] | <div attr="sth aval"> | Dove il valore di attr termina con val | 3 |
[attr*='val'] | <div attr="somevalhere"> | Dove attr contiene val ovunque | 3 |
[attr|='val'] | <div attr="val-sth etc"> | Dove il valore di attr è esattamente val , o inizia con val e immediatamente seguito da - (U + 002D) | 2 |
[attr='val' i] | <div attr="val"> | Dove attr ha valore val , ignorando il rivestimento delle lettere di val . | 4 (2) |
Gli appunti:
Il valore dell'attributo può essere circondato da virgolette singole o doppie virgolette. Nessuna virgola può anche funzionare, ma non è valida secondo lo standard CSS ed è scoraggiata.
Non esiste un'unica specifica CSS4 integrata, perché è divisa in moduli separati. Tuttavia, ci sono moduli di "livello 4". Vedi il supporto del browser .
Dettagli
[attribute]
Seleziona elementi con l'attributo dato.
div[data-color] {
color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will be red</div>
<div data-background="red">This will NOT be red</div>
[attribute="value"]
Seleziona elementi con l'attributo e il valore specificati.
div[data-color="red"] {
color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will NOT be red</div>
<div data-color="blue">This will NOT be red</div>
[attribute*="value"]
Seleziona gli elementi con l'attributo e il valore specificati in cui l'attributo dato contiene il valore dato da qualsiasi parte (come sottostringa).
[class*="foo"] {
color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo123">This will be red</div>
<div class="bar123foo">This will be red</div>
<div class="barfooo123">This will be red</div>
<div class="barfo0">This will NOT be red</div>
[attribute~="value"]
Seleziona gli elementi con l'attributo e il valore specificati in cui il valore indicato viene visualizzato in un elenco separato da spazi.
[class~="color-red"] {
color: red;
}
<div class="color-red foo-bar the-div">This will be red</div>
<div class="color-blue foo-bar the-div">This will NOT be red</div>
[attribute^="value"]
Seleziona gli elementi con l'attributo e il valore specificati in cui l'attributo dato inizia con il valore.
[class^="foo-"] {
color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo-234">This will be red</div>
<div class="bar-123">This will NOT be red</div>
[attribute$="value"]
Seleziona gli elementi con l'attributo e il valore specificati in cui l'attributo dato termina con il valore dato.
[class$="file"] {
color: red;
}
<div class="foobar-file">This will be red</div>
<div class="foobar-file">This will be red</div>
<div class="foobar-input">This will NOT be red</div>
[attribute|="value"]
Seleziona gli elementi con un determinato attributo e valore dove il valore dell'attributo è esattamente il valore dato o è esattamente il valore dato seguito da -
(U + 002D)
[lang|="EN"] {
color: red;
}
<div lang="EN-us">This will be red</div>
<div lang="EN-gb">This will be red</div>
<div lang="PT-pt">This will NOT be red</div>
[attribute="value" i]
Seleziona elementi con un dato attributo e un valore in cui il valore dell'attributo può essere rappresentato come Value
, VALUE
, vAlUe
o qualsiasi altra possibilità maiuscole e minuscole.
[lang="EN" i] {
color: red;
}
<div lang="EN">This will be red</div>
<div lang="en">This will be red</div>
<div lang="PT">This will NOT be red</div>
Specificità dei selettori di attributi
0-1-0
Come selettore di classe e pseudoclass.
*[type=checkbox] // 0-1-0
Nota che questo significa che un selettore di attributo può essere usato per selezionare un elemento dal suo ID a un livello inferiore di specificità che se fosse stato selezionato con un selettore ID : [id="my-ID"]
lo stesso numero di #my-ID
ma con specificità inferiore.
Vedi la sezione Sintassi per maggiori dettagli.
combinatori
Panoramica
Selettore | Descrizione |
---|---|
div span | Selettore discendente (tutti <span> s discendenti di <div> ) |
div > span | Selettore di bambini (tutti <span> che sono figli diretti di <div> ) |
a ~ span | Selettore General Sibling (tutti <span> s che sono fratelli dopo un <a> ) |
a + span | Selettore di Sibling adiacente (tutti i <span> che sono immediatamente dopo un <a> ) |
Nota: i selettori di Sibling scelgono come target gli elementi che vengono dopo di essi nel documento di origine. Il CSS, per sua natura (a cascata), non può bersagliare elementi precedenti o genitore . Tuttavia, usando la proprietà
order
flex, un precedente selettore di pari livello può essere simulato su supporti visivi .
Combinatore discendente: selector selector
Un combinatore discendente, rappresentato da almeno un carattere di spazio ( ), seleziona gli elementi che sono discendenti dell'elemento definito. Questo combinatore seleziona tutti i discendenti dell'elemento (dagli elementi figli in basso).
div p {
color:red;
}
<div>
<p>My text is red</p>
<section>
<p>My text is red</p>
</section>
</div>
<p>My text is not red</p>
Nell'esempio precedente, i primi due elementi <p>
sono selezionati poiché sono entrambi i discendenti di <div>
.
Combinatore di bambini: selector > selector
Il combinatore child ( >
) viene utilizzato per selezionare elementi figli , o discendenti diretti , dell'elemento specificato.
div > p {
color:red;
}
<div>
<p>My text is red</p>
<section>
<p>My text is not red</p>
</section>
</div>
Il precedente CSS seleziona solo il primo elemento <p>
, in quanto è l'unico paragrafo direttamente discendente da un <div>
.
Il secondo elemento <p>
non è selezionato perché non è un figlio diretto di <div>
.
Combinatore Sibling adiacente: selector + selector
Il combinatore adiacente di pari livello ( +
) seleziona un elemento fratello che segue immediatamente un elemento specificato.
p + p {
color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<p>My text is red</p>
<hr>
<p>My text is not red</p>
L'esempio sopra seleziona solo quegli elementi <p>
che sono direttamente preceduti da un altro elemento <p>
.
General Sibling Combinator: selector ~ selector
Il combinatore generale ( ~
) seleziona tutti i fratelli che seguono l'elemento specificato.
p ~ p {
color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<hr>
<h1>And now a title</h1>
<p>My text is red</p>
L'esempio sopra seleziona tutti gli elementi <p>
preceduti da un altro elemento <p>
, indipendentemente dal fatto che siano immediatamente adiacenti.
Selettori del nome di classe
Il selettore del nome della classe seleziona tutti gli elementi con il nome della classe mirata. Ad esempio, il nome della classe .warning
selezionerebbe il seguente elemento <div>
:
<div class="warning">
<p>This would be some warning copy.</p>
</div>
Puoi anche combinare i nomi delle classi con gli elementi target in modo più specifico. Costruiamo sull'esempio sopra per mostrare una selezione di classi più complicata.
CSS
.important {
color: orange;
}
.warning {
color: blue;
}
.warning.important {
color: red;
}
HTML
<div class="warning">
<p>This would be some warning copy.</p>
</div>
<div class="important warning">
<p class="important">This is some really important warning copy.</p>
</div>
In questo esempio, tutti gli elementi con la classe .warning
avranno un colore di testo blu, gli elementi con la classe .important
avranno un colore di testo arancione e tutti gli elementi che hanno sia il nome di classe .important
che .warning
avranno un testo rosso colore.
Si noti che all'interno del CSS, la dichiarazione .warning.important
non ha spazi tra i due nomi di classe. Ciò significa che troverà solo elementi che contengono sia i nomi di classe che warning
e important
nel loro attributo di class
. Quei nomi di classe potrebbero essere in qualsiasi ordine sull'elemento.
Se fosse incluso uno spazio tra le due classi nella dichiarazione CSS, selezionerebbe solo elementi che hanno elementi parent con un .warning
classe .warning
ed elementi figlio con nomi di classe .important
.
Selettori ID
I selettori ID selezionano gli elementi DOM con l'ID target. Per selezionare un elemento con un ID specifico in CSS, viene utilizzato il prefisso #
.
Ad esempio, il seguente elemento div
HTML ...
<div id="exampleID">
<p>Example</p>
</div>
... può essere selezionato da #exampleID
in CSS come mostrato di seguito:
#exampleID {
width: 20px;
}
Nota : le specifiche HTML non consentono più elementi con lo stesso ID
Pseudo-classi
Le pseudo-classi sono parole chiave che consentono la selezione in base a informazioni che si trovano all'esterno dell'albero del documento o che non possono essere espresse da altri selettori o combinatori. Questa informazione può essere associato ad un certo stato ( stato e dinamiche pseudo-classi), a posizioni ( strutturali e indirizzare pseudo-classi), per negazioni della ex ( negazione pseudo-classe) o alle lingue ( Lang pseudo-classe). Gli esempi includono se un collegamento è stato seguito o meno ( :visited
), il mouse si trova su un elemento ( :hover
), una casella di controllo è selezionata ( :checked
), ecc.
Sintassi
selector:pseudo-class {
property: value;
}
Elenco di pseudo-classi:
Nome | Descrizione |
---|---|
:active | Si applica a qualsiasi elemento che viene attivato (cioè cliccato) dall'utente. |
:any | Ti permette di creare gruppi di selettori correlati creando gruppi che il gli articoli inclusi corrisponderanno. Questa è un'alternativa alla ripetizione di un intero selettore. |
:target | Seleziona l'elemento #news attivo corrente (cliccato su un URL contenente quel nome di ancoraggio) |
:checked | Si applica alla radio, alla casella di controllo o agli elementi delle opzioni che sono selezionati o attivato in uno stato "on". |
:default | Rappresenta qualsiasi elemento dell'interfaccia utente che è l'impostazione predefinita tra un gruppo di elementi simili. |
:disabled | Si applica a qualsiasi elemento dell'interfaccia utente che si trova in uno stato disabilitato. |
:empty | Si applica a qualsiasi elemento che non ha figli. |
:enabled | Si applica a qualsiasi elemento dell'interfaccia utente che si trova in uno stato abilitato. |
:first | Utilizzato insieme alla regola @page , seleziona la prima pagina di a documento stampato |
:first-child | Rappresenta qualsiasi elemento che è il primo elemento figlio del suo genitore. |
:first-of-type | Si applica quando un elemento è il primo del tipo di elemento selezionato all'interno del suo genitore. Questo può o non può essere il primo figlio. |
:focus | Si applica a qualsiasi elemento che ha l'attenzione dell'utente. Questo può essere dato dal tastiera dell'utente, eventi del mouse o altre forme di input. |
:focus-within | Può essere usato per evidenziare un'intera sezione quando un elemento al suo interno è focalizzato. Corrisponde a qualsiasi elemento che corrisponde alle corrispondenze pseudo-classe: focus o che ha un focus focalizzato. |
:full-screen | Si applica a qualsiasi elemento visualizzato in modalità a schermo intero. Seleziona l'intero stack di elementi e non solo l'elemento di livello superiore. |
:hover | Si applica a qualsiasi elemento al passaggio del mouse dal dispositivo di puntamento dell'utente, ma non attivato. |
:indeterminate | Applica elementi dell'interfaccia utente radio o casella di controllo che non sono né controllati né deselezionato, ma sono in uno stato indeterminato. Questo può essere dovuto a un attributo dell'elemento o manipolazione DOM. |
:in-range | La :in-range pseudo-classe CSS :in-range corrisponde quando un elemento ha il suo attributo value all'interno delle limitazioni di intervallo specificate per questo elemento. Permette alla pagina di dare un feedback sul valore attualmente definito l'utilizzo dell'elemento è all'interno dei limiti dell'intervallo. |
:invalid | Si applica a <input> elementi i cui valori non sono validi in base a il tipo specificato nell'attributo type= . |
:lang | Si applica a qualsiasi elemento che include l'elemento <body> correttamente lang= designato lang= attributo. Perché la pseudo-classe sia valida, deve contenere un codice lingua valido di due o tre lettere. |
:last-child | Rappresenta qualsiasi elemento che è l'ultimo elemento figlio del suo genitore. |
:last-of-type | Si applica quando un elemento è l'ultimo del tipo di elemento selezionato all'interno suo genitore. Questo può o non può essere l'ultimo figlio. |
:left | Utilizzato in congiunzione con la regola @page , seleziona tutto il sinistro pagine in un documento stampato. |
:link | Si applica a tutti i collegamenti che non sono stati visitati dall'utente. |
:not() | Si applica a tutti gli elementi che non corrispondono al valore passato a ( :not(p) o :not(.class-name) per esempio. Deve avere un valore per essere valido e può contenere solo un selettore. Tuttavia, puoi concatenare più elementi :not selettori insieme. |
:nth-child | Si applica quando un elemento è l' n -esimo elemento del suo genitore, dove n può essere un numero intero, un'espressione matematica (ad es. n+3 ) o le parole chiave odd o even . |
:nth-of-type | Si applica quando un elemento è l' n -esimo elemento del suo genitore di stesso tipo di elemento, dove n può essere un numero intero, un matematico espressione (ad esempio n+3 ), o le parole chiave odd o even . |
:only-child | La pseudo-classe CSS :only-child rappresenta qualsiasi elemento che è l'unico figlio del suo genitore. Questo è lo stesso di :first-child:last-child o :nth-child(1):nth-last-child(1) , ma con una specificità inferiore. |
:optional | La :optional pseudo-classe CSS :optional rappresenta qualsiasi elemento su cui non è impostato l'attributo richiesto. Questo permette forme per indicare facilmente campi opzionali e per modellarli di conseguenza. |
:out-of-range | La pseudo-classe CSS :out-of-range coincide quando un elemento ha la sua attributo valore al di fuori dei limiti di intervallo specificati per questo elemento. Permette alla pagina di dare un feedback sul valore attualmente definito usando il l'elemento non rientra nei limiti dell'intervallo. Un valore può essere al di fuori di un intervallo, se lo è o più piccoli o più grandi dei valori massimi e minimi. |
:placeholder-shown | Sperimentale. Si applica a qualsiasi elemento del modulo che attualmente visualizza testo segnaposto. |
:read-only | Si applica a qualsiasi elemento che non è modificabile dall'utente. |
:read-write | Si applica a qualsiasi elemento modificabile da un utente, come ad esempio <input> elementi. |
:right | Utilizzato insieme alla regola @page , seleziona tutte le pagine giuste in a documento stampato |
:root | corrisponde all'elemento radice di un albero che rappresenta il documento. |
:scope | La pseudo-classe CSS corrisponde agli elementi che sono un riferimento punto per selezionare i selettori contro. |
:target | Seleziona l'elemento #news attivo corrente (cliccato su un URL contenente quel nome di ancoraggio) |
:visited | Si applica a tutti i collegamenti che sono stati visitati dall'utente. |
Lo pseudoclass
:visited
non può più essere utilizzato per la maggior parte degli stili in molti browser moderni perché è un buco di sicurezza. Vedi questo link per riferimento.
Selettori di base
Selettore | Descrizione |
---|---|
* | Selettore universale (tutti gli elementi) |
div | Selettore di tag (tutti gli elementi <div> ) |
.blue | Selettore di classe (tutti gli elementi con classe blue ) |
.blue.red | Tutti gli elementi con classe blue e red (un tipo di selettore Compound) |
#headline | Selettore ID (l'elemento con l'attributo "id" impostato sul headline ) |
:pseudo-class | Tutti gli elementi con pseudo-classe |
::pseudo-element | Elemento che corrisponde allo pseudo-elemento |
:lang(en) | Elemento che corrisponde a: lang declaration, ad esempio <span lang="en"> |
div > p | selettore di bambini |
Nota: il valore di un ID deve essere univoco in una pagina Web. È una violazione dello standard HTML utilizzare il valore di un ID più di una volta nella stessa struttura del documento.
Un elenco completo di selettori può essere trovato nella specifica CSS Selectors Level 3 .
Come plasmare un input Range
HTML
<input type="range"></input>
CSS
Effetto | Pseudo selettore |
---|---|
Pollice | input[type=range]::-webkit-slider-thumb, input[type=range]::-moz-range-thumb, input[type=range]::-ms-thumb |
Traccia | input[type=range]::-webkit-slider-runnable-track, input[type=range]::-moz-range-track, input[type=range]::-ms-track |
OnFocus | input[type=range]:focus |
Parte inferiore della traccia | input[type=range]::-moz-range-progress, input[type=range]::-ms-fill-lower (non possibile nei browser WebKit attualmente - JS necessario) |
Global boolean con checkbox: checked e ~ (combinatore di fratellanza generale)
Con il selettore ~, puoi facilmente implementare un booleano accessibile globale senza utilizzare JavaScript.
Aggiungi booleano come casella di controllo
All'inizio del tuo documento, aggiungi tutti i booleani che vuoi con un id
univoco e il set di attributi hidden
:
<input type="checkbox" id="sidebarShown" hidden />
<input type="checkbox" id="darkThemeUsed" hidden />
<!-- here begins actual content, for example: -->
<div id="container">
<div id="sidebar">
<!-- Menu, Search, ... -->
</div>
<!-- Some more content ... -->
</div>
<div id="footer">
<!-- ... -->
</div>
Cambia il valore del booleano
Puoi cambiare il valore booleano aggiungendo label
con il set di attributi for
:
<label for="sidebarShown">Show/Hide the sidebar!</label>
Accesso al valore booleano con CSS
Il normale selettore (come .color-red
) specifica le proprietà predefinite. Possono essere sovrascritti seguendo i selettori true
/ false
:
/* true: */
<checkbox>:checked ~ [sibling of checkbox & parent of target] <target>
/* false: */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target] <target>
Nota che <checkbox>
, [sibling ...]
e <target>
dovrebbero essere sostituiti dai selettori appropriati. [sibling ...]
può essere un selettore specifico, (spesso se sei pigro) semplicemente *
o nulla se l'obiettivo è già un fratello della casella di controllo.
Esempi per la struttura HTML di cui sopra sarebbero:
#sidebarShown:checked ~ #container #sidebar {
margin-left: 300px;
}
#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
background: #333;
}
In azione
Vedi questo violino per l'implementazione di questi booleani globali.
CSS3: esempio di selettore all'interno del campo
<style>
input:in-range {
border: 1px solid blue;
}
</style>
<input type="number" min="10" max="20" value="15">
<p>The border for this value will be blue</p>
La :in-range
pseudo-classe CSS :in-range
corrisponde quando un elemento ha il suo attributo value all'interno delle limitazioni di intervallo specificato per questo elemento. Consente alla pagina di fornire un feedback sul fatto che il valore attualmente definito utilizzando l'elemento si trova all'interno dei limiti dell'intervallo. [1]
Pseudo classe bambino
"La pseudo-classe CSS: nth-child (an + b) corrisponde ad un elemento che ha un fratello + b-1 prima nell'albero del documento, per un dato valore positivo o zero per n" - MDN: nth-child
pseudo-selettore | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
:first-child | ✔ | |||||||||
:nth-child(3) | ✔ | |||||||||
:nth-child(n+3) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
:nth-child(3n) | ✔ | ✔ | ✔ | |||||||
:nth-child(3n+1) | ✔ | ✔ | ✔ | ✔ | ||||||
:nth-child(-n+3) | ✔ | ✔ | ✔ | |||||||
:nth-child(odd) | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
:nth-child(even) | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
:last-child | ✔ | |||||||||
:nth-last-child(3) | ✔ |
Seleziona l'elemento usando il suo ID senza l'alta specificità del selettore ID
Questo trucco ti aiuta a selezionare un elemento usando l'ID come valore per un selettore di attributi per evitare l'alta specificità del selettore ID.
HTML:
<div id="element">...</div>
CSS
#element { ... } /* High specificity will override many selectors */
[id="element"] { ... } /* Low specificity, can be overridden easily */
A. L'esempio: non pseudo-classe e B.: focus-all'interno della pseudo-classe CSS
A. La sintassi è presentata sopra.
Il seguente selettore corrisponde a tutti gli elementi <input>
in un documento HTML che non sono disabilitati e non hanno la classe .example
:
HTML:
<form>
Phone: <input type="tel" class="example">
E-mail: <input type="email" disabled="disabled">
Password: <input type="password">
</form>
CSS:
input:not([disabled]):not(.example){
background-color: #ccc;
}
La pseudo-classe :not()
supporterà anche i selettori separati da virgola in Selectors Livello 4:
CSS:
input:not([disabled], .example){
background-color: #ccc;
}
Vedi la sintassi dello sfondo qui .
B. Il: focus-all'interno della pseudo-classe CSS
HTML:
<h3>Background is blue if the input is focused .</p>
<div>
<input type="text">
</div>
CSS:
div {
height: 80px;
}
input{
margin:30px;
}
div:focus-within {
background-color: #1565C0;
}
L'esempio del selettore pseudo-classe: only-child
La pseudo-classe CSS
:only-child
rappresenta qualsiasi elemento che è l'unico figlio del suo genitore.
HTML:
<div>
<p>This paragraph is the only child of the div, it will have the color blue</p>
</div>
<div>
<p>This paragraph is one of the two children of the div</p>
<p>This paragraph is one of the two children of its parent</p>
</div>
CSS:
p:only-child {
color: blue;
}
L'esempio sopra seleziona l'elemento <p>
che è il figlio unico dal suo genitore, in questo caso un <div>
.
Il: ultimo tipo di selettore
Il :last-of-type
seleziona l'elemento che è l'ultimo figlio, di un particolare tipo, del suo genitore. Nell'esempio seguente, il css seleziona l'ultimo paragrafo e l'ultima intestazione h1
.
p:last-of-type {
background: #C5CAE9;
}
h1:last-of-type {
background: #CDDC39;
}
<div class="container">
<p>First paragraph</p>
<p>Second paragraph</p>
<p>Last paragraph</p>
<h1>Heading 1</h1>
<h2>First heading 2</h2>
<h2>Last heading 2</h2>
</div>