看完我的笔记不懂也会懂----bootstrap
Bootstrap笔记
写在开始: 由于我对AngulaJS的学习只是一个最浅显的过程,所以看完后你大概只能学会如何简单的使用AngularJs,所以我对我的标题党行为道歉啦,嘿嘿
知识点扫盲
padding 在 width:auto 与 width:100%中的状况:
- 在width: auto;中加padding会在width的 里面加 (在盒子里面)
- 在width: 100%;中加padding会在width的 外面加 最后有可能超出外部容器
容器
液体容器
// clearfix清除浮动
width: auto;
box-sizing: border-box;
padding-left: 15px;
padding-right: 15px;
margin-left: auto;
margin-right: auto;
Less源代码
// 让液体容器清除浮动
.container-fluid:before,
.container-fluid:after{
content: " ";
display: table;
}
.container:after{
clear: both;
} // 液体容器总代码
.container-fluid{
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
}
固定容器
- 阈值
当大于1200px时,设置页面宽度为1170px
// 此处为clearfix清除浮动的样式
// 此处为容器公共样式
box-sizing: border-box;
padding-left: 15px;
padding-right: 15px;
margin-left: auto;
margin-right: auto; //当小于768时,设置页面宽度为auto
@media (max-width:768px){
width : auto;
} //当大于768px 小于992时,设置页面宽度为750px
@media (min-width:768px){
width : 750px;
} //当大于992px 小于1200时,设置页面宽度为970px
@media (min-width:992px){
width : 970px;
} //当大于1200px,设置页面宽度为1170px
@media (min-width:1200px){
width : 1170px;
}
Less源代码
// 让固定容器清除浮动
.container:before,
.container:after{
content: " ";
display: table;
}
.container:after{
clear: both;
} // 固定容器总代码
.container {
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px; // 用于媒体查询(响应式)的阈值 移动设备优先 顺序不能打乱! //max-width: @screen-sm-min ==> max-width: 768px ==> 手机移动端
// 手机移动端
@media (max-width: 768px){
width: auto;
}
//平板
@media (min-width: 768px) {
width: 750px; //width: 720px+槽宽(30px)
}
//普通显示器
@media (min-width: 992px) {
width: 970px; //width: 940px+槽宽(30px)
}
//大屏显示器
@media (min-width: 1200px) {
width: 1170px; //width: 1140px+槽宽(30px)
}
}
栅格系统
代码示例 ======> 使用栅格的方式
<!-- 外部有容器包裹 -->
<!-- 可以是液体容器也可以是固定容器 -->
<div class="container">
<!-- 容器里面先定义行 -->
<div class="row">
<!-- 12列占满固定容器 -->
<!-- 默认为12列 -->
<div class="col-lg-10">col-lg-10</div>
<div class="col-lg-2">col-lg-2</div>
</div>
</div>
源码分析部分
外部容器
流体容器最后总样式
// clearfix清除浮动
box-sizing: border-box;
margin-left: auto;
margin-right: auto;
padding-left: 15px;
padding-right: 15px;
固定容器最后总样式
// clearfix清除浮动
width: auto;
box-sizing: border-box;
padding-left: 15px;
padding-right: 15px;
margin-left: auto;
margin-right: auto; //当小于768时,设置页面宽度为auto
@media (max-width:768px){
width : auto;
} //当大于768px 小于992时,设置页面宽度为750px
@media (min-width:768px){
width : 750px;
} //当大于992px 小于1200时,设置页面宽度为970px
@media (min-width:992px){
width : 970px;
} //当大于1200px,设置页面宽度为1170px
@media (min-width:1200px){
width : 1170px;
}
```行
margin-left: -15px;
margin-right: -15px;
less源代码
.row {
.make-row();
} .make-row(@gutter: @grid-gutter-width) {
margin-left: ceil((@gutter / -2));
margin-right: floor((@gutter / -2));
}
列
第一步:所做工作:
.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-12, .col-sm-12, .col-md-12, .col-lg-12{
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
}
less源代码
// 所有尺寸的网格列(宽度1至12)的通用样式
.make-grid-columns() {
.col(@index) { // 初始化
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), @item);
} //递归函数
.col(@index, @list) when (@index =< @grid-columns) {
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
} .col(@index, @list) when (@index > @grid-columns) {
@{list} {
position: relative;
// 防止列在空时塌陷(至少保持有1px的高度)
min-height: 1px;
// 给予内边距用于排版
padding-left: 15px;
padding-right: 15px;
}
}
.col(1); // 启动程序(递归)
}
上述代码的js实现
var gc = 12;
var item = [];
//执行一个函数
mgc(); function mgc(){
//这个函数里面 调用一个函数
col(1); //启动递归整体 function col(index){
//里面的函数 再次调用一个函数
var str = 'col-xs-' + index;
item.push(str);
index++; col2(index,item); function col2(index, item){ //当index > gc时,结束递归输出item结果
if (index > gc){
console.log(item);
} //当index <= gc时, 递归调用 再次调用这个函数
if (index <= gc){
var str = 'col-xs-' + index;
item.push(str);
index++;
col2(index,item); //递归调用
}
}
}
}
第2.1步:所做工作:
.col-xs-1,
.col-xs-2,
.col-xs-3,
...
.col-xs-12{
float: left;
}
less源代码
.make-grid(@class) { .float-grid-columns(@class) {
.col(@index) {
@item: ~".col-@{class}-@{index}";
.col((@index + 1), @item);
} .col(@index, @list) when (@index =< 12) {
@item: ~".col-@{class}-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
} .col(@index, @list) when (@index > 12) {
@{list} {
float: left;
}
}
.col(1); // 启动递归
} }
第2.2步:所做工作:
//指定 不同类型 下 列不同大小 栅格的宽度
.col-xs-12{
width: 12/12 %;
}
.col-xs-11{
width: 11/12 %;
}
.col-xs-10{
width: 10/12 %;
}
...
.col-xs-1{
width: 1/12 %;
}
less源代码
.make-grid(@class) {
// LESS中的基本循环
.loop-grid-columns(@index, @class, @type) when (@index >= 0){ //当@index>=0时 .calc-grid-column(@index, @class, @type); //执行width混合
//下一次递归迭代
.loop-grid-columns((@index - 1), @class, @type);
} // width时候执行这个混合
.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
.col-@{class}-@{index} {
width: percentage((@index / @grid-columns));
}
}
}
第2.3步:所做工作:
// 栅格 列排序 // push
.col-xs-push-12{
left: 12/12 %;
}
.col-xs-push-11{
left: 11/12 %;
}
.col-xs-push-10{
left: 10/12 %;
}
...
.col-xs-push-1{
left: 1/12 %;
}
.col-xs-push-0{
left: auto;
} // pull
.col-xs-pull-12{
right: 12/12 %;
}
.col-xs-pull-11{
right: 11/12 %;
}
.col-xs-pull-10{
right: 10/12 %;
}
...
.col-xs-pull-1{
right: 1/12 %;
}
.col-xs-pull-0{
right: auto;
}
less源代码
.make-grid(@class) {
.loop-grid-columns(@grid-columns, @class, push);
.loop-grid-columns(@grid-columns, @class, pull); // LESS中的基本循环
.loop-grid-columns(@index, @class, @type) when (@index >= 0){ //当@index>=0时 .calc-grid-column(@index, @class, @type); //执行混合
//下一次递归迭代
.loop-grid-columns((@index - 1), @class, @type);
} //=============这些都是混合的定义,用于供上面的 .loop-grid-columns 调用 // push时候执行这个混合
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
.col-@{class}-push-@{index} {
left: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
.col-@{class}-push-0 {
left: auto;
}
} // pull时候执行这个混合
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
.col-@{class}-pull-@{index} {
right: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
.col-@{class}-pull-0 {
right: auto;
}
}
}
第2.4步:所做工作:
// 栅格 列偏移(offset)
// offset
.col-xs-offset-12{
margin-left: 12/12 %;
}
.col-xs-offset-11{
margin-left: 11/12 %;
}
.col-xs-offset-10{
margin-left: 10/12 %;
}
...
.col-xs-offset-1{
margin-left: 1/12 %;
}
.col-xs-offset-0{
margin-left: 0;
}
less源代码
.make-grid(@class) {
.loop-grid-columns(@grid-columns, @class, offset); // LESS中的基本循环
.loop-grid-columns(@index, @class, @type) when (@index >= 0){ //当@index>=0时 .calc-grid-column(@index, @class, @type); //执行混合
//下一次递归迭代
.loop-grid-columns((@index - 1), @class, @type);
} // offset时候执行这个混合
.calc-grid-column(@index, @class, @type) when (@type = offset) {
.col-@{class}-offset-@{index} {
margin-left: percentage((@index / @grid-columns);
}
}
}
栅格系统最终样式总结
// ================ 栅格容器 =====================
box-sizing: border-box;
margin-left: auto;
margin-right: auto;
padding-left: 15px;
padding-right: 15px; // ================ 栅格行 =====================
margin-left: -15px;
margin-right: -15px; // ================ 栅格格子 =====================
// 这是所有格子都有的样式
position: relative;
min-height: 1px; //限制最小高度
padding-left: 15px; //用于文字的排版美观性
padding-right: 15px; //用于文字的排版美观性 //格子的宽度
<!-- 例子:xs下一个占12列的格子 列的默认总宽度为12
12/12*100%
width: 100%
--> // 不同种类下不同格子的宽度
width: 格子占列的大小/列的总大小*100% //width的值根据格子占列的大小 //如果格子需要右移 使用push
left: auto //left的值根据格子占列的大小 0的时候为auto //如果格子需要左移 使用pull
right: auto //right的值根据格子占列的大小 0的时候为auto //如果格子需要做偏移(这会影响其他格子的排列) 使用offset
margin-left: 100% //auto的值根据格子占列的大小
- 阈值
栅格系统(盒模型)设计的精妙之处
- 外部容器(液体容器、固定容器)两边具有padding: 15px
- 行 两边具有margin: -15px
- 列 两边具有padding: 15px
- 为了美观而必须有槽宽
- 列两边就必须具有padding: 15px
- 为了里面能继续嵌套行
- 行两边就必须有margin: -15px来抵消列自身的槽宽
看完我的笔记不懂也会懂----bootstrap的更多相关文章
- 看完我的笔记不懂也会懂----AngulaJS
目录 Angular.js学习笔记 ng-app(指令) ng-model ng-init angular之表达式 双向数据绑定 数据流向的总结 作用域对象 控制器对象 依赖对象与依赖注入 命令式与声 ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- 看完我的笔记不懂也会懂----Node.js
Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...
- 看完我的笔记不懂也会懂----javascript模块化
JavaScript模块化 模块化引子 模块化的历史进化 模块化规范 CommonJS规范 Node.js(服务器端) 下项目的结构分析 browerify(浏览器端) 下项目的结构分析 AMD规范 ...
- 看完我的笔记不懂也会懂----less
目录 Less学习 语法篇 注释 变量 映射(Maps) @规则嵌套和冒泡 less中的嵌套规则 less中的混合 less的运算 extend延伸/继承 less忽略编译(转义) 导入(Import ...
- 看完我的笔记不懂也会懂----MongoDB
MongoDb数据库学习 - 数据库的分类 - 数据库基本概念 - MongoDB常用指令 - MongoDB的CURD - sort({key:*[1,-1]}).limit(num).skip(n ...
- 看完我的笔记不懂也会懂----MarkDown使用指南
目录 语法 [TOC] 自动生成目录 1. 标题 2. 文本强调 3. 列表 4. 图片 5. 超链接 6. 文本引用 7. 分割线 8. 代码 9. 任务列表 (MPE专属) 10. 表格 11. ...
- 看完我的笔记不懂也会懂----ECMAscript 567
目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...
- 看完我的笔记不懂也会懂----Ajax
Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...
随机推荐
- 设计模式(十五)——命令模式(Spring框架的JdbcTemplate源码分析)
1 智能生活项目需求 看一个具体的需求 1) 我们买了一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作. 2) 这些智能家电来自不同的厂家,我们不想针 ...
- 【poj 2752】Seek the Name, Seek the Fame(字符串--KMP)
题意:给出一个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀.从小到大依次输出这些子串的长度. 解法:利用KMP中next[ ]数组的性质,依次找到前缀.后缀匹 ...
- AtCoder Beginner Contest 183 E - Queen on Grid (DP)
题意:有一个\(n\)x\(m\)的棋盘,你需要从\((1,1)\)走到\((n,m)\),每次可以向右,右下,下走任意个单位,\(.\)表示可以走,#表示一堵墙,不能通过,问从\((1,1)\)走\ ...
- Poj-3922 A simple stone game(k倍动态减法)
题意: 游戏是这样的:两个玩家以一堆n个石头开始游戏.他们轮流从石堆里取石头,每次至少取一块.先走的人第一步最多可以拿n-1块石头.从那时起,一个玩家最多可以拿k倍于他的对手上次拿的石头.例如,如果一 ...
- hdu4521 小明系列问题——小明序列
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission ...
- Educational DP Contest F - LCS (LCS输出路径)
题意:有两个字符串,求他们的最长公共子序列并输出. 题解:首先跑个LCS记录一下dp数组,然后根据dp数组来反着还原路径,只有当两个位置的字符相同时才输出. 代码: char s[N],t[N]; i ...
- 修改jpg的图片大小
using System.Drawing.Imaging; public void ResizePic(string oldFilePath, int thumbnailImageWidth, int ...
- Leetcode(884)-索引处的解码字符串
给定一个编码字符串 S.为了找出解码字符串并将其写入磁带,从编码字符串中每次读取一个字符,并采取以下步骤: 如果所读的字符是字母,则将该字母写在磁带上. 如果所读的字符是数字(例如 d),则整个当前磁 ...
- C++ part2
为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? references: nowcoder 将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针 ...
- java8按照lamda表达式去重一个list,根据list中的一个元素
/** * 按照指定字段给list去重 * @param list * @return */ public static List<DataModel> niqueList(List< ...