Funzionalità nascoste dell'HTML


110

L'HTML essendo il linguaggio più utilizzato (almeno come linguaggio di markup) non ha ottenuto il dovuto merito.
Considerando che esiste da così tanti anni, cose come i controlli FORM / INPUT sono rimaste le stesse senza nuovi controlli aggiunti.

Quindi almeno dalle funzionalità esistenti, conosci qualche funzionalità che non è ben nota ma molto utile.

Naturalmente, questa domanda è sulla falsariga di:

Funzionalità nascoste di JavaScript
Funzionalità nascoste di CSS
Funzionalità nascoste di C #
Funzionalità nascoste di VB.NET
Funzionalità nascoste di Java
Funzionalità nascoste di ASP classico
Funzionalità nascoste di ASP.NET
Funzionalità nascoste di Python
Funzionalità nascoste di TextPad
Funzionalità nascoste di Eclipse

Non menzionare le funzionalità di HTML 5.0, poiché è in bozza funzionante

Specifica una caratteristica per risposta .

Risposte:


244

Utilizzando un percorso assoluto indipendente dal protocollo:

<img src="//domain.com/img/logo.png"/>

Se il browser sta visualizzando una pagina in SSL tramite HTTPS, richiederà quell'asset con il protocollo https, altrimenti lo richiederà con HTTP.

Ciò impedisce il terribile messaggio di errore "Questa pagina contiene elementi protetti e non protetti" in IE, mantenendo tutte le richieste di risorse all'interno dello stesso protocollo.

Avvertenza: se utilizzati su un <link> o @import per un foglio di stile, IE7 e IE8 scaricano il file due volte . Tutti gli altri usi, tuttavia, vanno bene.


29
Questa non è una funzionalità HTML ma una funzionalità URL / URI.
Gumbo

44
@ Gumbo: Vero, è una funzionalità URI, ma ho pensato che fosse abbastanza buona da piegare le regole e includerla qui. E non mi aspetto presto delle caratteristiche nascoste della specifica URI. :)
Paul Irish,

2
una barra è relativa dalla parte del dominio, non dalla parte del protocollo
SztupY

2
IE è così incredibilmente DUMB! Perché cazzo fa DL il file due volte?

5
C'è uno svantaggio principale: quando un file viene salvato su disco e vi si accede utilizzando il file:protocollo, il browser non sarà in grado di trovare la risorsa (ad esempio, di un CDN o di qualche altro server esterno).
Marcel Korpel

138

Il tag label collega logicamente l'etichetta con l'elemento form utilizzando l'attributo "for". La maggior parte dei browser lo trasforma in un collegamento che attiva il relativo elemento del modulo.

<label for="fiscalYear">Fiscal Year</label>
<input name="fiscalYear" type="text" id="fiscalYear"/>

24
sì, è incredibile come pochi siti lo utilizzino attivamente. Ho visto siti che usano js per fare questo ...
Boris Callens

2
Ho scoperto questo abbastanza di recente.
Arnis Lapsa

4
cagdas, non ci sono davvero funzionalità nascoste in HTML, è uno standard specificato.
mancanza di palpebre

54
Per espandere la risposta, si può anche racchiudere un input con un'etichetta e omettere l'attributo for: <label> Fiscal Year <input name = "fiscalYear" type = "text" /> </label>
eyelidlessness

32
Usare caselle di controllo e pulsanti di opzione senza dovrebbe essere un crimine.
Kornel

136

La proprietà contentEditable per (IE, Firefox e Safari)

<table>
    <tr>
      <td><div contenteditable="true">This text can be edited<div></td>
      <td><div contenteditable="true">This text can be edited<div></td>
    </tr>
</table>

Questo renderà le celle modificabili! Vai avanti, provaci se non mi credi.


7
La domanda richiede funzionalità che non sono state introdotte da HTML5
Quentin

15
David Dorward, non è esattamente giusto dire che è stato introdotto con HTML5, poiché contentEditable è stato introdotto da MS in IE 5.5, ma sì, non è stato standardizzato fino a HTML5; Tyson & Steve, contentEditable è stato introdotto in Safari nella versione 2.0, ma molti importanti metodi di formattazione non sono stati aggiunti fino alla 3.x; Victor H Valle, dipende dal tuo doctype. HTML 4 dovrebbe espanderlo a = "true" quando è compresso.
mancanza di palpebre

2
il collegamento try it non porta a un esempio appropriato
Gordon Gustafson

4
@Binoj - Assolutamente no. "L'attributo contenteditable è un attributo enumerato le cui parole chiave sono la stringa vuota, true e false" - w3.org/TR/html5/editing.html
Quentin

2
Meglio ancora, aggiungi quanto segue come bookmarklet per modificare qualsiasi pagina web in cui ti trovi: javascript: document.body.contentEditable = 'true'; document.designMode = 'on'; void (0);
Amro

102

Penso che il tag optgroup sia una caratteristica che le persone non usano molto spesso. La maggior parte delle persone con cui parlo tende a non rendersi conto che esiste.

Esempio:

<select>
  <optgroup label="Swedish Cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
  </optgroup>
  <optgroup label="German Cars">
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </optgroup>
</select>

Sfortunatamente, l'implementazione del browser della gerarchia dei menu lascia molto a desiderare. Sospetto che optgroup non sia molto utile perché i suoi casi d'uso rilevanti sono pochi e distanti tra loro.
mancanza di palpebre

1
Un livello dovrebbe essere supportato in tutti i browser. Un forum web che faccio parte di altri dove lo utilizza in alcune schermate per dividere l'elenco dei forum nelle stesse sezioni utilizzate nella pagina principale.
staticsan

@staticsan. Sono d'accordo che sia utile per una piccola categorizzazione di un numero di elementi.
RichardOD

5
@eyelidlessness: vedo sempre menu a discesa che fanno rientrare gli elementi o usano una sorta di testo di "intestazione" come ---category---.
DisgruntledGoat

4
Questa è una caratteristica interessante che non conoscevo!
Chrisb,

100

La mia parte preferita è il tag di base, che è un salvavita se si desidera utilizzare il routing o la riscrittura dell'URL ...

Diciamo che ti trovi in:

www.anypage.com/folder/subfolder/

Di seguito è riportato il codice e i risultati per i collegamenti da questa pagina.

Ancoraggio regolare:

<a href="test.html">Click here</a>

Porta a

www.anypage.com/folder/subfolder/test.html

Ora se aggiungi il tag di base

<base href="http://www.anypage.com/" />
<a href="test.html">Click here</a>

L'ancora ora porta a:

www.anypage.com/test.html

48
Puoi anche usare solo /images/image.png, con una barra iniziale. :-)
molf

46
Il tag di base è un'opzione nucleare - è l'equivalente di #define: se non ne tenete traccia, rendetelo davvero chiaro ai futuri sviluppatori e rendetelo una parte di livello molto basso dell'architettura del sito che può portare a frustrazioni bug non evidenti. Non ne ho mai avuto bisogno , usalo con cautela.
annakata

2
Sì, ho anche visto il tag di base interferire con il mio JavaScript durante il tentativo di caricare dinamicamente i file CSS nella pagina. Inoltre, un bug in IE6 richiede di chiudere esplicitamente il tag (</base>), che non è valido. I commenti condizionali possono aiutare in questo.
avdgaag

4
Si noti che l'URL di base viene applicato a ogni URL relativo e non solo ai percorsi URL relativi. Quindi il riferimento #topverrebbe risolto in "top" nel documento indice radice e in "top" nello stesso documento.
Gumbo

17
Lo trovo estremamente utile in situazioni in cui devo "visualizzare il sorgente" e scaricare l'HTML di una pagina per lavorarci. Una volta scaricato il sorgente, puoi aggiungere un elemento BASE con l'attributo href appropriato. In questo modo, puoi lavorare in locale dopo aver scaricato solo il codice HTML di origine ... non è necessario scaricare tutti i javascript, css e immagini.
Andy Ford,

99
<img onerror="{javascript}" />

onerror è un evento JavaScript che verrà attivato subito prima che venga mostrata l'immagine della piccola croce rossa (in IE).

Puoi usarlo per scrivere uno script che sostituirà l'immagine rotta con un contenuto alternativo valido, in modo che l'utente non debba affrontare il problema della croce rossa.

A prima vista questo può essere visto come completamente inutile, perché, non sapresti prima se l'immagine era disponibile in primo luogo? Ma, se consideri, ci sono applicazioni valide perfette per questa cosa; Ad esempio: supponi di fornire un'immagine da una risorsa di terze parti che non controlli. Come il nostro gravatar qui in SO ... è servito da http://www.gravatar.com/ , una risorsa che il team di stackoverflow non controlla affatto, sebbene sia affidabile. Se http://www.gravatar.com/ non funziona, stackoverflow potrebbe risolvere il problema utilizzando onerror.


Aha ... se questo è quello che penso, dovrei saperlo prima quando ne avevo veramente bisogno. : /
Arnis Lapsa

per chiarire, onerror è un evento javascript (proprio come onclick) che ti permette di fare qualcosa quando un'immagine non riesce a caricarsi.
Jehiah

1
Daniel Silveira, vuoi chiarire che questo, in effetti, esegue un codice di errore in caso di immagini non funzionanti (es. 404)? Indipendentemente da ciò, questa è una funzionalità DOM, non una funzionalità HTML di per sé.
mancanza di palpebre

2
Ho avuto un uso insensibile questo, indicando un'immagine inesistente, chiunque ricorsivo ???
Pharabus

96

L' <kbd>elemento per la marcatura per l'input da tastiera

Ctrl+ Alt+Del


C'è qualcosa di speciale in <kbd> oltre a un formato di carattere diverso? se no ecco un elenco di altri tag di formattazione? w3schools.com/tags/tag_phrase_elements.asp
Il tuo amico Ken

Non particolarmente, solo non molto conosciuto, non credo
Russ Cam

3
Niente per impostazione predefinita, ma è più pulito contrassegnare l'elemento con CSS come fa SO.
Agent_9191

1
Non sapevo che esistesse, è divertente.
Kzqai

85
<blink>

Deve essere utilizzato per qualsiasi cosa importante sul sito. I siti più importanti racchiudono tutti i contenuti in un batter d'occhio.

<marquee>

Crea un effetto di scorrimento realistico, ottimo per e-book ecc.

Modifica: ragazzi facili, questo era solo un tentativo di umorismo


62
Forse la domanda avrebbe dovuto specificare che non dovresti elencare le funzionalità che vogliamo che rimangano nascoste.
Ben Blank

12
... ho usato <blink>, come parte di uno stile psuedo-terminale per un div che mostra il codice (: before {content: "drthomas @ house: ~ $";}: after {content: "_"; text -decorazione: ammiccamento;} ... è stato fantastico. Probabilmente dovrei cercare aiuto. =]
David dice di reintegrare Monica

2
<marquee> <blink> I tag HTML PIÙ fastidiosi di sempre !!! </blink> </marquee> Questi non sono nascosti, semplicemente non sono usati per un motivo.
Il tuo amico Ken il

2
Racchiudo la mia intera pagina in Marquee e Blink perché sono proprio così figo
Sphvn

3
Per favore. L'unico uso legittimo di <blink> è: il gatto di Schroedinger <blink> non </blink> è morto. (Pensavo fosse su xkcd, ma non riesco a trovarlo al momento.)
Christopher Creutzig

84

Non molto conosciuto ma puoi specificare lowsrcper le immagini che mostreranno lowsrcdurante il caricamento srcdell'immagine:

<img lowsrc="monkey_preview.png" src="monkey.png" />

Questa è una buona opzione per coloro a cui non piacciono le immagini interlacciate .

Un po 'di curiosità: a un certo punto questa proprietà era abbastanza oscura da essere utilizzata per sfruttare Hotmail , intorno al 2000.


Questo non lo sapevo. Può essere utilizzato per "caricare" l'animazione?
Boris Callens,

2
Ricevo un avviso di frode in Opera da quel link "exploit Hotmail". : o
jrista

2
È un sito Web di sicurezza, è sicuro.
Joey Robert,

27
Ma questo attributo è proprietario. msdn.microsoft.com/library/ms534138(VS.85).aspx
Gumbo

17
Questo attributo è stato deprecato a partire da HTML4: non dovresti usarlo nei siti Web di produzione.
Ben Hull

67

DELe INSper contrassegnare i contenuti eliminati e inseriti:

HTML <del>sucks</del> <ins>rocks</ins>!

10
Sicuramente non abbastanza usato.
mancanza di palpebre

2
@eyelidlessness: semplicemente non ci sono abbastanza situazioni in cui contrassegnare il testo eliminato / inserito è così utile.
DisgruntledGoat

2
Potrei giurare che StackOverflow ha usato <ins>e <del>nelle pagine Revisioni un po 'di tempo fa, ma ora usa <span class="diff-add">e <span class="diff-delete">. :(
sistema PAUSE

1
@Storie di revisione wiki di DisgruntledGoat? molti casi d'uso per questo
HorusKol

3
@ Horus: certo che puoi trovare usi, ma nel grande schema delle cose non è ancora una grande quantità di situazioni.
Capra scontenta

58

Il tag del pulsante è il nuovo input submittag e molte persone non lo conoscono ancora. Ad esempio, il testo nel pulsante può essere stilizzato utilizzando il tag del pulsante.

<button>
    <b>Click</b><br />
    Me!
</button>

Renderà un pulsante con due righe, la prima dice " Click " in grassetto e la seconda dice "Me!". Provalo qui .


15
Peccato che si sia rotto in IE <8. È possibile aggirare i problemi, ma può essere doloroso e talvolta si colpisce la protezione di sicurezza in esecuzione tra il server Web e l'ambiente di programmazione lato server.
Quentin

6
Ma IE <8 invierà il contenuto dell'elemento, non il suo valore. Credo che alcune versioni lo considereranno sempre come un controllo di successo (anche se non è stato cliccato).
Quentin

4
E se lo rendi <button contenteditable> puoi cambiare anche il testo del pulsante! Indica chiunque potrebbe trovarne un valido utilizzo. :)
Gavin

4
Non ho mai capito perché ci fosse un tipo di invio "input". Non si tratta di inserire nulla, ma solo di inviare ciò che hai immesso in altri campi.
Capra scontenta

3
@DisgruntledGoat: la sua coppia nome / valore verrà effettivamente inviata. Utile se hai più di un pulsante in un form (es. Modifica, elimina, sposta su, ecc.) E vuoi distinguere il pulsante premuto. Sfortunatamente lo stesso non funziona per buttonIE <8, invia sorprendentemente le coppie nome / valore di TUTTI gli buttonelementi.
BalusC

56

Specifica il css per la stampa

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

1
L'ho scoperto alcune settimane fa
Daniel Moura

41
Non proprio nascosto imo.
Dmitri Farkov,

Questo è di uso comune.
UpTheCreek

Se non l'hai mai affrontato prima, spero che tu non abbia mai creato siti Web di produzione prima ...
Kzqai

come può essere considerato nascosto?
Marin

54

gli elementi <dl> <dt>e <dd>vengono spesso dimenticati e stanno per Elenco definizioni, Termine definizione e Definizione.

Funzionano in modo simile a una lista non ordinata ( <ul>) ma invece di singole voci è più simile a una lista chiave / valore.

<dl>
  <dt>What</dt><dd>An Example</dd>
  <dt>Why</dt><dd>Examples are good</dd>
</dl>

Inoltre, la semantica dl / dt / dd è appropriata per elenchi simili (es. La struttura è stata raccomandata per i dialoghi).
mancanza di palpebre

2
La presentazione predefinita non è così bella, ma le persone dimenticano che gli elementi possono essere stilizzati in molti modi con CSS.
DisgruntledGoat

18
La cosa più interessante che viene spesso dimenticata è che il formato è chiave / valore / valore / valore / valore / chiave / valore
Quentin

1
@D_N, penso che il punto in cui risiede il disaccordo è che considero gli usi suggeriti come una parte della definizione e della semantica, piuttosto che separati e contraddittori.
mancanza di palpebre

1
@D_N e @eyelidlessness - controlla la nota di Bruce Lawson sul segnare semanticamente una conversazione ... inoltre la giuria è ancora fuori sull'elemento di dialogo HTML5 ... brucelawson.co.uk/2006/…
Fenton

52

Non esattamente nascosto, ma (e questa è colpa di IE) non abbastanza persone conoscono thead, tbody, tfoot per i miei gusti. E quanti di voi sapevano che il piede dovrebbe apparire sopra il corpo nel markup?


1
boris callens, sì, tbody è implicito se nessuno di thead, tbody e tfoot sono presenti.
mancanza di palpebre

2
Se IE5 avesse implementato TBODY correttamente, più persone lo userebbero. Questo è stato il problema principale diversi anni fa. Mozilla e Opera hanno supportato lo scorrimento di TBODY che è stato davvero interessante; sfortunatamente, IE5 no.
staticsan

9
Sono utili per la stampa perché dovrebbero mettere i simboli theade tfootall'inizio e alla fine di ogni pagina. È un peccato che non ci sia un meccanismo per la ripetizione theadnel browser, quando si hanno tabelle lunghe e lunghe.
DisgruntledGoat

1
Sapevo che il piede andava al di sopra del corpo e penso che sia piuttosto stupido. Ho messo il mio tfoot sotto, dove aveva senso, ho ricevuto un errore di validazione, spostato il tfoot sopra tbody (confuso ma sempre conforme) e indovina un po '?! Quando cerchi di evidenziare la tabella, il browser (FF almeno) evidenzia il piede PRIMA del corpo, anche se visivamente è sotto il corpo! E poi!!! quando lo copi in un editor di testo, visivamente è SOPRA il corpo. Regola totalmente arbitraria.
Anthony

3
@Anthony: ha senso se hai una connessione lenta, significa che puoi vedere tutte le intestazioni e i piè di pagina mentre il contenuto della tabella è ancora in fase di caricamento.
me_e il

50

Il tag di interruzione di parolawbr o . Da Quirksmode:

(word break) significa: "Il browser può inserire un'interruzione di riga qui, se lo desidera." Se il browser non ritiene necessaria un'interruzione di riga, non accade nulla.

<div class="name">getElements<wbr>ByTagName()</div>

Offro al browser la possibilità di aggiungere un'interruzione di riga. Questo non sarà necessario su risoluzioni molto grandi, quando la tabella ha molto spazio. Su risoluzioni inferiori, tuttavia, tali interruzioni di riga posizionate strategicamente impediscono alla tabella di crescere più grande della finestra, causando così barre di scorrimento orizzontali.

C'è anche l' &shy;entità HTML menzionata nella stessa pagina. È lo stesso di wbrma quando viene inserita un'interruzione -viene aggiunto un trattino ( ) per indicare un'interruzione. Un po 'come è fatto in stampa.

Un esempio:

TextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextText


2
Fai attenzione perché c'è uno scarso supporto del browser su questo
Christophe Eblé

7
"IE8 come IE8" non lo supporta ed è difettoso in Safari 3.0 per Windows. A parte questo supporto è abbastanza buono. Fare riferimento alla tabella di compatibilità nel collegamento.
Aleemb

Hmm sitepoint reference ha contrassegnato questo tag come obsoleto e inutile, chi ha ragione? reference.sitepoint.com/html/wbr
Christophe Eblé,

Potrebbe essere deprecato come parte delle specifiche HTML ma funziona ancora nei browser. In caso di dubbio, segui il verdetto di QuirksMode (tabelle di compatibilità ora sponsorizzate da Google).
Aleemb

Sembra che questa sarebbe una cosa molto utile da includere nel prossimo standard CSS!
James,

43

Una caratteristica molto sottoutilizzata è il fatto che quasi ogni elemento, che fornisce contenuto visibile sulla pagina, può avere un attributo "titolo".

L'aggiunta di un tale attributo fa apparire un "suggerimento" quando il mouse viene "spostato" sopra l'elemento e può essere utilizzato per fornire informazioni non essenziali, ma utili, in modo da non rendere la pagina troppo affollata . (Oppure può essere un modo per aggiungere informazioni a una pagina già affollata)


Sì, l'attributo "titolo" è abbastanza utile, specialmente per gli elementi che devono essere cliccati.
Steve Harrison,

6
Il suggerimento visualizzato è specifico del browser. Non tutti i browser visualizzeranno lo stesso attributo del titolo. Ma è una bella caratteristica che uso sicuramente.
Travis

8
L'attributo title è utile, ma solo se usato in modo appropriato. La maggior parte dei browser visualizza la descrizione comando solo per pochi secondi prima che scompaia. Odio quando i designer sentono il bisogno di riempire l'attributo del titolo con 3 o 4 righe di testo, il che fa sì che tu debba passare il mouse sopra, quindi passare di nuovo il mouse per leggere il resto.
priestc

Usarlo in connessione con jQuery equivale a meraviglia.
Levi Morrison

Levi - puoi fare qualche esempio?
belugabob

38

Applicazione di più classi html / css a un tag. Stesso post qui

<p class="Foo Bar BlackBg"> Foo, Bar and BlackBg are css classes</p>

22
Quelle sono classi HTML, non classi CSS. CSS non ha classi (ha selettori di classe). Le classi HTML sono utili per cose diverse dai CSS.
Quentin

36
Wow! Semplicemente non riesco a superare il fatto che le persone trovino questa una caratteristica "nascosta". Ragazzi, mi sento stupido nel pubblicare alcune caratteristiche "veramente nascoste" perché le persone che hanno votato in alto probabilmente non si avvicineranno nemmeno a capire cosa significhi estendere un DTD.
Aleemb

5
d03boy, p.foo, p.var non è la stessa cosa di p.foo.bar. Il primo seleziona qualsiasi paragrafo con la classe "foo" o "var", il secondo seleziona un paragrafo con entrambe le classi.
mancanza di palpebre

5
La cosa riguardante le classi HTML è un buon punto, perché mi porta su un punto: html non dovrebbe essere a conoscenza del css .. dovresti essere in grado di creare html e passarlo a un designer che può implementare il loro design senza aver bisogno di cambiare html (non è ancora così;)) .. quindi questo dipende dalla tua denominazione e dal modo in cui usi le classi .. non creare classi per indirizzare le proprietà css .. usa le classi per identificare cosa sia l'elemento ' '.
meandmycode

1
Tecnicamente, "Foo Bar BlackBg" è una singola classe, e p.foo è solo zucchero sintattico per p [class ~ = foo] (vedi specifiche ). Tuttavia, è più facile pensare che abbia più classi.
Tgr

34

Sappiamo tutti delle DTD o delle dichiarazioni del tipo di documento (quelle cose che ti fanno fallire la pagina con il validatore W3C). Tuttavia, è possibile estendere i DTD dichiarando un elenco di attributi per gli elementi personalizzati.

Ad esempio, il validatore W3C fallirà per questa pagina a causa behavior="mouseover"dell'aggiunta al <p>tag. Tuttavia, puoi farlo passare in questo modo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
<!ATTLIST p behavior CDATA #IMPLIED>
]>

Ulteriori informazioni su DTD personalizzate su QuirksMode .


10
Ovviamente, questo lo rende "Valido: il tuo linguaggio di markup personalizzato" e non "XHTML 1.0 Transitional"
Quentin

3
+1. Non so perché questo fosse -1. Comunque va notato che il supporto del browser è praticamente nullo.
mancanza di palpebre

Abbastanza sicuro che Opera lo supporti.
Rich Bradshaw

2
@eyelidlessness funziona solo in XHTML. Non funziona in XHTML fittizio inviato come testo / HTML.
Kornel

2
Eesh, non un fan di questo. Per me, il valore dell'HTML è che tutti sul pianeta sanno cosa significa (più o meno), perché tutti usiamo gli stessi tag e attributi. Non sono sicuro del motivo per cui l' classattributo non è abbastanza estensibile.
Paul D. Waite

28

Possiamo assegnare una stringa codificata in base 64 come attributo source / href di immagine, JavaScript, iframe, link

per esempio

<img alt="Embedded Image" width="297" height="246" 
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA..." />

div.image {
  width:297px;
  height:246px;
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA...);
}

<image>
  <title>An Image</title>
  <link>http://www.your.domain</link>
  <url>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA...</url>
</image>

<link rel="stylesheet" type="text/css"
  href="data:text/css;base64,LyogKioqKiogVGVtcGxhdGUgKioq..." />

<script type="text/javascript"
  href="data:text/javascript;base64,dmFyIHNjT2JqMSA9IG5ldyBzY3Jv..."></script>

Riferimenti

Come posso costruire immagini usando il markup HTML?

File binario su codificatore / traduttore Base64


4
Purtroppo, IE <8 non lo supporta. È tuttavia possibile utilizzare MHTML invece per questi browser: phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under
Mathias Bynens

26

Di recente ho scoperto i tag fieldset e label. Come sopra, non nascosto ma utile per i moduli.

<fieldset> spiegazione

Esempio:

<form>
  <fieldset>
    <legend>Personalia:</legend>
    Name: <input type="text" size="30" /><br />
    Email: <input type="text" size="30" /><br />
    Date of birth: <input type="text" size="10" />
  </fieldset>
</form>

Fornisci un esempio di utilizzo.
Binoj Antony,


Fieldset rilevato dalla pagina di esempio aspnet mvc. ^^
Arnis Lapsa

2
Non sapevo di questo. Ecco le specifiche W3c: w3.org/TR/html401/interact/forms.html#h-17.10
MitMaro

I fieldset e le leggende sono fantastici. Un modo davvero carino per contrassegnare i tuoi moduli.
Neil Aitken

25

Puoi utilizzare il objecttag invece di un iframeper includere un altro documento nella pagina:

<object data="data/test.html" type="text/html" width="300" height="200">
  alt : <a href="data/test.html">test.html</a>
</object>

57
Che finisce per funzionare quasi esattamente come un iframe tranne per il fatto che è meno supportato e ha meno funzionalità.
Quentin

iframe è deprecato, si spera di ottenere presto un supporto migliore,
Gordon Gustafson,

12
iframe non è deprecato in HTML 5.
Zach

Previene gli attacchi XSS dalla pagina incorporata?
codardo anonimo

1
Credo che utilizzi SOP, come con gli iframe.
Zach,

25

<optgroup>è un ottimo strumento che le persone spesso perdono quando creano <select>elenchi segmentati .

<select>
  <optgroup label="North America">
    <option value='us'>United States</option>
    <option value='ca'>Canada</option>
  </optgroup>
  <optgroup label="Europe">
    <option value='fr'>France</option>
    <option value='ir'>Ireland</option>
  </optgroup>
</select>

è quello che dovresti usare invece di

<select>
  <option value=''>----North America----</option>
  <option value='us'>United States</option>
  <option value='ca'>Canada</option>
  <option value=''>----Europe----</option>
  <option value='fr'>France</option>
  <option value='ir'>Ireland</option>
</select>

25

La maggior parte è anche inconsapevole del fatto che è possibile distinguere il pulsante del modulo premuto semplicemente dando loro una coppia nome / valore. Per esempio

<form action="process" method="post">
     ...
     <input type="submit" name="edit" value="Edit">
     <input type="submit" name="delete" value="Delete">
     <input type="submit" name="move_up" value="Move up">
     <input type="submit" name="move_up" value="Move down">
</form>

Lato server è quindi possibile ottenere l'effettivo pulsante premuto semplicemente verificando la presenza del parametro di richiesta associato al nome del pulsante. In caso contrario, è nullstato premuto il pulsante.

Ho visto un sacco di inutili JS hack / Soluzioni alternative per questo, ad esempio cambiando l'azione forma o la modifica di un valore di ingresso nascosto in anticipo a seconda del tasto premuto. È semplicemente sorprendente.

Inoltre, ho visto quasi altrettanti hack / soluzioni alternative JS per raccogliere quelli selezionati di più caselle di controllo come nelle righe della tabella. Ad ogni selezione / controllo di una riga della tabella, JS aggiungeva l'indice di riga a un valore separato da virgole in un elemento di input nascosto che sarebbe poi suddiviso / analizzato ulteriormente sul lato server. Questo è il risultato dell'inconsapevolezza che è possibile assegnare a più elementi di input lo stesso nome ma un valore diverso e che è ancora possibile accedervi come array sul lato server. Per esempio

<tr><td><input type="checkbox" name="rowid" value="1"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="2"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="3"></td><td> ... </td></tr>
...

L'inconsapevolezza darebbe a ciascuna casella di controllo un nome diverso e ometterebbe l'intero attributo del valore. In alcune situazioni JS-hack / workaround-free ho anche visto una magia inutilmente travolgente nel codice lato server per distinguere gli elementi selezionati.


1
Ehi .. Questa è apparentemente un'altra caratteristica nascosta di HTML: /;)
BalusC

1
Se un modulo ha più pulsanti di invio e l'utente fa clic su uno, alcune versioni di Internet Explorer comunicheranno allegramente al tuo server che sono stati tutti selezionati. Meraviglioso.
detly

1
@detly: solo se usi al <button type="submit">posto di <input type="submit">:)
BalusC

1
... buuuuut non ha anche IE6 problemi con <input type="submit">? (Il mio ricordo di questo problema è confuso: ho convinto da tempo i datori di lavoro a non preoccuparsi della compatibilità di IE per le app Web interne, quindi non è più un mio problema. Ma mi sembra di ricordare qualche ostacolo per rendere questo problema risolvibile in IE6. )
detly

2
Non è molto amichevole con i18n.
zneak

22

Tag Colgroup .

<table width="100%">
    <colgroup>
        <col style="width:40%;" />
        <col style="width:60%;" />
    </colgroup>
    <thead>
        <tr>
            <td>Column 1<!--This column will have 40% width--></td>
            <td>Column 2<!--This column ill have 60% width--></td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Cell 1</td>
            <td>Cell 2</td>
        </tr>
    </tbody>
</table>

15
Nella mia esperienza, il supporto di colgroup è alquanto instabile.
mancanza di palpebre

sorprendentemente simile è WPF Grid
Binoj Antony,

18

Se l' forattributo di un <label>tag non è specificato, viene impostato implicitamente come primo figlio <input>, ad es

<label>Alias: <input name="alias" id="alias"></label>

è equivalente a

<label for="alias">Alias:</label> <input name="alias" id="alias">

4
Ma questo ha meno supporto del browser rispetto all'attributo for
Quentin

4
@David - Hai qualche documentazione per supportarlo? Non credo di aver mai visto un browser non supportare questo utilizzo. Ho testato personalmente in IE6 / 7, FF2 / 3, Safari 3 e Chrome 1/2. Non mi sono messo alla prova in Opera, ma sarei molto sorpreso se non funzionasse. Questo comportamento fa parte della specifica HTML 4.0 originale, pubblicata per la prima volta più di undici anni fa: w3.org/TR/1998/REC-html40-19980424/interact/forms.html#adef-for
Ben Blank

Inoltre, non è valido inserire un input all'interno di un'etichetta e DOH non hai chiuso il tag di input in nessuno dei due esempi!
Anthony

5
Ti sbagli su entrambi i fronti: questa è una pratica valida e il tag di fine è vietato agli elementi di input.
moo

15

Pulsante come collegamento, nessun JavaScript :

Puoi inserire qualsiasi tipo di file nell'azione del modulo e hai un pulsante che funge da collegamento. Non è necessario utilizzare eventi onclick o simili. Puoi anche aprire il file in una nuova finestra inserendo una "destinazione" nel modulo. Non ho visto molto quella tecnica in applicazione.

Sostituisci questo

<a href="myfile.pdf" target="_blank">Download file</a>

con questo:

<form method="get" action="myfile.pdf" target="_blank">
    <input type="submit" value="Download file">
</form>

27
Il pulsante non avrà l'opzione "Salva file come", che potrebbe essere necessaria per gli utenti a cui non piace che Adobe Acrobat prenda il controllo del proprio browser.
Kornel

Si comporterà con il comportamento del browser predefinito quando si accede al file PDF. Potrebbe essere un file HTML, un file word, un file zip o qualsiasi altra cosa tu voglia.
Wadih M.

In quale situazione un anchor tag richiede un evento onclick? e perché 3 righe di html sarebbero migliori di 1? L'idea è che PUOI avere un pulsante invece di un collegamento, quindi è carino e un pulsante simile? Anche se su questo sembro irritabile, in realtà ho una pagina che utilizza i pulsanti invece dei collegamenti perché il file viene creato dinamicamente quando l'utente lo richiede, quindi non volevo un collegamento a: blah.php? Stuff = "userdata" Anche se avrei potuto seguire quella strada, non volevo rischiare che il nome del file avesse lo script di generazione del file come nome invece del nome del file che lo script dà al file.
Anthony

1
Perché non applicare lo stile al tag <a> come un pulsante? Sembra un sacco di spazzatura nel tuo markup.
UpTheCreek

2
@UpTheCreek alcune applicazioni web vogliono avere lo stesso aspetto del sistema operativo. Ad esempio un brutto pulsante quando l'utente utilizza Windows e un bellissimo pulsante quando l'utente utilizza Mac OS X.

13

Il modo più semplice per aggiornare la pagina in X secondi: META Refresh

<meta http-equiv="refresh" content="600">

Il valore nel contenuto indica i secondi dopo i quali desideri che la pagina si aggiorni.
[Modificare]

<meta http-equiv="refresh" content="0; url=foobar.com/index.html">

Per fare un semplice reindirizzamento!
(Grazie @rlb)


13
Ovviamente, capire quali elementi devono essere aggiornati e quindi aggiornarli tramite AJAX si traduce in un'esperienza utente molto più piacevole ...
Steve Harrison,

11
L'aggiornamento META non fa nulla di buono nelle pagine in cui c'è anche qualche re dell'attività del modulo utente, perché può interrompere la compilazione del modulo dell'utente e scartare tutto il lavoro. Penso che raramente ci sia un'occasione in cui questo tipo di aggiornamento sarebbe il migliore. Normalmente è solo la via più facile.
Robert Koritnik,

11
/ me odia le pagine che si aggiornano in questo modo ... dovrebbero essere bandite = /
Svish

3
Questo può essere utile anche se impostato su un valore leggermente inferiore al timeout della sessione per notificare all'utente che la sua sessione è scaduta ed è stata rimossa.
fforw

1
Pulsante di interruzione per brevi timeout.
Kornel

12

<html>, <head>E <body>tag sono opzionali. Se li ometti, verranno inseriti silenziosamente dal parser nelle posizioni appropriate. È perfettamente valido farlo in HTML (proprio come implicito <tbody>).

L'HTML in teoria è un'applicazione SGML. Questo è probabilmente il documento HTML 4 valido più breve :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<title//<p/

Quanto sopra non funziona da nessuna parte eccetto W3C Validator. Tuttavia, il text/htmldocumento HTML5 valido più breve funziona ovunque:

<!DOCTYPE html><title></title>

4
Dovresti stare attento a ciò che pubblicizzi. Il codice precedente passerà la convalida con 4 avvisi nel validatore w3c, ma il DocType è HTML 4.0. È abbastanza chiaro che HTML 4 discende da SGML e quindi mantiene questo standard di convalida sciolto, ma se si cambia quel DTD in XHTML 1.0 STRICT, si ottengono 15 errori, che è quasi uguale al numero di caratteri. XHTML è stato sviluppato perché l'HTML era così pigro (e quindi non sicuro) quindi non vogliamo più trarne vantaggio.
Anthony

3
Se cambi DOCTYPE del documento HTML / SGML in XHTML / XML otterrai un mix senza senso. È abbastanza ovvio e non sono sicuro del motivo per cui lo fai notare.
Kornel

3
Questo esempio potrebbe, tecnicamente, essere HTML 4 valido, ma i browser non supportano quella sintassi SGML abbreviata. Il seguente è il documento HTML 5 valido più breve, che i browser supportano effettivamente:<!DOCTYPE html><title></title>
Brian Campbell

Qualche idea su quanto sia compatibile escludere head/ body, non solo dal punto di vista della convalida?
kibibu

@kibibu: i browser non hanno problemi con questo. Le vecchie versioni di Opera a <head>volte omettevano in DOM, ma il contenuto principale era in DOM e funzionava comunque. Il problema più grande che ho riscontrato è che i client OpenID devono <head>essere presenti esplicitamente.
Kornel

11

L' langattributo non è molto conosciuto ma molto utile. L'attributo viene utilizzato per identificare la lingua del contenuto nell'intero documento o in un singolo elemento. I codici di lingua sono forniti nel codice ISO di 2 lettere della lingua (ad esempio "en" per l'inglese, "fr" per il francese).

È utile per i browser che possono regolare la visualizzazione delle virgolette, ecc. Anche gli screen reader traggono vantaggio dall'attributo lang e dai motori di ricerca.

Sitepoint ha qualche bella spiegazione dellang attributo.

Esempi

Specificare che la lingua sia l'inglese per l'intero documento, a meno che non venga sovrascritta da un altro langattributo a un livello inferiore nel DOM.

<html lang="en">

Specificare che la lingua nel paragrafo seguente deve essere lo svedese.

<p lang="sv">Ät din morgongröt och bli stor och stark!</p>

10

La dichiarazione "! DOCTYPE" . Non credo che sia una funzionalità nascosta, ma sembra che non sia ben nota ma molto utile.

per esempio

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd">

10
E per non parlare di "obbligatorio per la maggior parte dei linguaggi di markup attuali e senza uno è impossibile convalidare in modo affidabile un documento" ... validator.w3.org/docs/help.html#faq-doctype
Svish

Non penso che questo sia "non ben noto" più. Nel tempo tra IE 6 e IE 7, l'uso di doctype è passato da ~ 1% a> 50%.
mancanza di palpebre

@eyelidlessness La maggior parte degli IDE include questo tag, ecco perché il suo utilizzo è aumentato. Penso che questo tag non sia ben noto.
Daniel Moura,

6
E l'utilizzo di un doctype rigoroso risolve il 95% delle incoerenze del browser.
DisgruntledGoat

3
Parte dello standard e utilizzato dal 99% degli sviluppatori là fuori non suona come "funzionalità nascosta".
WhyNotHugo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.