Bir görev Javascript veya CSS ile gerçekleştirilebildiğinde, CSS kullanmak daha mı iyidir? [kapalı]


11

JavaScript'i her zaman mümkün olduğunca CSS kullanarak veto ediyorum.

yani JavaScript yerine CSS kullanarak sekmeler ve fareyle üzerine gelme düğmeleri oluşturuyorum.

JavaScript'i savunan bazı çözümler -özellikle Wt web-framework'ü gördüm ; ancak tarayıcı yetenekli değilse / js devre dışı değilse CSS'ye geçilir.

CSS ve JavaScript'in farklı amaçları olduğunu biliyorum, ancak çakışma var; ki bu da sorunun özüdür .

JavaScript üzerinden CSS'yi mümkün olduğunca kullanmaya devam etmeli miyim?

Yanıtlar:


10

Evet.

CSS amacı düzen, görünüm ve his ve animasyonlar

JavaScript amacı etkileşimdir.

Düzen yapıyorsanız CSS kullanın, görünüm ve his ayarlıyorsanız CSS kullanın, animasyon yapıyorsanız CSS3 kullanın

Olay işleyicileri eklerseniz veya kullanıcı girdisine yanıt verirseniz JavaScript kullanın.

Kullanıcıların tarayıcı desteği için CSS yerine JavaScript kullandığını unutmayın. Javascript kullanarak CSS özelliklerini taklit etmek gibi başka çözümler de vardır.


1
CSS3'te uygulanan birçok özelliği seviyorum, ancak tarayıcı desteği yavaştı ve hala eski tarayıcıları kolaylaştırmam gerekiyor. Aksi takdirde giriş doğrulaması için de HTML5 kullanırdım: P
AT

javascript yalnızca etkileşim için kullanılmaz. Verileri web sunucusuna ve diğer birçok şeye geri göndermek için de kullanılabilir.
eriawan

@eriawan etkileşimi belirsiz bir terim olabilir. ancak javascript temelde x ile arbitary olduğu kullanıcı etkileşimi x yapmak
Raynos

12

Aslında bu oldukça ilginç bir soru. Böyle bir şey üzerinde nasıl bir kıyaslama yapacağınızı düşünmeye çalışıyorum, özellikle de çoğu zaman ne CSS ne de JavaScript bir web sayfasında gerçekten hesaplama açısından yoğun şeyler yapacak.

Bağırsak hissediyorum CSS kullanmak mümkün olduğunca, ama zor ve hızlı bir kural haline getirmeyin söyleyebilirim.

a:hover {
  background-color: green;
}

anlamsal olarak daha iyi

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

FAKAT

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

CSS'de (imkansız olmasa da) zor olurdu. Bunu bu şekilde yapabilirsiniz.

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

a.green {
  background-color: green;
}

Bu, doğrudan JavaScript'te yapılabilecekleri yapmanın biraz daha garip bir yolu olurdu, ancak birkaç dakikadır bunu düşünüyorum ve burada bile doğru çözüm çok iyi bir CSS olabilir, örneğin fareyle üzerine gelindiğinde çok fazla özellik ayarlıyorsanız.

** Lütfen bu kodların hiçbirinin işe yaramayacağını unutmayın, bunlar sadece gösterim amaçlıdır. **


3
İyi dedi, ama ikinci örneğiniz için de (daha iyi adlandırılmış) bir CSS sınıfı kullanmaktan çekinmeyin. İkisi arasında sunum ve davranış açısından kesin bir çakışma vardır, ancak bu örneklerde oldukça basittir - davranış, fareyle üzerine gelindiğinde görünümü değiştiriyor, görünüm CSS'de açıklanıyor.
sevenseacat

3

Yahoo Developer Network'ten aşağıdakileri yapıp yapmayacağınızı düşünün :

"Rakamları kıstırdıktan sonra, gerçek ziyaretçi trafiğinin yaklaşık% 1'ini etkileyen sabit bir JavaScript devre dışı bırakılmış istek oranı bulduk; en yüksek oran ABD'de yaklaşık yüzde 2 ve en düşük oran ise Brezilya'da yaklaşık yüzde 0,25'tir. test edilen diğer ülkeler yüzde 1,3'e yakın rakamlar gösterdi. "

Yüzdelerin bu kadar düşük olması (maksimum olarak), kullanıcıların javascriptlerini kapattığı durum hakkında endişelenmek için (web siteleriniz öncelikle% 2'den gelmedikçe) buna değmez. Ortalama bir kullanıcı, javascript'in nasıl kapatılacağını bilmiyor ve muhtemelen umursamıyor. Bir teknoloji web sitesi geliştiriyorsanız, javascript'i devre dışı bırakma olasılığını düşünmek isteyebilirsiniz, ancak eğer varsa, birçok web sitesini yoğun bir şekilde kullandıkları için doğru çalışmayan web sitelerine alışkınlar.

Bütün bu söyleniyor ben javascript geliştirme çok daha kolay yapmaya çalışıyorum ne yapar birçok durumda bulduk ve diğer durumlarda css aynı yapar.

Sonunda her "dil" web geliştirmede uygun bir yere sahiptir ve akıllıca kullanılır, hem geliştirme hem de kullanıcı deneyimini geliştirebilir. Bu kullanımların ne olduğunu öğrenin (deneyim öğrenmeyi öneririm) ve akıllıca uygulayın. Deneyimlerime göre, "Bir CSS çözümü varken asla JS kullanma" (başka sözcüklerle yazılmış) gibi kurallara göre pratik dünyada nadiren en iyisidir.


Bunun için teşekkürler, çok bilgi. 4. paragrafınızı genişletebilir misiniz?
AT

3
CSS bir "stil" aracı ve Javascript bir "etkileşim" aracı. Örneğin, css ile stilize edilmiş ancak javascript ile animasyonlu açılır menüler yapmanın çok daha kolay olduğunu gördüm. Css ile yapabilir misin? Evet. Tornavida ile çivi çakabilir misin? Evet. Ters örnek için, tek yapmanız gereken fare bağlantının üzerindeyken bir bağlantıda renk değişikliği yapmaksa, bu amaç için özel olarak tasarlanmış bir CSS öğesi olduğunda bunun için Javascript kullanmak muhtemelen biraz fazladır. Javascript ile yapabilir misiniz? Evet ... Bir balyozla bir örümceği öldürebilir misin? Evet ...
Kenneth

2

JavaScript gerçek bir bilgisayar dilidir, yani program yürütme durumu ve denetimine sahiptir. Bu nedenle, ne kadar karmaşık olabileceğinin bir üst sınırı yoktur ve içine yazdığınız her şeyin, oldukça az karmaşıklığa sahip olması gerekir. CSS açıklayıcı bir koddur; karmaşıklığı, bir tarifin sahip olabileceği karmaşıklık seviyesi ile sınırlıdır. Bu nedenle, hem CSS hem de JavaScript'te bir şey yapılabilirse, daha az karmaşık olması gerektiği için CSS kullanmayı tercih ederim.


1
"JavaScript yerine CSS kullanılarak bir şey yapılabilirse, daha az karmaşık olması gerektiği için CSS kullanmayı tercih ederim" ... Nasıl anlıyorsunuz? Gerçekten JS vs CSS'de daha karmaşık olup olmayacağı konusunda ne yapmaya çalıştığınıza bağlı ...
Kenneth

Dediğim gibi, yürütme kontrolü olan durumsal bir program, herhangi bir tarifin olacağından çok daha karmaşıktır.
Mike Nakis

örneğin: Çok fazla tweak yapmak ve sadece normal tarayıcılarda çalışmak için daha fazla ekstra html öğesi eklemek ve daha sonra daha eski veya başıboş tarayıcılar (IE, vb.) daha da fazlası gereklidir. Javascript ile canlandırmak için birkaç basit kod satırı alır bir stil css birkaç satır.
Kenneth

Elbette, "Programcı takdiri gereklidir" demeden geçiyor. CSS'de yapılamıyorsa veya tarayıcı uyumsuzlukları nedeniyle önerilmiyorsa, elbette JavaScript tercih edilmelidir. Cevabım, pragmatik taraftan çok şeylerin akademik tarafındadır.
Mike Nakis

Hızlı soru (yalnızca bu yanıt için): IE6, JavaScript'in modern tarayıcılarla aynı sürümünü destekliyor mu? - Bu yüzden, tarayıcıya özgü "standartlar" için endişelenmeme gerek kalmadan bilgileri soyutlamak istiyorum.
AT

1

Javascript bir betik dilidir, yani biraz mantık ekleme yeteneğine sahiptir. CSS, belgenin görünümünü ve stilini tanımlamak için kullanılır. Öncelikle belge yapısını biçimlendirme ve mizanpajdan (sunum) ayırmak için tasarlanmıştır.

Bir web sayfasının görünümünü değiştirmek için Javascript kullanabilirsiniz, ancak CSS bunu yapmak için tasarlandığından, site stili için CSS ile gider ve gerisini Javascript'e bırakırım.


Wikipedia:

Javascript kullanımı:

  • Yeni pencerenin boyutu, konumu ve öznitelikleri (örn. Menülerin, araç çubuklarının vb. Görünüp görünmediği) üzerinde programlı denetimle yeni bir pencere açma veya açma.
  • Sunucuya gönderilmeden önce kabul edilebilir olduklarından emin olmak için bir web formunun giriş değerlerini doğrulama.
  • Fare imleci resimlerin üzerine geldiğinde görüntüleri değiştirme: Bu efekt genellikle kullanıcının dikkatini grafik öğeler olarak görüntülenen önemli bağlantılara çekmek için kullanılır.

GÜNCELLEME. Üçüncü noktaya gelince, W3C CSS ile ilgili şunları söylüyor:

:hoverSözde sınıfı kullanıcı, bir işaretleme aygıtı ile bir elemanı belirtir ise geçerlidir, ancak mutlaka aktive etmez. Örneğin, bir görsel kullanıcı aracısı, imleç (fare işaretçisi) öğe tarafından oluşturulan bir kutunun üzerine geldiğinde bu sözde sınıfı uygulayabilir.


CSS kullanımı:

CSS'den önce, HTML belgelerinin sunum özelliklerinin neredeyse tamamı HTML işaretlemesi içinde bulunuyordu; tüm yazı tipi renkleri, arka plan stilleri, öğe hizalamaları, kenarlıklar ve boyutlar HTML içinde açıkça tekrar tekrar tanımlanmak zorundaydı. CSS, yazarların bu bilgilerin çoğunu ayrı bir stil sayfasına taşımasına olanak tanıyarak HTML işaretlemesini oldukça kolaylaştırır.


1
"Görüntüleri fare imleci üzerinde gezdirirken değiştirme: Bu efekt genellikle kullanıcının dikkatini grafik öğeler olarak görüntülenen önemli bağlantılara çekmek için kullanılır." - Bu bir CSS özelliği değil mi?
AT

@AT Evet, haklısın (+1) ve bunu getirdiğin için teşekkürler. hoverSözde sınıfı bu amaca yöneliktir. Sadece alıntı yapıyordum. Düzenlenen.
pferor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.