Quando un'attività può essere eseguita da Javascript o CSS, è meglio usare CSS? [chiuso]


11

Ho sempre posto il veto a JavaScript usando CSS il più possibile.

cioè creo schede e pulsanti di rollover usando CSS anziché JavaScript.

Ho visto alcune soluzioni - in particolare il framework Web Wt - che sostengono JavaScript; ma esegui il downgrade grazioso a CSS se il browser non è abilitato / js-disabled.

So che CSS e JavaScript hanno scopi diversi, tuttavia c'è sovrapposizione; che è il motivo di questa domanda.

Devo continuare a utilizzare CSS il più possibile su JavaScript?

Risposte:


10

Sì.

Lo scopo del CSS è layout, aspetto grafico e animazioni

Lo scopo di JavaScript è l'interazione.

Se stai facendo layout, usa CSS, se stai impostando l'aspetto e usa CSS, se l'animazione che stai facendo usa CSS3

Se si collegano i gestori di eventi o si reagisce all'input dell'utente, utilizzare JavaScript.

Si noti che le persone utilizzano JavaScript anziché CSS per il supporto del browser. Esistono altre soluzioni come emulare le funzionalità CSS utilizzando JavaScript.


1
Mi piacciono molte delle funzionalità implementate in CSS3, tuttavia il supporto del browser è stato lento e devo ancora facilitare i browser legacy. Altrimenti userei HTML5 anche per la convalida dell'input: P
AT

javascript non è solo usato per l'interazione. Può anche essere utilizzato per inviare dati al server Web e molte altre cose.
eriawan,

L'interazione di @eriawan potrebbe essere un termine vago. ma javascript è principalmente x quando interagisce con l'utente, dove x è arbitrario
Raynos

12

Bene, questa è in realtà una domanda piuttosto interessante. Sto cercando di pensare a come farebbe un punto di riferimento su qualcosa del genere, soprattutto dal momento che la maggior parte delle volte né i CSS né i JavaScript stanno andando a fare cose intensamente computazionali su una pagina web.

Il mio istinto direbbe che usa CSS il più possibile, ma non trasformarlo in una regola dura e veloce.

a:hover {
  background-color: green;
}

è semanticamente migliore allora

$('a').onmouseover(function() {
  $(this).css('background-color','green');
})

MA

$('a').onmouseover(function() {
  if (somethingelsehappened) {
    $(this).css('background-color','green');
  }
})

sarebbe difficile (anche se non impossibile) nei CSS. Potresti farlo in questo modo.

$('a').onmouseover(function() {
  if (somethingelsehappened) {
    $(this).addClass('Green');
  }
})

a.green {
  background-color: green;
}

Questo sarebbe davvero un modo leggermente più imbarazzante di fare ciò che avrebbe potuto essere fatto direttamente in JavaScript, ma ci sto pensando da un paio di minuti, e anche qui, la soluzione giusta potrebbe benissimo essere un CSS, ad esempio se stavi impostando molti attributi durante il passaggio del mouse.

** Si noti che nessuno di questo codice dovrebbe funzionare, questi sono solo a scopo dimostrativo. **


3
Ben detto, ma per il tuo secondo esempio non esiterei nemmeno ad usare una classe CSS (meglio denominata). Esiste una netta sovrapposizione tra i due in termini di presentazione e comportamento, ma in questi esempi è piuttosto semplice: il comportamento sta cambiando l'aspetto al passaggio del mouse, l'aspetto è descritto nei CSS.
sevenseacat,

3

Considera se dalla rete per sviluppatori di Yahoo :

"Dopo aver analizzato i numeri, abbiamo riscontrato un tasso costante di richieste disabilitate per JavaScript che si aggiravano intorno all'1% del traffico di visitatori effettivo, con il tasso più alto circa il 2% circa negli Stati Uniti e il più basso circa lo 0,25% circa in Brasile. gli altri paesi testati hanno mostrato numeri molto vicini all'1,3 percento ".

Con percentuali così basse (al massimo) sembra non valerne la pena (a meno che gli utenti dei tuoi siti web non provengano principalmente da quel 2%) preoccuparsi del caso in cui gli utenti hanno disattivato il loro javascript. L'utente medio non sa come disattivare JavaScript e probabilmente non gliene importa. Se stai sviluppando un sito Web tecnologico, potresti prendere in considerazione la possibilità che abbiano disabilitato javascript, tuttavia se hanno probabilmente sono abituati a siti Web che non funzionano correttamente poiché molti siti Web usano javascript pesantemente.

Detto questo, ho trovato molti casi in cui lo sviluppo di javascript rende molto più facile quello che sto cercando di realizzare e altri casi in cui css fa lo stesso.

Alla fine ogni "lingua" ha il suo posto appropriato nello sviluppo web e usata saggiamente può migliorare sia lo sviluppo che l'esperienza dell'utente. Scopri quali sono questi usi (ti consiglio di imparare l'esperienza) e applicare saggiamente. Nella mia esperienza, impostare regole di pietra come "Non usare mai JS quando esiste una soluzione CSS" (parafrasato) raramente sono le migliori nel mondo pratico.


Grazie per questo, molte informazioni. Puoi espandere il tuo quarto paragrafo?
AL

3
CSS è uno strumento di "styling" e Javascript è uno strumento di "interattività". Ho scoperto che è molto più semplice creare menu a discesa, ad esempio in stile CSS ma animati con JavaScript. Puoi farlo con CSS? sì. Riesci a martellare un chiodo con un cacciavite? sì. Per l'esempio inverso, se tutto ciò che devi fare è cambiare colore su un collegamento quando il mouse si trova sopra il collegamento, probabilmente è un po 'eccessivo usare Javascript per quello quando c'è un elemento CSS appositamente progettato per quello scopo. Puoi farlo con Javascript? Sì ... puoi uccidere un ragno con una mazza? Sì ...
Kenneth il

2

JavaScript è un vero linguaggio informatico, nel senso che ha lo stato e il controllo dell'esecuzione del programma. Pertanto, non esiste un limite massimo alla complessità che può ottenere e qualsiasi cosa tu scriva al suo interno ha un minimo indispensabile di complessità. CSS è un codice descrittivo; la sua complessità è limitata al livello di complessità che una ricetta può avere. Pertanto, se si può fare qualcosa sia in CSS che in JavaScript, preferirei di gran lunga utilizzare i CSS, poiché è destinato a essere meno complesso.


1
"se si può fare qualcosa usando CSS piuttosto che JavaScript, preferirei di gran lunga usare CSS, poiché è destinato a essere meno complesso" ... Come si fa a capire? Dipende davvero da cosa stai cercando di capire se sarebbe più complesso o meno in JS vs CSS ...
Kenneth,

Come ho già detto, un programma con stato di controllo dell'esecuzione è immensamente più complesso di quanto possa mai essere una ricetta.
Mike Nakis,

per esempio: trovo molto più complesso fare menu a discesa in CSS in quanto devi fare tante modifiche e aggiungere molti elementi html extra solo per farlo funzionare su browser normali e poi se vuoi che funzioni in vecchi o i browser randagi (IE, ecc.) ne richiedono ancora di più. Con javascript bastano un paio di semplici righe di codice per animarlo e un paio di righe di css per modellarlo.
Kenneth,

Certo, è ovvio che "è necessaria la discrezione del programmatore". Se non è possibile farlo nei CSS, o se non è consigliabile a causa di incompatibilità del browser, allora è preferibile JavaScript. La mia risposta è più sul lato accademico delle cose piuttosto che sul lato pragmatico.
Mike Nakis,

Domanda a margine (solo per questa risposta): IE6 supporta la stessa versione di JavaScript dei browser moderni? - Con questo intendo sottrarre informazioni, quindi non devo preoccuparmi degli "standard" specifici del browser.
AL

1

Javascript è un linguaggio di scripting, il che significa che ha la capacità di aggiungere un po 'di logica. Il CSS è usato per descrivere l'aspetto e lo stile di un documento. È stato progettato principalmente per separare la struttura del documento dalla formattazione e dal layout (presentazione).

Puoi usare Javascript per modificare l'aspetto di una pagina web ma dato che CSS voleva farlo, andrei con CSS per lo stile del sito e lascerei il resto a Javascript.


Wikipedia:

Javascript utilizza:

  • Apertura o pop-up di una nuova finestra con controllo programmatico su dimensioni, posizione e attributi della nuova finestra (ad es. Se i menu, le barre degli strumenti, ecc. Sono visibili).
  • Convalida dei valori di input di un modulo Web per assicurarsi che siano accettabili prima di essere inviati al server.
  • Modifica delle immagini mentre il cursore del mouse si sposta su di esse: questo effetto viene spesso utilizzato per attirare l'attenzione dell'utente su collegamenti importanti visualizzati come elementi grafici.

AGGIORNARE. Per quanto riguarda il terzo punto, il W3C dice riguardo ai CSS:

La :hoverpseudo-classe si applica mentre l'utente designa un elemento con un dispositivo di puntamento, ma non necessariamente lo attiva. Ad esempio, un agente utente visivo potrebbe applicare questa pseudo-classe quando il cursore (puntatore del mouse) passa sopra una casella generata dall'elemento.


Uso CSS:

Prima del CSS, quasi tutti gli attributi di presentazione dei documenti HTML erano contenuti nel markup HTML; tutti i colori dei caratteri, gli stili di sfondo, gli allineamenti degli elementi, i bordi e le dimensioni dovevano essere esplicitamente descritti, spesso ripetutamente, all'interno dell'HTML. Il CSS consente agli autori di spostare gran parte di tali informazioni in un foglio di stile separato con conseguente markup HTML notevolmente più semplice.


1
"Modifica delle immagini mentre il cursore del mouse si sposta su di esse: questo effetto viene spesso utilizzato per attirare l'attenzione dell'utente su collegamenti importanti visualizzati come elementi grafici." - Non è una caratteristica dei CSS?
AL

@AT Sì, hai ragione (+1), e grazie per averlo segnalato. La hoverpseudo-classe ha questo scopo. Stavo solo citando. Modificato.
pferor
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.