bootstrap把response单独分开作为一个独立模块
这样整个栅格系统实际上分为了栅格grid和响应式布局response。非响应式的栅格是940固定宽度的,并且分为固定和流式两种,响应式布局就是通过media query增加了对不同屏幕宽度的适应。
布局上,通过容器的负padding-left和每一个列的margin-left来实现的,如下图所示:
一,定宽栅格的实现
在variables.less文件中定义了不同容器宽度下栅格系统的几个变量:列数(总是12列),列宽度columnWidth, 列间隙宽度gutterWidth和行宽度rowWidth。
代码如下:
- // Default 940px grid
- // -------------------------
- @gridColumns: 12;
- @gridColumnWidth: 60px;
- @gridGutterWidth: 20px;
- @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
- // 1200px min
- @gridColumnWidth1200: 70px;
- @gridGutterWidth1200: 30px;
- @gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
- // 768px-979px
- @gridColumnWidth768: 42px;
- @gridGutterWidth768: 20px;
- @gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
这段代码定义了三种宽度下的显示方式,默认的940px宽度下,每一列宽度是60,列间隙是20,那么行宽度就是60x12+20x(12-1)=940px
在grid代码中直接调用了mixin中的grid方法:
- // Fixed (940px)
- #grid > .core(@gridColumnWidth, @gridGutterWidth);
- // Fluid (940px)
- #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
- // Reset utility classes due to specificity
- [class*="span"].hide,
- .row-fluid [class*="span"].hide {
- display: none;
- }
- [class*="span"].pull-right,
- .row-fluid [class*="span"].pull-right {
- float: right;
- }
注意其中还用了属性选择其来选择spanX,因此是不支持ie8一下的浏览器的。
#grid > .core和#grid - .fluid都是在mixin中定义的方法。
我们先看看core是如何实现的:
- .core (@gridColumnWidth, @gridGutterWidth) {
- //这个函数用递归实现了循环,因为less是没有循环的,因此index=12的时候会输出 .span1 ~ 12,而内部是调用.span函数
- .spanX (@index) when (@index > 0) {
- .span@{index} { .span(@index); }
- .spanX(@index - 1);
- }
- .spanX (0) {} //这个没有任何输出的,不知道写这里干嘛
- //这个函数和.spanX函数很像,都是用递归实现循环操作,内部也是调用了.offset函数实现的
- .offsetX (@index) when (@index > 0) {
- .offset@{index} { .offset(@index); }
- .offsetX(@index - 1);
- }
- .offsetX (0) {}
- //定义了12列offset的margin
- .offset (@columns) {
- margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
- }
- //定义了12列的宽度,注意宽度是如何计算出来的
- .span (@columns) {
- width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
- }
- //注意负margin,注意这里自带了clearfix,因此宽度会被里面的列撑开,而不需要指定宽度
- .row {
- margin-left: @gridGutterWidth * -1;
- .clearfix();
- }
- //通过属性选择器统一定义了每一列的通用样式,好处是只需要定义一次,坏处是不支持ie8以下的浏览器(不支持属性选择器)
- [class*="span"] {
- float: left;
- min-height: 1px; // prevent collapsing columns
- margin-left: @gridGutterWidth;
- }
- // Set the container width, and override it for fixed navbars in media queries
- //重载了container的宽度
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container { .span(@gridColumns); }
- // generate .spanX and .offsetX
- //调用函数递归生成.span1~12和.offset1~12
- .spanX (@gridColumns);
- .offsetX (@gridColumns);
- }
其中最大的亮点就是用递归模拟了循环,通过循环避免了重复写12次代码。
二,流式栅格的实现
流式栅格相比对定宽栅格,最大的区别就是:
1,定宽栅格直接使用了传入的参数,而流式栅格用传入的参数计算出百分比,最终使用百分比来做布局。
2,定宽栅格可以使用负margin row来布局,而流式栅格则不行,因为row的负margin应该和span的margin-left保持一致,而这两个使用百分比的话是无法保持一致宽度的,因为百分比计算的对象不一样。
比如在同样是如下参数:
@gridColumns: 12;
@gridColumnWidth: 60px;
@gridGutterWidth: 20px;
@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
定宽栅格中,每一列就是60px宽度,列间距就是20px
而在流式栅格中根据上述参数会计算出一个百分比来,实际使用的是这些百分比:
// Fluid grid
// -------------------------
@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth);
@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth);
流式栅格的代码如下:
- .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
- //和定宽栅格没什么区别
- .spanX (@index) when (@index > 0) {
- .span@{index} { .span(@index); }
- .spanX(@index - 1);
- }
- .spanX (0) {}
- .offsetX (@index) when (@index > 0) {
- .offset@{index} { .offset(@index); }
- .offset@{index}:first-child { .offsetFirstChild(@index); }
- .offsetX(@index - 1);
- }
- .offsetX (0) {}
- .offset (@columns) {
- margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
- *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
- }
- .offsetFirstChild (@columns) {
- margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
- *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
- }
- .span (@columns) {
- width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
- *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
- }
- .row-fluid {
- width: 100%;
- .clearfix();
- [class*="span"] {
- .input-block-level();
- float: left;
- margin-left: @fluidGridGutterWidth;
- *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
- }
- [class*="span"]:first-child {
- margin-left: 0;
- }
- // Space grid-sized controls properly if multiple per line
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: @fluidGridGutterWidth;
- }
- // generate .spanX and .offsetX
- .spanX (@gridColumns);
- .offsetX (@gridColumns);
- }
- }
三,响应式布局
有了上面的#grid > .core和 #grid > .fluid函数,实现响应式就非常简单了。
首先variables中已经定义好了不同宽度的样式,前面已经讲过了。
然后在加上media query并调用 #grid就ok了:
比如 1200px宽屏就是这么定义的:
- @media (min-width: 1200px) {
- // Fixed grid
- #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
- // Fluid grid
- #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
- // Input grid
- #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
- // Thumbnails
- .thumbnails {
- margin-left: -@gridGutterWidth1200;
- }
- .thumbnails > li {
- margin-left: @gridGutterWidth1200;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
- }
相关推荐
响应式布局是一种网页设计技术,它允许网页在不同的...在分析源码时,注意查看HTML结构、CSS样式和JavaScript代码,理解它们是如何协同工作以实现响应式布局的。此外,不断实践和调试将有助于加深对这些概念的理解。
Bootstrap使用媒体查询实现响应式布局,随着屏幕尺寸的变化,列数会自动调整,使得内容在不同设备上都能适应。 源码中可能还包括`.offset-*-*`类,用于添加列的偏移,比如`.offset-md-3`会在中等屏幕设备上向右偏移...
这个“蓝色简洁的响应式布局bootstrap后台系统管理模板html源码”是一个适合前端初学者学习和实践的项目,它展示了如何利用Bootstrap构建一个高效且美观的后台管理系统界面。 1. **响应式设计**:响应式设计是现代...
响应式布局与Bootstrap是前端开发中极其重要的技术概念,它能够帮助开发者设计出能够适应不同屏幕尺寸和分辨率的网页,提升用户在不同设备上的浏览体验。Bootstrap作为一款广泛使用的前端框架,提供了丰富的组件、类...
Bootstrap则是流行的前端开发框架,它提供了响应式布局和丰富的组件库,使得快速构建美观的用户界面成为可能。 **描述分析:** “网站源代码”表明这是一个完整的网站项目,包含了所有用于构建和运行网站的文件,...
3. **Bootstrap应用**:在WordPress主题中集成Bootstrap,利用其栅格系统和组件来构建响应式布局。 4. **WordPress钩子和过滤器**:学习如何使用WordPress的action和filter钩子来修改主题行为。 5. **响应式设计**:...
Bootstrap是世界上最流行的前端开发框架之一,由Twitter的开发者创建,旨在提供一套简洁、直观、强大的工具,用于构建响应式布局和移动设备优先的Web项目。这个压缩包包含了一系列的Bootstrap样例源码,是你深入理解...
在秦时明月项目的背景下,Bootstrap被用来构建一个美观且响应式的布局,使网页在桌面、平板和手机等不同设备上都能自适应显示。 1. **Bootstrap栅格系统**:Bootstrap的12列栅格系统是布局的核心,允许开发者通过...
1. **响应式布局**:Bootstrap采用移动优先的策略,通过媒体查询实现不同设备屏幕尺寸下的自适应布局。这使得网站在手机、平板电脑和桌面电脑上都能提供良好的用户体验。 2. **栅格系统**:Bootstrap的栅格系统允许...
例如,你可能会在压缩包中的“sys”文件夹中找到有关如何定义不同屏幕尺寸(如xs, sm, md, lg)下的列宽和如何创建响应式布局的代码片段。 其次,Bootstrap包含了大量预定义的CSS类,可以轻松地添加到HTML元素中,...
Bootstrap是世界上最受欢迎的前端开发框架之一,由Twitter的开发者创建,用于构建响应式布局和移动设备优先的Web项目。这款“自适应式国外Bootstrap主题类网站html源码模板”为初学者和新手提供了宝贵的资源,帮助...
Bootstrap是由Twitter开发并开源的一个响应式布局、移动设备优先的WEB框架,它为开发者提供了丰富的组件和预定义的样式,可以快速构建美观且功能齐全的网页。 在描述中反复提及"bootstrap电影网站UI源码",这意味着...
1. **Bootstrap布局系统**:理解如何使用Bootstrap的栅格系统创建响应式布局,适应各种屏幕尺寸。 2. **Bootstrap组件**:学习如何应用和定制Bootstrap的组件,如导航条、下拉菜单、按钮、表单等。 3. **jQuery基础*...
这篇教程将深入解析《国外旅游攻略网站CSS模板_html5 bootstrap 响应式模板UI前端源码.rar》这一压缩包中的核心知识点,旨在帮助你理解和应用HTML5、Bootstrap以及响应式设计来构建现代化的旅游攻略网站。...
1. **栅格系统**:Bootstrap的栅格系统是其布局的核心,它基于12列的响应式网格,可以轻松创建多列布局,适应不同屏幕尺寸。源码中会包含`.container`、`.row`和`.col-*`类,通过这些类实现灵活的布局。 2. **CSS...
Bootstrap的媒体查询(Media Queries)和栅格系统使得实现响应式布局变得简单。通过定义不同断点,网页可以适应手机、平板电脑和桌面电脑等各种屏幕大小。 4. **UI前端**: 用户界面(UI)前端是指用户与网站或应用...
Bootstrap5是目前广泛应用的一款前端框架,以其强大的响应式布局、丰富的组件和易用性而备受开发者喜爱。本模板专为后台数据统计设计,提供了完善的解决方案,帮助开发者快速构建美观且功能丰富的数据展示平台。 **...
- Bootstrap框架:提供UI组件和响应式布局模板。 - AJAX:用于异步数据通信,提升用户体验。 - Font Awesome或 Glyphicons:提供图标资源。 - 可能会用到的后端技术:如PHP、Node.js或Python等,负责处理数据逻辑和...
4. **响应式设计**:Bootstrap的核心特性之一就是响应式布局。源码中会体现如何使用媒体查询(`@media`)和Bootstrap的网格系统创建适应不同屏幕尺寸的设计,确保在手机、平板和桌面设备上都有良好的显示效果。 5. **...
Bootstrap是世界上最受欢迎的前端开发框架之一,主要用于构建响应式布局和移动设备优先的Web项目。Bootstrap 3.0.0是该框架的一个重要版本,它引入了许多改进和新特性,旨在提升开发者的效率和用户体验。 **一、...