首页 > CSS问题:请问如何做到CSS样式能够尽量的重用?

CSS问题:请问如何做到CSS样式能够尽量的重用?

在下前端初学者,最近再模仿一些简单的页面。我发现页面中很多部分的HTML结构、CSS样式都有重复的地方,可以写出1条来,以便复制重用。

问题是,如何在class命名和写CSS样式的时候,能够做到尽量的重用呢?

我想到的一个方法,有点啰嗦,就是把各个CSS样式分开来写。这样以后如果遇到CSS样式相同的,就可直接用了。

比如,一个页面布局用的div,宽1000px,高300px,有一个下边框,相对定位。

HTML部分:
    <div class="wrap-1000x300 positionR borderB"></div>
CSS部分:

    .wrap-1000x300{
        width:1000px;height:300px;
    }
    .positionR{
        position:relative;left:0;top:0;    
    }
    .borderB{
        border-bottom:1px solid #ccc;
    }

但是我感觉我这个方法有些太过于繁琐了,而且一个HTML元素加好几个class,请问各位朋友有什么好样式写法吗?谢谢!


保证复用一直是css的一个重要技能,没有一个固定的答案,我只能大概的给你这样说,如果是大型网站,那就需要一个比较好的组织结构,比如这种base.css+common.css+page.css组织方式:

1.base提供最底层的、功能和粒度最小的的通用类样式,可以被所有页面引用,力求精简和通用;
2.common则是楼上提到的模块化组件,即将功能相对独立的划分为模块,重复次数多的模块划分为组件,提取到common层,这一层需要尽可能实现封装,对可能经常变化的部分提供灵活的接口;
3.page是页面级别的样式表,提供各页面独有的样式,可以再根据需求细分如page-index.css,page-connect.css

这样组织的好处是:

1.比较利于维护
2.组件复用率高,修改起来比较轻松
3.代码精简,减少冗余。

/提供一份base.css作为参考-------/

/*css reset*/
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin: 0;padding: 0;}
table{border-collapse:collapse;border-spacing:0;}
fieldset,img{border:0;}
address,caption,cite,code,dfn,em,strong,th,var{font-style: normal;font-weight: normal;}
ol,ul{list-style: none;}
caption,th{text-align:left;}
h1,h2,h3,h4,h5,h6{font-size: 100%;font-weight: normal;}
q:before,q:after{content:'';}
abbr,acronym{ border:0;}

/*文字排版*/
.f12{font-size: 12px;}
.f13{font-size: 13px;}
.f14{font-size: 14px;}
.f16{font-size: 16px;}
.fb{font-weight: bold;}
.fn{font-weight: normal;}
.t2{text-indent: 2em;}
.lh150{line-height:150%;}
.lh180{line-height:180%;}
.lh200{line-height:200%;}
.unl{text-decoration: underline;}
.no_unl{text-decoration: none;}

/*定位*/
.tl{text-align: left;}
.tc{text-align: center;}
.tr{text-align: right;}
.bc{margin-left: auto;margin-right: auto;}
.fl{float: left;display:inline;}
.fr{float: right;display:inline;}
.cb{clear:both;}
.cl{clear: left;}
.cr{clear: right;}
.clearfix:after{content: '.';display:block;height: 0;clear: both;visibility: hidden;}
.clearfix{display:inline-block}*html
.clearfix{height: 1%}.Clearfix{display: block;}
.vm{vertical-align: middle;}
.pr{position: relative;}
.pa{position: absolute;}
abs-right{position: absolute;right: 0;}
.zoom{zoom:1;}
.hidden{visibility: hidden;}
.none{display: none}
/*长度高度*/
.w10{width: 10px;}
.w20{width: 20px;}
.w30{width: 30px;}
.w40{width: 40px;}
.w50{width: 50px;}
.w70{width: 70px;}
.w90{width: 90px;}
.w100{width: 100px;}
.w300{width: 300px;}
.w500{width: 500px;}
.w600{width: 600px;}
.w700{width: 700px;}
.w800{width: 800px;}
.w{width: 100%;}
.h50{height: 50px;}
.h100{height: 100px;}
.h200{height: 200px;}
.h{height: 100%;}

/*编剧*/
.m10{margin:10px;}
.m15{margin:15px;}
.m30{margin:30px;}
.mt5{margin-top:5px;}
.mt10{margin-top:10px;}
.mt15{margin-top:15px;}
.mt20{margin-top:20px;}
.mt30{margin-top:30px;}
.mt50{margin-top:50px;}
.mt100{margin-top:100px;}
.mb5{margin-bottom: 5px;}
.mb10{margin-bottom: 10px;}
.mb15{margin-bottom: 15px;}
.mb20{margin-bottom: 20px;}
.mb30{margin-bottom: 30px;}
.mb50{margin-bottom: 50px;}
.mb100{margin-bottom: 100px;}
.ml5{margin-left: 5px;}
.ml10{margin-left: 10px;}
.ml15{margin-left: 15px;}
.ml20{margin-left: 20px;}
.ml30{margin-left: 30px;}
.ml50{margin-left: 50px;}
.ml100{margin-left: 100px;}
.mr5{margin-right: 5px;}
.mr10{margin-right:10px;}
.mr15{margin-right: 15px;}
.mr20{margin-right: 20px;}
.mr30{margin-right: 30px;}
.mr50{margin-right: 50px;}
.mr100{margin-right: 100px;}
.p5{padding: 5px;}
.p10{padding:10px;}
.p15{padding: 15px;}
.p20{padding: 20px;}
.p30{padding: 30px;}
.p50{padding: 50px;}
.p100{padding: 100px;}
.pt5{padding-top: 5px;}
.pt10{padding-top:10px;}
.pt15{padding-top: 15px;}
.pt20{padding-top: 20px;}
.pt30{padding-top: 30px;}
.pt50{padding-top: 50px;}
.pt100{padding-top: 100px;}
.pb5{padding-bottom: 5px;}
.pb10{padding-bottom:10px;}
.pb15{padding-bottom: 15px;}
.pb20{padding-bottom: 20px;}
.pb30{padding-bottom: 30px;}
.pb50{padding-bottom: 50px;}
.pb100{padding-bottom: 100px;}
.pl5{padding-left: 5px;}
.pl10{padding-left:10px;}
.pl15{padding-left: 15px;}
.pl20{padding-left: 20px;}
.pl30{padding-left: 30px;}
.pl50{padding-left: 50px;}
.pl100{padding-left: 100px;}
.pr5{padding-right: 5px;}
.pr10{padding-right:10px;}
.pr15{padding-right: 15px;}
.pr20{padding-right: 20px;}
.pr30{padding-right: 30px;}
.pr50{padding-right: 50px;}
.pr100{padding-right: 100px;}

/--如果是小型页面或者日常自己编写练手的复用--/
根据具体页面情况判定,原则是固有属性复用,灵活属性抽出,在加多个class尽量复用之间找个平衡


刚学的话,建议一来就学习sass,关于重用,一个用mixin减少重复的例子:

@position_right($top, $right){
   position: absolute;
   top : $top;
   right : $right;
}

用的时候:

#element{
@include positon_right(1em, 1em);
}

三行变一行,有没有?sass很容易上手,你用scss语法的话,原来的css不用改就能编译。

注:sass有两种语法,sass没有了分号和花括号,scss更接近原生css,推荐scss。


刚开始写不用太着急,慢慢学会抽离可复用部分
如宽高类只设定宽高样式,定位类只设定定位样式等

你可以看下bootstrap的分类

【热门文章】
【热门文章】