当可以通过Java脚本或CSS完成任务时,使用CSS更好吗?[关闭]


11

我总是尽可能多地使用CSS来否决JavaScript。

即我使用CSS而不是JavaScript创建选项卡和过渡按钮。

我已经看到了一些支持JavaScript的解决方案,特别是Wt Web框架。但如果浏览器不支持/禁用js,则可以降级到CSS。

我知道CSS和JavaScript具有不同的用途,但是有重叠之处。这是这个问题的源泉

是否应该继续通过JavaScript继续使用CSS?

Answers:


10

是。

CSS的目的是布局,外观和动画

JavaScript的目的是交互。

如果要进行布局,请使用CSS,如果要设置外观,请使用CSS,如果要进行动画,请使用CSS3

如果您附加事件处理程序或对用户输入做出反应,请使用JavaScript。

请注意,人们使用JavaScript而不是CSS来获得浏览器支持。还有其他解决方案,例如使用javascript模拟CSS功能。


1
我喜欢CSS3中实现的许多功能,但是浏览器的支持速度很慢,我仍然需要简化旧版浏览器。否则,我也会使用HTML5进行输入验证:P
AT

javascript不仅用于交互。它还可以用于将数据发送回Web服务器,以及许多其他功能。
eriawan 2011年

@eriawan交互可能是一个模糊的术语。但javascript主要是在与用户互动时执行x,其中x是任意的
Raynos

12

好吧,这实际上是一个非常有趣的问题。我正在尝试考虑如何对类似的东西进行基准测试,尤其是因为大多数时候CSS或JavaScript都不会在网页上进行真正的计算密集型工作。

我的直觉会说,尽可能多地使用CSS,但不要使其成为一成不变的规则。

a:hover {
  background-color: green;
}

然后在语义上更好

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

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

在CSS中将是困难的(尽管并非不可能)。您可以通过这种方式进行。

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

a.green {
  background-color: green;
}

直接执行JavaScript可能确实有点尴尬,但是我已经思考了几分钟,即使在这里,正确的解决方案也可能是CSS,例如如果您在悬停时设置了很多属性。

**请注意,该代码均无效,仅用于演示目的。**


3
说得好,但是对于您的第二个示例,我也将毫不犹豫地使用CSS类。在表示和行为方面,两者之间存在一定的重叠,但是在这些示例中,这非常简单-行为改变了鼠标悬停时的外观,外观在CSS中进行了描述。
sevenseacat 2011年

3

考虑是否要从Yahoo Developer Network中进行以下操作

“计算了数字之后,我们发现禁用JavaScript的请求的持续速率徘徊在实际访问者流量的1%左右,其中最高的比例在美国约为2%,最低的比例在巴西约为0.25%。所有接受测试的其他国家的数字非常接近1.3%。”

由于百分比如此之低(最高),几乎不值得(除非您的网站用户主要来自2%)担心用户关闭javascript的情况。普通用户不知道如何关闭javascript,因此可能不在乎。如果您要开发的是技术网站,则可能要考虑它们会禁用javascript的可能性,但是如果有,它们可能会习惯于网站无法正常运行,因为许多网站确实大量使用了javascript。

话虽如此,我发现很多情况下javascript开发使我要完成的工作变得容易得多,而其他情况下css都做同样的事情。

最终,每种“语言”在Web开发中都有其适当的位置,明智地使用它可以增强开发和用户体验。了解这些用途是什么(我建议您学习经验)并明智地应用。根据我的经验,在实际世界中,很少有固定的规则,例如“存在CSS解决方案时千万不要使用JS”(改述)。


谢谢你,非常有用的信息。您可以在第4段中进行扩展吗?
AT

3
CSS是“样式”工具,而Javascript是“交互”工具。我发现,使下拉菜单变得更容易,例如,使用css样式但使用javascript动画的下拉菜单。你能用css吗?是。可以用螺丝刀锤打钉子吗?是。对于相反的示例,如果您要做的就是当鼠标悬停在链接上时对链接进行颜色更改,那么当有专门为此目的设计的CSS元素时,使用Javascript可能会有些过头。你可以用Java语言吗?是的...您可以用大锤杀死蜘蛛吗?是的…
肯尼思(Kenneth)

2

JavaScript是一种真正的计算机语言,这意味着它具有程序执行的状态和控制权。因此,它的复杂程度没有上限,您在其中编写的任何内容都必定具有相当小的复杂性。CSS是描述性代码;它的复杂性仅限于配方可以具有的复杂性级别。因此,如果可以同时使用CSS和JavaScript进行某些操作,那么我宁愿使用CSS,因为它一定不会那么复杂。


1
“如果可以使用CSS而不是JavaScript来完成某些工作,那么我宁愿使用CSS,因为它一定不会那么复杂”。它实际上取决于您要执行的操作,是否在JS和CSS中更加复杂...
肯尼斯(Kenneth)

就像我说的那样,具有执行控制权的有状态程序注定比任何配方都要复杂得多。
Mike Nakis 2011年

例如:我发现在css中执行下拉菜单要复杂得多,因为您必须进行许多调整并添加许多额外的html元素才能使其在普通浏览器上正常工作,然后再使它在较旧的浏览器中运行需要更多的浏览器(例如IE等)。使用javascript,需要几行简单的代码对其进行动画处理,并需要几行css对其进行样式设置。
肯尼思

当然,不用说“需要程序员谨慎”。如果无法在CSS中完成此操作,或者由于浏览器不兼容而不建议这样做,则应首选JavaScript。我的回答更多是在事物的学术方面,而不是务实的方面。
Mike Nakis 2011年

另一个简单的问题(仅针对此答案):IE6是否支持与现代浏览器相同版本的JavaScript?-我的意思是抽象信息,所以我不必担心特定于浏览器的“标准”。
AT

1

Javascript是一种脚本语言,这意味着它可以添加一些逻辑。CSS用于描述文档的外观和样式。它的主要目的是将文档结构与格式和布局(表示)分开。

您可以使用Javascript来修改网页的外观,但是由于CSS就是要这样做的,因此我将使用CSS作为网站样式,其余部分留给Javascript。


维基百科:

JavaScript使用:

  • 通过编程控制新窗口的大小,位置和属性(例如,菜单,工具栏等是否可见)来打开或弹出新窗口。
  • 在提交给服务器之前,验证Web表单的输入值以确保它们是可接受的。
  • 当鼠标指针移到图像上时更改图像:此效果通常用于将用户的注意力吸引到显示为图形元素的重要链接上。

更新。关于第三点,W3C谈到CSS:

:hover伪类适用,而用户指定用定点设备的元素,但并不必然激活它。例如,当光标(鼠标指针)悬停在由元素生成的框上时,可视用户代理可以应用此伪类。


CSS用法:

在CSS之前,HTML文档的几乎所有表示形式属性都包含在HTML标记中。所有字体颜色,背景样式,元素对齐方式,边框和大小都必须在HTML内(通常是反复地)明确描述。CSS允许作者将大部分信息移到单独的样式表中,从而大大简化了HTML标记。


1
“随着鼠标光标在图像上方移动而改变图像:该效果通常用于将用户的注意力吸引到显示为图形元素的重要链接上。” -那不是CSS的功能吗?
AT

@AT是的,您是对的(+1),感谢您提出来。该hover伪类有目的。我只是在引用。编辑。
pferor 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.