创意中心在引入 Brix Style 后遇到的一些问题以及解决办法
cyjake opened this issue · 10 comments
先说明一下创意中心,使用 Rails 开发,样式最初是纯 CSS 写,后来 Rails 有了 Asset Pipeline,改用 SCSS ,使用 KISSY CSS 里的 reset.css 做样式重置,没有栅格,简单写了个 1000px 宽的居中。
起初因为担心 normalize.less 与 reset.css 出入太多,没有使用编译好的 brix.css,而是挑了用得到的部分,一点点放进来。后来发现,除了重置方式的差别之外,form.less 打击面太广,也是一个大问题。标签与头像没有用上,按下不表。
问题一:Less 与 SCSS 之分
两周前开始尝试,用了最需要的 grid.less,并改写成 grid.scss。顺便在此详细答 @xthsky 问,为何改写而不直接用,原因如下:
- Rails 默认支持的是这个
- 旧代码全部是 SCSS
- SCSS 的流程控制语法更简洁,mixin 和 include 的用法也更清楚明了
第三点在 grid.scss 中比较明显,代码请看 https://github.com/dotnil/brix-style/blob/master/src/grid.scss ,
对比 Less 版本:https://github.com/etaoux/brix/blob/master/src/style/mixins.less#L184
所以此问题,我的解决办法是用 SCSS 重写。除了流程控制语法差别比较大之外,其他的都比较细微:
- 变量名,Less 用的 @foo,而 SCSS 是 $foo http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#variables_
- 色彩操作函数有不一致处 http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html
- mixin 的声明与使用方式 http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixins
不过,新启动的 Rails 项目,不用担心此问题,换 Less 的代价并不大,有现成的 gem 支持,https://github.com/metaskills/less-rails
reset 与 normalize
然后遇到的就是 Brix Style 自身代码的问题了,normalize 与 reset 的出入,我感受到比较多的就两个:
- ul、ol 没有重置
- p、h[1-6]、pre 等,有
margin: 1em 0
;
前者,我增加了 .reset 来把它们重置掉,在需要重置的 ul、ol 上加 .reset 就好:
ul, ol {
&.reset {
margin: 0;
padding: 0;
li {
list-style: none;
margin: none;
}
}
}
后者,我挺喜欢这种方式的。这个差别造成的问题自然不少,不过挨个改一下也没那么难。自带的 reset-patch 我并没有用。
form 太 tnnd 的暴力了
https://github.com/etaoux/brix/blob/master/src/style/forms.less#L73
label、input、legend 有 margin 有 width,让我之前散落各处,并不在 form 中 label、input 全都奇葩了……
所以我直接把它们塞回到 form 里面去 https://github.com/dotnil/brix-style/blob/master/src/form.scss#L42
其他一些与我项目不符的,则在项目样式中重置、补齐。
button 的不足之处
Rails 项目中,有种按钮是通过 <%= button_to %> 生成的,结构类似这样:
<%= button_to '拷贝创意', mitosis_creation_path(:id => creation.id), :class => 'btn', :method => 'post' %>
<form action="/creations/100351/mitosis" class="button_to" method="post">
<div>
<input class="btn" type="submit" value="拷贝创意">
<input name="authenticity_token" type="hidden" value="XLtk0GDl1SEeTXinitnb/9DmaUNHBf7eGoszUlS1NRA=">
</div>
</form>
为什么一个按钮要搞成这样,说来话长,幸运的是,在我的项目里这种 .btn 都只在 .btn-group 里面使用,所以我可以这么搞:
.btn-group {
form, .btn {
float: left;
}
form:first-child {
.btn {
border-left-width: 1px;
@include border-top-left-radius(2px);
@include border-bottom-left-radius(2px);
}
}
form:last-child {
.btn {
@include border-top-right-radius(2px);
@include border-bottom-right-radius(2px);
}
}
}
曲线救国吧。
另外,在 button.less 中有一些针对低版本 IE 的 hack,https://github.com/etaoux/brix/blob/master/src/style/buttons.less#L9 ,我在项目中并没能重现这些问题,所以都直接去掉了。或者,注释再详细一点?
还有一些细节问题,我迟些补充吧,光看代码想不起来了……
EOF
Brix Style 中,还有 avatar、tag、scrollbar 等,这些我都没有使用,不发表意见。
赞逸才的认真,会吸收一些到Brix Style里的。
button 补充:
需要给各个 btn 设置 :active 和 :hover 的 border-color ,不然默认是蓝色的
网站的一些新项目也开始引入brix,reset问题同样是我们最纠结的!因为头部是通用的,要兼容其它还没有使用brix的页面,所以使用brix的项目就同时会引入kissy的reset和brix的reset。然后头痛的就来了,两者不兼容。。。,然后我们只能自己在reset。
@zhj3618 页头现在的已经开始往Brix迁移了?我非常愿意参与 reset 这部分的改造,之前做过一个过渡方案的demo http://xthsky.github.com/test/ ,但没有考虑到这种情况。
现在看,应该是我低估了Brix Style给大家带来的迁移成本,十分抱歉。给我看看一淘页头最新的开发版吧,看看有没有更低代价的替换方案。
一淘页头最新的开发版依赖最新的视觉规范,这个brix里面已经有一版了,但是页头视觉规范还要调整被暂停了
现在如果是全新的项目,如点评,引入brix style, 因为公共头尾还是依赖kissy reset,kissy reset和brix style的冲突有(ul ol dl dd h1-h6 form feildset lengend select label textarea等 ),现在的解决办法是在项目中用kissy reset覆盖brix style
如果局部使用brix,如分页用,同样存在kissy reset 和 brix style的并存的问题,这种情况也是在项目中用kissy reset覆盖brix style,覆盖不到的在项目中再重置。
这样实际还是使用kissy的reset,建议在没有在组件没有铺开使用之前,将brix style的normalize.css换成kissy的reset,这样做让要让第一期的组件重新回归下,工作量有点大,但是相比每个项目reset成本低
另外form.less(form feildset lengend select label textarea)里面的reset应该用class做选择器,现在这样的对老项目引入brix影响大
@xthsky 个人期望brix style这样:)
- brix.css加入版本管理,方便各自升级而不影响老项目,brix style的全站引入方式可以和之前一样在tms中统一管理。
- brix.css尽可能小,以减少对全局的影响,将avatar、tag、scrollbar等控件移到gallery,像gallery一样按需加载
- brix style的normalize.css换成kissy的reset,降低老项目迁移成本,原因如楼上
Brix Style 已拆分,并做了KISSY Reset及向后兼容。