Version 2 of Twitters “Bootstrap” UI framework was released today. While I find it very handy, I dislike how non-semantic it is.
I’d rather avoid setting classes like .span6 .table-striped in my HTML.
Since Bootstrap is built on less, I’m expecting that there’s a good way use a project-specific less sheet that can leverage mixins to to ascribe bootstrap-defined goodness to nice semantic class names.
I cloned bootstrap.less into myproject.less, and adjusted the paths in the @import lines, then added the following at the bottom:
#call-to-action {
.span6;
}
But lessc chokes on it, and complains that:
.span6 is undefined in
Similarly, trying .columns(6) produces the same error (“.columns is undefined”).
Other mix-ins, such as .table, .table-bordered, etc, seem to work fine.
What am I missing? What are the best practices for using bootstrap while keeping non-semantic class names out of my nice, semantic markup?
ok in less, this is how I figured it out. Its the best I could do, and I couldn’t figure out how to deal with .row semantically, but oh well.
Basically I created a custom-mixins.less and created a mixin called .col and the variable is @col. So when you write your selector and do something like .col(3); .col(4); .col(5); or something like that. It should create the proper width. I don’t know how this would work for nested columns.
lessc will generate the following in styles.css