SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Menu html/css/js che scompare sotto i video di youtube o video in flash

Se avete nel sito un menu a discesa e subito sotto un video con codice embed di youtube o comunque in flash, avrete notato che il menu scompare sotto il video che praticamente lo copre. Cercando di modificare le proprietà CSS dei div/li/etc che compongono il menu in modo da impostare un ordine di visualizzazione più alto (z-index), purtroppo non si ottiene nessun risultato.
L’unico modo per far si che il menù sia sovrapposto al video youtube o Flash è modificare il codice che visualizza il player ed in particolare inserendo dopo il TAG <object >:

<param name="wmode" value="transparent" />

e nel TAG <embed …>:

wmode="transparent"

Ad esempio, se il codice embed del player è:

<object width="400" height="300">
  <param value="true" name="allowfullscreen" />
  <param value="always" name="allowscriptaccess" />
  <param name="movie" value="..." />
  <embed width="400" height="300" allowscriptaccess="always"
   allowfullscreen="true" type="application/x-shockwave-flash"
   src="...">
  </embed>
</object>

deve diventare:

<object width="400" height="300">
  <param name="wmode" value="transparent" />
  <param value="true" name="allowfullscreen" />
  <param value="always" name="allowscriptaccess" />
  <param name="movie" value="..." />
  <embed width="400" height="300" allowscriptaccess="always"
   allowfullscreen="true" type="application/x-shockwave-flash"
   src="..." wmode="transparent">
  </embed>
</object>

Testare la grafica di un sito su varie versioni di Internet Explorer

Sicuramente vi sarete accorti che utilizzo un Mac (per molte ragioni che non sto qui ad indicare), ma quando rilascio un sito o un’applicazione web è necessario testare il tutto anche con Internet Explorer. Per farlo utilizzo una macchina virtuale con windows gestita dall’ottimo VirtualBox di Oracle e l’applicativo IETester che consente di visualizzare il sito avendo il rendering delle varie versione di Internet Explorer disponibili.

enjoy

Usiamo il CSS condizionale

Come sicuramente saprete, i diversi browser in circolazione non interpretano il codice CSS allo stesso modo. Questo significa che in alcuni casi le pagine web vengono mostrate in modo differente se visualizzate nei differenti browser.
La soluzione è creare delle regole CSS condizionali, ovvero creare delle definizioni valide solo per un browser (o un gruppo) ma non per altri.
Segue un esempio di CSS condizionale:

.sample {
width: 400px;
[if IE 6] width: 600px;
}

In questo caso solo Internet Explorer 6 imposterà la larghezza a 600px, mentre gli altri browser a 400px.

La sintassi:

[if browser]

Eseguo se il browser corrisponde a quello indicato (es. [if IE])

[if ! browser]

Eseguo se il browser NON corrisponde a quello indicato (es. [if ! IE])

[if browser version]

Eseguo se la versione del browser corrisponde a quella indicato (es. [if IE 6])

[if ! browser version]

Eseguo se la versione del browser NON corrisponde a quella indicato (es. [if ! IE 6])

Browser

IE – Internet Explorer
Gecko – Gecko based browsers (Firefox, Camino etc)
Webkit – Webkit based browsers (Safari, Shiira etc)
Opera – Opera’s browser
IEMac – Internet Explorer for the Mac
Konq – Konqueror
IEmob – IE mobile
PSP – Playstation Portable
NetF – Net Front

E’ infine possibile dichiarare delle condizioni. La sintassi è:

[if condition browser version]

Eseguo se la condizione è verificata (es. [if lt IE 6])

[if ! condition browser version]

Eseguo se la condizione NON è verificata (es. [if ! lt IE 6])

Condizioni

lt – Minore di
lte – Minore di o Uguale a
eq – Uguale a
gte – Maggiore di o Uguale a
gt – Maggiore di

min-height cross-browser (IE, FF)

La proprietà min-height non viene gestita (come a solito) allo stesso modo da tutti i browser. Di seguito un hack per avere lo stesso risultato sui vari browser:

height: 20px;
height: auto !important;
min-height: 20px;

Gestione Crossbrowser semplificata

Oggi voglio pubblicare una cosa che differisce dagli argomenti degli altri post, ma dato che l’html è comunque legato in qualche modo al mio mondo, volevo scrivere due righe su come bypassare un annoso problema di compatibilità di visualizzazione tra i browser.

Immaginiamo di aver definito uno stile CSS come segue:

#search_box {
  float: right;
  clear: right;
  width: 200px;
}

Ci accorgiamo però che mentre Firefox visualizza correttamente il div, Internet Explorer ha un posizionamento differente dello stesso. Non mi dilungo a spiegare il motivo per cui questo succede (usando un motore di ricerca troverete molta documentazione a proposito), ma voglio indicare un modo semplice per ovviare a questa anomalia. Ipotizziamo che per Firefox vada bene una larghezza di 200px mentre per explorer ne serva una da 230px, possiamo modificare la definizione CSS come segue:

#search_box {
  float: right;
  clear: right;
  width: 200px !important; /*firefox*/
  width: 230px; /*explorer*/
}

In pratica mentre Firefox considera la riga dove trova !important come più importante di altre eventuali successive, Explorer ignora tale direttiva e quindi prende in considerazione l’ultima dichiarazione di width.

Un altro sistema è il seguente:

#search_box  {
    width: 200px;   /* per tutti i browser */
   *width: 230px;  /* per tutti gli IE */
}
* html #search_box  {
  width: 230px; /* per IE6 e IE5 */
}

Chiaramente il sistema migliore è l’uso dei CSS condizionali, ma di questo parleremo un’altra volta

Page optimized by WP Minify WordPress Plugin