【发布时间】:2014-01-16 23:56:16
【问题描述】:
我编写了一个非常复杂的小部件,它使用 OnDemandList 创建一个允许完全编辑(包括添加)商店的小部件。
现在...我并不完全是 CSS 专家(恰恰相反),并且希望得到一些指导,只是为了检查我是否以一种半理智的方式做事。
当我在我的小部件中创建编辑器时,我会这样做:
buildRendering: function(){
// ...
this.domNode = put( 'div' );
// ...
},
postCreate: function(){
// ...
// This is here, because if I set the class in buildRendering, it gets zapped by className (the widget's declaration)
put( this.domNode, '.editable-list' );
// ...
},
那么当动态添加编辑器时:
put( row.element, editingWidget.domNode );
put( editingWidget.domNode, '.editable-list-row-editor' );
我还需要确保每一行都有 position:absolute 以便编辑器被放置在正确的位置:
domStyle.set( row.element, 'position', 'relative' );
在 CSS 中,我有:
.editable-list-row-editor {
position: absolute;
top: 0;
z-index: 20;
}
问题:
1) 就最佳实践而言,是否可以像我对domStyle.set( row.element, 'position', 'relative' ); 那样添加样式...?或者我应该用 CSS 来做吗?我以编程方式完成了它,因为它 真的 很重要,它是 relative。
2) 就 CSS 而言,是否可以让内容尽可能不具体?这个想法是用户可能(并且可能会)最终编写自己的 CSS,并通过编写更具体的规则来覆盖事物......对吗?或者我应该写:
.editable-list .editable-list-row-editor {
position: absolute;
top: 0;
z-index: 20;
}
或者更好:
.editable-list .row-editor {
position: absolute;
top: 0;
z-index: 20;
}
...?
3) 据我所见,小部件的 CSS 类应设置为 postCreate 而不是 buildRendering,否则 Dojo 似乎使用 className 来删除那里设置的任何内容......这就是你'通常会使用创建自己的 domNode 的小部件?
【问题讨论】: