less百行代码实现bootstrap栅格布局


本文摘自PHP中文网,作者青灯夜游,侵删。

less实现bootstrap的12栅格布局,其实代码不止100行,大概100多行吧

教程推荐:bootstrap教程

使用过bootstrap的都知道,bootstrap的强大的12栅格系统;在响应式布局中这12栅格布局是非常有用的。
有时候做个简单的页面并不想把所有整个bootstrap引入到页面中,于是便在空余时间写了这个栅格布局,参照了bootstrap的做法,类名,当然这里可以自定义类名的。

详细less请看如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

@container: m-container;

 

@columns-name: m-col;

@columns-pading: 15px;

@grid-count: 12;

 

@screen-sm-min: 768px;

@screen-md-min: 992px;

@screen-lg-min: 1200px;

 

.@{container},

.@{container}-fluid{

    padding-left: @columns-pading;

    padding-right: @columns-pading;

    margin-right: auto;

    margin-left: auto;

    min-width: 960px;/*为了兼容不支持媒体选择的浏览器*/

    -webkit-transition:width 0.9s cubic-bezier(1,-0.02, 0, 1.04);// for Safari and Chrome

    -moz-transition:width 0.9s cubic-bezier(1,-0.02, 0, 1.04);// for Firefox

    -o-transition:width 0.9s cubic-bezier(1,-0.02, 0, 1.04);// for Opera

    -ms-transition:width 0.9s cubic-bezier(1,-0.02, 0, 1.04);// for ie

    transition:width 0.5s cubic-bezier(1,-0.02, 0, 1.04);

    -webkit-box-sizing: border-box;

    box-sizing:border-box;

    -moz-box-sizing:border-box;

}

.@{container}-fluid{

    min-width: 0;

    width: 100%;

}

.row{

    min-height: 1px;

    margin-left: -@columns-pading;

    margin-right: -@columns-pading;

    clear: both;

    &:before,

    &:after{

        content: "";

        display: table;

        clear: both;

    }

}

// 列基础css

.columns-base-css() {

    position: relative;

    min-height: 1px;

    padding-right: @columns-pading;

    padding-left: @columns-pading;

     

    -webkit-box-sizing: border-box;

    box-sizing:border-box;

    -moz-box-sizing:border-box;

}

// 循环列,设置基础css

.make-grid-columns(@len: @grid-count) {

    .col(@i) {

        @classList: ~".@{columns-name}-xs-@{i},.@{columns-name}-sm-@{i},.@{columns-name}-md-@{i},.@{columns-name}-lg-@{i}";

        .col(@i + 1, ~"@{classList}");

    }

    .col(@i, @list) when (@i =< @len){

        @classList: ~".@{columns-name}-xs-@{i},.@{columns-name}-sm-@{i},.@{columns-name}-md-@{i},.@{columns-name}-lg-@{i}";

        .col(@i + 1, ~"@{classList},@{list}");

    }

    .col(@i, @list) when (@i > @len) {

        @{list} {

          .columns-base-css();

        }

    }

    .col(1)

}

.make-grid-columns(@grid-count);

 

// 循环生成列

.make-columns-loop(@type, @n, @i: 1) when (@i <= @n){

    @col-class-name: ~"@{columns-name}-@{type}";

    .@{col-class-name}-@{i}{

        width: @i/@n*100%;

        float: left;

    }

    // 偏移

    .@{col-class-name}-offset-@{i}{

        margin-left: @i/@n*100%;

    }

    // 排序

    .@{col-class-name}-pull-@{i}{

        right: @i/@n*100%;

    }

    .@{col-class-name}-push-@{i}{

        left: @i/@n*100%;

    }

    .make-columns-loop(@type, @n, (@i + 1));

}

.make-columns-loop(xs, @grid-count);

 

// 媒体查询

.@{container}{

    @media (max-width: @screen-sm-min) {

        min-width: 0;

    }

    @media (min-width: @screen-sm-min) {

        width: 750px;

        min-width: 0;

    }

    @media (min-width: @screen-md-min) {

        width: 970px;

        min-width: 0;

    }

    @media (min-width: @screen-lg-min) {

        width: 1170px;

        min-width: 0;

    }

}

// 媒体查询设置对应列类型css

@media (min-width: @screen-sm-min) {

    .make-columns-loop(sm, @grid-count);

}

@media (min-width: @screen-md-min) {

    .make-columns-loop(md, @grid-count);

}

@media (min-width: @screen-lg-min) {

    .make-columns-loop(lg, @grid-count);

}

这段less是可以直接复制到less环境编译的,如果你需要重新定义类名可以在开头修改

1

2

3

4

5

6

7

8

9

10

11

12

13

// 容器名

@container: m-container;

// 列名

@columns-name: m-col;

// 列边距

@columns-pading: 15px;

// 栅格数(把屏幕分为12份)

@grid-count: 12;

 

// 响应对应尺寸

@screen-sm-min: 768px;

@screen-md-min: 992px;

@screen-lg-min: 1200px;

1.png

在线预览请移步这里: http://runjs.cn/code/n1fsajds

本文转载自:https://segmentfault.com/a/1190000010104455

更多编程相关知识,请访问:编程入门!!

以上就是less百行代码实现bootstrap栅格布局的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

bootstrap table 查询实现

不用bootstrap用什么

bootstrap组件有哪些

bootstrap可以做小程序吗

bootstrap input样式修改的方法

bootstrap能用来干什么

bootstrap是框架吗

bootstrap与html5的区别是什么

浅谈使用bootstrap-datepicker插件实现日期录入处理功能

为什么要使用bootstrap框架

更多相关阅读请进入《Less》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...