前面在《CSS——Bootstrap From Twitter》和《CSS——LESS》中介绍了Mark Otto(马克奥托)写的《BootStrap from twitter》以及Alexis Sellier写的LESS。前者Mark Otto(马克奥托)给我们介绍了一种关于前端开发的一种全新的思维,让我们每个项目中减少很多重复性的工作,提高我们工作的效率,而且能更好的管理我们的代码,而Alexis Sellier的LESS能让我们的CSS代码更简洁,特别是针对于CSS3的样式,让我们不在需要为了每一个浏览器而加上他们的前缀了。那么今天我想把Mark Otto(马克奥托)写的另一个东西推荐给大家,那就是BootStrap.less。
下面我们就一起跟着Mark Otto(马克奥托)的思路把twitter中运用BootStrap.less的几大亮点呈现给大家
Mark Otto(马克奥托)介绍的Twitter中应用的bootstrap.less主要亮点有两部份:Mixins和Variables。下面我们先来看比较简单的一部分:
Variables
大家都知道,在CSS中是没有变量这么一个概念存在的,但在Less中,变量是一个很有用的库,前面在《CSS——LESS>》也对变量进行过详细的介绍。BootStrap中用了一组的完美变量用到一些项目中,用这个当实例来介绍如何使用Variables是很有意思的。当然真正的Bootstrap.less变量部分不单单是颜色这一块,我们先来看一下这里面的几个有典型 地方。
1、Links(链接)
链接颜色的样式对于大家来说很简单的,其实他就一个值,如:
@linkColor: #8b59c2;
@linkColorHover: darken(@linkColor,10%);
注:上面的“@linkColorHover”使用了Less中的另一个工具“function”,这样他能自动的为“a:hover”创建颜色。Less中对颜色的function包含了“darken”,“lighten”,“saturate”,“desaturate”,“fadein”,“fadeout”和“spin”。具体的大家可以点击这里。
2、Color Scheme(配色方案)
在你的Web项目中,使用Less的Variables更好的管理你的颜色。如:
@white: #fff;
@grayLighter: #ccc;
@grayLight: #777;
@gray: #555;
@grayDark: #333;
@black: #000;
@blue: #08b5fb;
@green: #46a546;
@red: #9d261d;
@yellow: #ffc40d;
@orange: #f89406;
@pink: #c3325f;
@purple: #7a43b6;
3、Baseline(基线)
在Bootstrap中并没有完全应用上这个Baseline,不过@baseline在任何项目中都有助于简化你的间距等控制,比如说width,height,padding,margin,line-height等,可以看看下在的实例:
@baseline: 20px;
使用@baseline很简单:
width: @baseline * 20;//400px
margin-bottom: @baseline / 2;//10px
padding: @baseline; //20px
line-height: @baseline - 2; //18px
}
Mixins
Mixins是BootStrap应用Less的另一个亮点。Mixins在CSS的基础上,将样式进行嵌套,这样可以将一套样式合并成一个,这个用得最强最有亮点的地方就是使用在CSS3属性上,减少对浏览器版本的区别,下面我们一起跟着Mark Otto(马克奥托)学习Bootstrap.less是如何灵活的应用Less的Mixins。另外有关于Mixins更多介绍,大家可以去浏览前一篇《CSS——LESS》中的Mixins部分。
1、Rounding Corners(圆角)
CSS3中有一个属性border-radius可以让元素具有圆角效果,那么Bootstrap中了使用了一个".border-radius"来写圆角的样式,Bootstrap.less是这样写的代码:
.border-radius(@radius:6px) {
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
.border-radius(@radius){
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
应用到元素中也很简单
.border-radius;
}
如果你想让你的圆角只在某个角有,还可以这样使用
.border-radius(3px 0 0 10px);
}
Compiled Css Code:
#exampleBox {
-moz-border-radius:3px 0 0 10px;
-webkit-border-radius:3px 0 0 10px;
border-radius:3px 0 0 10px;
}
2、Shadows(阴影)
阴影在CSS3中有两种,一种是text-shadow(文字阴影),另一种是box-shadow(盒子阴影)。那么也可以像border-radius一样,我们使用一个“.text-shadow”和“.box-shadow”,有一点需要注意,为了更好的使阴影色容入到背景中,最好使用rgba色,具体如下:
.text-shadow(@shadow: 0 1px 0 rgba(0,0,0,0.25)){
text-shadow: @shadow;
}
.box-shadow(@shadow: 0 1px 0 rgba(0,0,0,0.25)) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
应用也是一样的,
.text-shadow(0 1px 2px rgba(125,125,125,0.3));
.box-shadow(0 1px 3px rgba(255,255,120,0.5));
}
Compiled Css Code:
#exampleBox {
-webkit-box-shadow: 0 1px 3px rgba(255, 255, 120, 0.5);
-moz-box-shadow: 0 1px 3px rgba(255, 255, 120, 0.5);
box-shadow: 0 1px 3px rgba(255, 255, 120, 0.5);
text-shadow: 0 1px 2px rgba(125, 125, 125, 0.3);
}
3、Gradients(渐变)
Gradients应用相对来说复杂一点,因为Gradients在CSS3中就是一个比较复杂的属性之一,特别是多色的使用,那么Bootstrap是怎么写的呢?大家一起来看代码将更清楚:
#gradient {
.horizontal (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor));
background-image: -moz-linear-gradient(left, @startColor, @endColor);
background-image: -ms-linear-gradient(left, @startColor, @endColor);
background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor));
background-image: -webkit-linear-gradient(left, @startColor, @endColor);
background-image: -o-linear-gradient(left, @startColor, @endColor);
background-image: linear-gradient(left, @startColor, @endColor);
}
.vertical (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor));
background-image: -moz-linear-gradient(@startColor, @endColor);
background-image: -ms-linear-gradient(@startColor, @endColor);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor));
background-image: -webkit-linear-gradient(@startColor, @endColor);
background-image: -o-linear-gradient(@startColor, @endColor);
background-image: linear-gradient(@startColor, @endColor);
}
.directional (@startColor: #555, @endColor: #333, @deg: 45deg) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -moz-linear-gradient(@deg, @startColor, @endColor);
background-image: -ms-linear-gradient(@deg, @startColor, @endColor);
background-image: -webkit-linear-gradient(@deg, @startColor, @endColor);
background-image: -o-linear-gradient(@deg, @startColor, @endColor);
background-image: linear-gradient(@deg, @startColor, @endColor);
}
.vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
background-color: @endColor;
background-repeat: no-repeat;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -moz-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
}
}
接着我们来看如何运用到元素中:
}
}
}
}
当然你也可以在这个基础上进行更多的颜色设置,只要不让他失控就行了。
4、Transitions
接着我们在来看看Transitions
.transition(@transition:all .5s linear 1s){
-webkit-transition: @transition;
-o-transition: @transition;
-moz-transition: @transition;
transition: @transition;
}
具体使用
a {
.transition(all 0.3s ease-in 1s);
}
5、其他CSS3写法
CSS3有很多种,大家完全可以按照这产的思路来写,下面在说几个常见的属性:
.background-clip(@clip) {
-webkit-background-clip: @clip;
-moz-background-clip: @clip;
background-clip: @clip;
}
.content-columns(@columnCount, @columnGap: 20px) {
-webkit-column-count: @columnCount;
-moz-column-count: @columnCount;
column-count: @columnCount;
-webkit-column-gap: @columnGap;
-moz-column-gap: @columnGap;
column-gap: @columnGap;
}
.opacity(@opacity: 100) {
filter: e(%("alpha(opacity=%d)", @opacity));
-khtml-opacity: @opacity / 100;
-moz-opacity: @opacity / 100;
opacity: @opacity / 100;
}
有关于CSS3有很多属性,大家可以自己去写属于你的CSS3的less文件,我将会在后面针对CSS3写一份更详细的CSS3.less,感兴趣的朋友,可以观注本站的有关更新。
6。Simple Clearfix
这里需要介绍一种更简单的清除浮动方法,假如你在写html时,不记得在div中加入class="clearfix",那么你也不用着急,Less中有一种更简单的方法让你实现:
// Clearfix for clearing floats like a boss h5bp.com/q
.clearfix {
zoom: 1;
&:before, &:after {
display: table;
content: "";
}
&:after {
clear: both;
}
}
看一个简单的实例,如:
<div class="container">
<div class="box fl" id="horizontalBox">test</div>
<div class="box fl" id="verticalBox">test</div>
</div>
如上面的模板,里面的div.box都进行了左浮动,而在div.container又不记得了加上clearfix类,那么我们就可以这样应用Less中的.clearfix:
.container {
.clearfix;
}
6、制作透明色
大家都知道CSS3中用RGB来制作透明色,但在Less中有一个更好的方法,他是将颜色转换成HSL色,然后在加上一个颜色通道,如:
#translucent {
.background(@color: @white, @alpha: 1) {
background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
}
.border(@color: @white, @alpha: 1) {
border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
background-clip: padding-box;
}
}
具体使用,只要这样:
.container {
div {
}
}
7、Font Stacks
设置sans-serif,serif,monospace等内置字体:
.sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: "Georgia", Times New Roman, Times, sans-serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
font-family: "Monaco", Courier New, monospace;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
}
8、Buttons制作
Less可以让我们制作出一种随时随地更换buttons的相关参数,从而制作出不同效果的buttons
.button(@color: #f5f5f5, @textColor: #333, @textShadow: 0 1px 1px rgba(255,255,255,.75), @fontSize: 13px, @padding: 9px 15px 10px, @rounded: 6px) {
display: inline-block;
.gradient(@color,darken(saturate(@color,10),10));
padding: @padding;
text-shadow: @textShadow;
color: @textColor;
font-size: @fontSize;
line-height: 20px;
.rounded(6px);
@shadow: inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.2), 0 1px 2px rgba(0,0,0,.25);
.box-shadow(@shadow);
&:hover {
background-position: 0 -15px;
color: @textColor;
text-decoration: none;
}
}
这样我们就可以像下面这样创建不同的buttons
a.button {
.button();
&.purple {
.button(@purple,
}
&.blue {
.button(@blue,
}
}
9、Grids
网格具体的就不说了,我在前面说过好几回了,这里就要让大家一起看看Less如何制作Grids
@gridColumns: 16;
@gridColumnWidth: 40px;
@gridGutterWidth: 20px;
@siteWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
.container {
width: @siteWidth;
margin: 0 auto;
.clearfix();
}
.columns(@columnSpan: 1) {
display: inline;
float: left;
width: (@gridColumnWidth * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1));
margin-left: @gridGutterWidth;
&:first-child {
margin-left: 0;
}
}
.offset(@columnOffset: 1) {
margin-left: (@gridColumnWidth * @columnOffset) + (@gridGutterWidth * (@columnOffset - 1)) !important;
}
也可以根据上面的原理制作不同的grids
@gridColumns: 11;
@gridColumnWidth: 40px;
@gridGutterWidth: 20px;
div.grid {
.container;
div.span1 { .columns(1); }
div.span2 { .columns(2); }
...
div.span11 { .columns(11); }
}
上面就是BootStrap中使用Less的几大亮点,如果大家对这个感兴趣,可以下载BootStrap源码学习一下,下载可以点Bootstrap on GitHub »。如果你对BootStrap和Less还不知道是什么东西,我建议你先看看:《CSS——Bootstrap From Twitter》和《CSS——LESS》。希望读完以后你会喜欢上他们,并能应用他们到你的项目中。如果我有更好的想法,记得告诉我。
最后要非常感谢来自twitter的Mark Otto(马克奥托)给我们带来这么精彩的内容《Bootstrap.less》。
如需转载烦请注明出处:W3CPLUS