热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Less/Sass生成Bootstrap格栅样式系统

熟悉Bootstrap的同学应该了解其中的格栅系统,用来排版非常方便。他将页面分为12等分,并且适用不同的尺寸屏幕。超小xs(小于768px),小屏sm(大于等于768px),中屏md(大于等于992

熟悉Bootstrap的同学应该了解其中的格栅系统,用来排版非常方便。他将页面分为12等分,并且适用不同的尺寸屏幕。超小xs(小于768px),小屏sm(大于等于768px),中屏md(大于等于992px),大屏lg(大于等于1200px)。为此需要生成一堆的.clo-*-*类,总计4*12=48个,再加上pull,push,offset。这种只能用less来写了,参考Bootstrap的less源码,自己重新写了一个,仅供练手

 

Less版本

@sm-width: 768px;
@md-width: 992px;
@lg-width: 1200px;
@grid-columns: 12;
@grid-gutter: 30px;
@container-sm: (720px + @grid-gutter);
@container-md: (940px + @grid-gutter);
@container-lg: (1140px + @grid-gutter);

.grid-padding(@gutter){
padding-left: floor((@gutter)/2);
padding-right: floor((@gutter)/2);
}
.make-container() {
.grid-padding(@grid-gutter);
margin-left: auto;
margin-right: auto;
@media (min-width: @sm-width) {
width: @container-sm;
}
@media (min-width: @md-width) {
width: @container-md;
}
@media (min-width: @lg-width) {
width: @container-lg;
}
}

.container{
.make-container;
}
.container-fluid{
.grid-padding(@grid-gutter);
margin-left: auto;
margin-right: auto;
}
.row {
margin-left: -15px;
margin-right: -15px;
}

.make-grid() {
.col(@index; @list) when(@index  @grid-columns) {
@{item} {
.grid-padding(@grid-gutter);
position: left;
min-height: 1px;
}
}

.col(1; '.col-xs-0');
}

.make-grid();

.make-column(@class) {
.col(@index; @list) when (@index  @grid-columns) {
@{list} {
float: left;
}
}
.col(1; '.col-@{class}-0');
}
.make-column(xs);
@media (min-width: @sm-width) {
.make-column(sm);
}
@media (min-width: @md-width) {
.make-column(md);
}
@media (min-width: @lg-width) {
.make-column(lg);
}

 

sass版本

$screen-map: (xs:768px, sm: 768px, md: 992px, lg: 1200px);
$gutter-width: 30px;
$container-map: (sm: 720px + $gutter-width, md: 940px + $gutter-width, lg: 1140px + $gutter-width);
$grid-columns: 12;
$colclass-map: (pull: right, push: left, offset: margin-left);

@mixin grid-padding($gutter) {
	padding-left: $gutter/2;
	padding-right: $gutter/2;
}

@mixin margin-auto($horizone:null) {
	@if $horizone {
		margin: $horizone/2 auto;
	}
	@else {
		margin-left: auto;
		margin-right: auto;
	}
}

@mixin make-container() {
	@include grid-padding($gutter-width);
	@include margin-auto();

	@each $screen, $width in $container-map {
		$min-width: map-get($screen-map, $screen);
		@media (min-width: $min-width) {
			width: $width;
		}
	}
}

.container{
	@include make-container();
}

.container-fluid{
	@include grid-padding($gutter-width);
	@include margin-auto();
}
.row {
	margin-left: -15px;
	margin-right: -15px;
}

@mixin make-grid() {
	$list: null;
	@for $i from 1 through $grid-columns {
		@each $screen, $width in $screen-map {
			$item: '.col-#{$screen}-#{$i}';
			@if $list {
				$list: #{$list}, #{$item};
			} @else {
				$list: $item;
			}
		}
	}
	#{$list} {
		@include grid-padding($gutter-width);
		position: left;
		min-height: 1px;
	}
}

@mixin make-column($screen) {
	$list: null;
	@for $i from 1 through $grid-columns {
		$item: '.col-#{$screen}-#{$i}';
		@if $list {
			$list: #{$list}, #{$item};
		} @else {
			$list: $item;
		}

		#{$item} {
			width: percentage(($i)/$grid-columns);
		}
		@each $class, $suffix in $colclass-map {
			.col-#{$screen}-#{$class}-#{$i} {
				#{$suffix}: percentage(($i)/$grid-columns);
			}
		}
	}

	#{$list} {
		float: left;
	}
}

@include make-grid();
@each $screen, $width in $screen-map {
	@if $screen == xs {
		@include make-column($screen);
	} @else {
		@media (min-width: $width) {
			@include make-column($screen);
		}
	}
}

 

 

编译生成对应CSS文件:

.container {
padding-left: 15px;
padding-right: 15px;
margin-left: auto;
margin-right: auto;
}
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
.container-fluid {
padding-left: 15px;
padding-right: 15px;
margin-left: auto;
margin-right: auto;
}
.row {
margin-left: -15px;
margin-right: -15px;
}
.col-xs-0, .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
padding-left: 15px;
padding-right: 15px;
position: left;
min-height: 1px;
}
.col-xs-1 {
width: 8.33333333%;
}
.col-xs-pull-1 {
right: 8.33333333%;
}
.col-xs-push-1 {
left: 8.33333333%;
}
.col-xs-offset-1 {
margin-left: 8.33333333%;
}
.col-xs-2 {
width: 16.66666667%;
}
.col-xs-pull-2 {
right: 16.66666667%;
}
.col-xs-push-2 {
left: 16.66666667%;
}
.col-xs-offset-2 {
margin-left: 16.66666667%;
}
.col-xs-3 {
width: 25%;
}
.col-xs-pull-3 {
right: 25%;
}
.col-xs-push-3 {
left: 25%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-4 {
width: 33.33333333%;
}
.col-xs-pull-4 {
right: 33.33333333%;
}
.col-xs-push-4 {
left: 33.33333333%;
}
.col-xs-offset-4 {
margin-left: 33.33333333%;
}
.col-xs-5 {
width: 41.66666667%;
}
.col-xs-pull-5 {
right: 41.66666667%;
}
.col-xs-push-5 {
left: 41.66666667%;
}
.col-xs-offset-5 {
margin-left: 41.66666667%;
}
.col-xs-6 {
width: 50%;
}
.col-xs-pull-6 {
right: 50%;
}
.col-xs-push-6 {
left: 50%;
}
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-7 {
width: 58.33333333%;
}
.col-xs-pull-7 {
right: 58.33333333%;
}
.col-xs-push-7 {
left: 58.33333333%;
}
.col-xs-offset-7 {
margin-left: 58.33333333%;
}
.col-xs-8 {
width: 66.66666667%;
}
.col-xs-pull-8 {
right: 66.66666667%;
}
.col-xs-push-8 {
left: 66.66666667%;
}
.col-xs-offset-8 {
margin-left: 66.66666667%;
}
.col-xs-9 {
width: 75%;
}
.col-xs-pull-9 {
right: 75%;
}
.col-xs-push-9 {
left: 75%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-10 {
width: 83.33333333%;
}
.col-xs-pull-10 {
right: 83.33333333%;
}
.col-xs-push-10 {
left: 83.33333333%;
}
.col-xs-offset-10 {
margin-left: 83.33333333%;
}
.col-xs-11 {
width: 91.66666667%;
}
.col-xs-pull-11 {
right: 91.66666667%;
}
.col-xs-push-11 {
left: 91.66666667%;
}
.col-xs-offset-11 {
margin-left: 91.66666667%;
}
.col-xs-12 {
width: 100%;
}
.col-xs-pull-12 {
right: 100%;
}
.col-xs-push-12 {
left: 100%;
}
.col-xs-offset-12 {
margin-left: 100%;
}
.col-xs-0, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
float: left;
}
@media (min-width: 768px) {
.col-sm-1 {
width: 8.33333333%;
}
.col-sm-pull-1 {
right: 8.33333333%;
}
.col-sm-push-1 {
left: 8.33333333%;
}
.col-sm-offset-1 {
margin-left: 8.33333333%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-pull-2 {
right: 16.66666667%;
}
.col-sm-push-2 {
left: 16.66666667%;
}
.col-sm-offset-2 {
margin-left: 16.66666667%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-pull-3 {
right: 25%;
}
.col-sm-push-3 {
left: 25%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-pull-4 {
right: 33.33333333%;
}
.col-sm-push-4 {
left: 33.33333333%;
}
.col-sm-offset-4 {
margin-left: 33.33333333%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-pull-5 {
right: 41.66666667%;
}
.col-sm-push-5 {
left: 41.66666667%;
}
.col-sm-offset-5 {
margin-left: 41.66666667%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-pull-6 {
right: 50%;
}
.col-sm-push-6 {
left: 50%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-pull-7 {
right: 58.33333333%;
}
.col-sm-push-7 {
left: 58.33333333%;
}
.col-sm-offset-7 {
margin-left: 58.33333333%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-pull-8 {
right: 66.66666667%;
}
.col-sm-push-8 {
left: 66.66666667%;
}
.col-sm-offset-8 {
margin-left: 66.66666667%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-pull-9 {
right: 75%;
}
.col-sm-push-9 {
left: 75%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-pull-10 {
right: 83.33333333%;
}
.col-sm-push-10 {
left: 83.33333333%;
}
.col-sm-offset-10 {
margin-left: 83.33333333%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-pull-11 {
right: 91.66666667%;
}
.col-sm-push-11 {
left: 91.66666667%;
}
.col-sm-offset-11 {
margin-left: 91.66666667%;
}
.col-sm-12 {
width: 100%;
}
.col-sm-pull-12 {
right: 100%;
}
.col-sm-push-12 {
left: 100%;
}
.col-sm-offset-12 {
margin-left: 100%;
}
.col-sm-0, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
}
@media (min-width: 992px) {
.col-md-1 {
width: 8.33333333%;
}
.col-md-pull-1 {
right: 8.33333333%;
}
.col-md-push-1 {
left: 8.33333333%;
}
.col-md-offset-1 {
margin-left: 8.33333333%;
}
.col-md-2 {
width: 16.66666667%;
}
.col-md-pull-2 {
right: 16.66666667%;
}
.col-md-push-2 {
left: 16.66666667%;
}
.col-md-offset-2 {
margin-left: 16.66666667%;
}
.col-md-3 {
width: 25%;
}
.col-md-pull-3 {
right: 25%;
}
.col-md-push-3 {
left: 25%;
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-4 {
width: 33.33333333%;
}
.col-md-pull-4 {
right: 33.33333333%;
}
.col-md-push-4 {
left: 33.33333333%;
}
.col-md-offset-4 {
margin-left: 33.33333333%;
}
.col-md-5 {
width: 41.66666667%;
}
.col-md-pull-5 {
right: 41.66666667%;
}
.col-md-push-5 {
left: 41.66666667%;
}
.col-md-offset-5 {
margin-left: 41.66666667%;
}
.col-md-6 {
width: 50%;
}
.col-md-pull-6 {
right: 50%;
}
.col-md-push-6 {
left: 50%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-7 {
width: 58.33333333%;
}
.col-md-pull-7 {
right: 58.33333333%;
}
.col-md-push-7 {
left: 58.33333333%;
}
.col-md-offset-7 {
margin-left: 58.33333333%;
}
.col-md-8 {
width: 66.66666667%;
}
.col-md-pull-8 {
right: 66.66666667%;
}
.col-md-push-8 {
left: 66.66666667%;
}
.col-md-offset-8 {
margin-left: 66.66666667%;
}
.col-md-9 {
width: 75%;
}
.col-md-pull-9 {
right: 75%;
}
.col-md-push-9 {
left: 75%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-10 {
width: 83.33333333%;
}
.col-md-pull-10 {
right: 83.33333333%;
}
.col-md-push-10 {
left: 83.33333333%;
}
.col-md-offset-10 {
margin-left: 83.33333333%;
}
.col-md-11 {
width: 91.66666667%;
}
.col-md-pull-11 {
right: 91.66666667%;
}
.col-md-push-11 {
left: 91.66666667%;
}
.col-md-offset-11 {
margin-left: 91.66666667%;
}
.col-md-12 {
width: 100%;
}
.col-md-pull-12 {
right: 100%;
}
.col-md-push-12 {
left: 100%;
}
.col-md-offset-12 {
margin-left: 100%;
}
.col-md-0, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
float: left;
}
}
@media (min-width: 1200px) {
.col-lg-1 {
width: 8.33333333%;
}
.col-lg-pull-1 {
right: 8.33333333%;
}
.col-lg-push-1 {
left: 8.33333333%;
}
.col-lg-offset-1 {
margin-left: 8.33333333%;
}
.col-lg-2 {
width: 16.66666667%;
}
.col-lg-pull-2 {
right: 16.66666667%;
}
.col-lg-push-2 {
left: 16.66666667%;
}
.col-lg-offset-2 {
margin-left: 16.66666667%;
}
.col-lg-3 {
width: 25%;
}
.col-lg-pull-3 {
right: 25%;
}
.col-lg-push-3 {
left: 25%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-4 {
width: 33.33333333%;
}
.col-lg-pull-4 {
right: 33.33333333%;
}
.col-lg-push-4 {
left: 33.33333333%;
}
.col-lg-offset-4 {
margin-left: 33.33333333%;
}
.col-lg-5 {
width: 41.66666667%;
}
.col-lg-pull-5 {
right: 41.66666667%;
}
.col-lg-push-5 {
left: 41.66666667%;
}
.col-lg-offset-5 {
margin-left: 41.66666667%;
}
.col-lg-6 {
width: 50%;
}
.col-lg-pull-6 {
right: 50%;
}
.col-lg-push-6 {
left: 50%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-7 {
width: 58.33333333%;
}
.col-lg-pull-7 {
right: 58.33333333%;
}
.col-lg-push-7 {
left: 58.33333333%;
}
.col-lg-offset-7 {
margin-left: 58.33333333%;
}
.col-lg-8 {
width: 66.66666667%;
}
.col-lg-pull-8 {
right: 66.66666667%;
}
.col-lg-push-8 {
left: 66.66666667%;
}
.col-lg-offset-8 {
margin-left: 66.66666667%;
}
.col-lg-9 {
width: 75%;
}
.col-lg-pull-9 {
right: 75%;
}
.col-lg-push-9 {
left: 75%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-10 {
width: 83.33333333%;
}
.col-lg-pull-10 {
right: 83.33333333%;
}
.col-lg-push-10 {
left: 83.33333333%;
}
.col-lg-offset-10 {
margin-left: 83.33333333%;
}
.col-lg-11 {
width: 91.66666667%;
}
.col-lg-pull-11 {
right: 91.66666667%;
}
.col-lg-push-11 {
left: 91.66666667%;
}
.col-lg-offset-11 {
margin-left: 91.66666667%;
}
.col-lg-12 {
width: 100%;
}
.col-lg-pull-12 {
right: 100%;
}
.col-lg-push-12 {
left: 100%;
}
.col-lg-offset-12 {
margin-left: 100%;
}
.col-lg-0, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
float: left;
}
}

文章同步发布: https://www.geek-share.com/detail/2765120966.html


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
author-avatar
宅囧2502881733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有