The single responsibility principle applied to CSS
csswizardry.com
csswizardry.com
.header
padding: 20px
margin-bottom: 20px
background-color: #121416
color: #fff
.content
width: 640px
float: left
margin-right: 20px
padding: 20px
margin-bottom: 20px
into @mixin island
display: block
padding: 20px
margin-bottom: 20px
.header
@include island
background-color: #121416
color: #fff
.content
@include island
width: 640px
float: left
margin-right: 20px
, and you don't even have to change the HTML. .island {
display: block;
padding: 20px;
margin-bottom: 20px;
}
.header {
background-color: #121416;
color: #fff;
}
.content {
width: 640px;
float: left;
margin-right: 20px;
}
Is roughly as clean, but will make your files much smaller by virtue of not repeating the definitions per class. In general, avoiding property mixins (aside from vendor prefixes) and deep nesting in compile-to-CSS languages helps keep your output small and your pages fast. :) .island, .header, .content { display block; … }
[1]: http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#ex... .red { color:red; }
These techniques became relevant because they make your CSS leaner, speed up development and result in more maintainable code. But compression + high bandwidth along with systems like LESS/SASS make this effort moot: you can have the same benefits while still keeping most of presentation separate from content.<a href="#" class="nice small radius blue button">Button Text</a>
You develop in one browser, and then make adjustments to it to make sure it works in all major / mobile browsers. This step often introduces some dubious workarounds and mess because it can be such a painful process.
That isn't to say one shouldn't try to write re-usable and maintainable code in the first place. But I also agree with your more general point (just not in css), that neat/maintainable code != correct code.
I think that too depends on how you code it. You can code mechanics, or you can code logic (quoting an earlier blogpost title which was also on HN).
var hr = new httprequest(); //Where the httprequest function is defined elsewhere
versus 10 lines of code right here to support all browsers since IE5 or so. This might be even more readable as when you'd only write it for one browser.(I couldn't think of a similar example in css.)