2014-01-14 58 views
2

假設你有這樣的HTML:CSS3屬性選擇器的效率如何?

<div class='foo-element-1'></div> 
<div class='foo-element-2'></div> 
... 
<div class='foo-element-500'></div> 

CSS:

[class^='foo-'] { font-size: 12px; } 
.foo-element-1 { color: red;  } 
.foo-element-2 { color: blue;  } 
... 
.foo-element-500 { color: green; } 

.foo-element-###有一個共同的風格[class^='foo-']


另一種方式來寫,這可能是:

HTML:

<div class='foo foo-element-1'></div> 
<div class='foo foo-element-2'></div> 
... 
<div class='foo foo-element-500'></div> 

CSS:

.foo    { font-size: 12px; } 
.foo-element-1 { color: red;  } 
.foo-element-2 { color: blue;  } 
... 
.foo-element-500 { color: green; } 

沒有別的用途.foo。所有.foo-element-###將在此選項中附加.foo。假設瀏覽器兼容性是一個非因素,並且有幾百個這樣的元素都有一個共同的風格。

在性能或語義方面使用一種風格是否存在原因?

回答

2

選擇通過班是一個很好的協議更快:http://jsperf.com/class-vs-data-attribute-selector-performance

此外,它只是普通的很有意義的共享公共樣式元素共享一個通用類。如果元素風格必須偏離共享風格,元素上的第二個類也是很有意義的。

這意味着類選擇器既快又可維護。這裏沒有太多的缺點,其他稍微冗長的標記。但假設您在某個模板語言的循環中生成這些項目,您只需要將該額外的類值寫入一次,並且該循環將複製它。

所以是的,使用類選擇器。這很漂亮。

+1

您是否有任何證據證明JS使用用於CSS選擇元素的引擎? – cimmanon

+0

在具有['document.querySelectorAll'](https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll)的現代瀏覽器中,它們利用查找元素的本地瀏覽器代碼。有理由認爲,查找元素的性能與JS和CSS類似。儘管如此,不,我沒有證明這方面的證據。 –

+2

這裏是一個jsperf,其中的差異可以忽略不計:http://jsperf.com/attribute-versus-class-selector。我不認爲使用document.querySelectorAll是測試CSS渲染的好方法。您需要實際測試渲染時間(請參閱:http://www.stevesouders.com/blog/2009/03/10/performance-impact-of-css-selectors/,儘管測試套件中缺少屬性選擇器)。 – cimmanon