一文学会 BootStrap

在这里插入图片描述

文章目录

  • 认识BootStrap
    • 历史
    • 优缺点
    • 使用注意
    • 安装
      • CDN
      • 源码引入
      • 包管理器
  • 媒体查询
  • 屏幕尺寸的分割点(Breakpoints)
  • 响应式容器
  • 网格系统
    • 基本使用
    • 底层实现
      • .container
      • .row
      • .col、.col-份数
    • 网格嵌套
    • 自动布局列 Auto-layout
    • 响应式类 Responsive Class
  • 响应式工具类-Display
  • 实用工具类(Utility classes)
  • 可访问性-辅助类
  • Bootstrap组件

认识BootStrap

Bootstrap 读音 /ˈbu:tstræp/ ,是一个非常受欢迎的前端框架,官方网站将其描述为。最流行的 HTML、CSS 和 JS 框架,用于在 Web 上开发响应式、移动优先的项目。

历史

  • 在2011年8月19日将其作为开源项目发布。项目由Mark Otto、Jacob Thornton和核心开发小组维护。
  • 在2012年1月31日发布Bootstrap 2,增加了十二列网格系统和响应式组件,并对许多组件进行了修改。
  • 在2013年8月19日发布Bootstrap 3,开始将移动设备优先作为方针,并且开始使用扁平化设计,支持IE8-9。
  • 在2018年1月7日发布Bootstrap 4,增加了Flexbox Grid、Cards、Spacing Utilities等。
  • 在2021年5月5日发布Bootstrap 5,增强Grid System、增强Form elements、Not Support for IE、Bootstrap Icons等

优缺点

优点

  • 提供便捷的响应式系统和实用的工具类,以及统一的样式和组件。
  • 文件结构简单

缺点

  • 不适合需要高度定制样式的项目,因为Bootstrap具有统一的视觉风格,高度定制类的项目需要大量的自定义和样式覆盖。
  • 框架文件比较大(61KB JS + 159KB CSS)

使用注意

  1. Bootstrap 要求文档类型(doctype)是 HTML5。<!doctype html>
  2. Bootstrap 采用的是移动设备优先(mobile first) 的开发策略,为了网页能够适配移动端的设备,需在 标签中添加viewport(视口)
  • 在移动端会把 layout viewport 的宽度设置为设备的宽,并且不允许用户进行页面的缩放。
  • shrink-to-fit 是为了兼容 Safari 9 以后版本,禁止页面的伸缩
 <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,maximum-scale=1.0,minimum-scale=1.0,shrink-
to-fit=no">
  1. Bootstrap 会将全局的 box-sizing 从 content-box 调整为 border-box。
  • 如果需要覆盖这个设置:
.selector-for-some-widget {box-sizing: content-box;
}

安装

注意:Bootstrap 5 以前的版本是依赖 jQuery 的,所以需要引入 jQuery。

三种安装方式:

  1. cdn
  2. 源码手动引入
  3. 包管理器

CDN

Bootstrap框架的CDN地址

  • https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css
  • https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js
  • https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js

源码引入

Bootstrap框架的下载

  • Bootstrap下载地址:

下载 Bootstrap

  • jQuery下载地址:

Download jQuery | jQuery

bootstrap 软件包中提供了多个 css 文件版本和 js 版本:
三个 css 版本:

  1. 全量版:bootstrap.css
  2. 只提供网格布局和部分flex工具类版:bootstrap-grid.css
  3. 只初始化样式版,就和 normalize.css 一样:bootstrap-reboot.css

两个 js 版本:

  1. 全量版:bootstrap.js
  2. 不支持 Popper 版:bootstrap.bundle.js
  • image.png这种气泡弹窗就是 Popper。

对于这些版本,我们可以按需求引入。

包管理器

npm 或 yarn 都行。
Webpack

媒体查询

bootstrap 内部的响应式是通过媒体查询。
媒体查询一般是设置最小宽度,当满足最小宽度,则样式生效。

@media (min-width: 576px) {// 当屏幕大于 576px 的时候的样式
}

屏幕尺寸的分割点(Breakpoints)

Bootstrap的一大核心就是响应式,即开发一套系统便可以适配不同尺寸的屏幕。它底层原理是使用媒体查询来为我们的布局和页面创建合理的断点(Breakpoints),然后根据这些合理的断点来给不同尺寸屏幕应用不同的CSS样式。

bootstrap 设置了 5 个屏幕断点。分别对应着:手机,手机横屏,平板,小屏笔记本13、14寸,一般尺寸的电脑。

image.png

响应式容器

Containers容器是 Bootstrap 中最基本的布局元素,并且该布局支持响应式。在使用默认网格系统时是必需的。
Containers容器用于包含、填充,有时也会作为内容居中使用。容器也是可以嵌套,但大多数布局不需要嵌套容器

响应式容器的特点就是它设置了最大宽度,并且让内容水平居中。容器它是个包裹样式,起包裹作用。

bootstrap 响应式容器有三个:

  • .container: 它在每个断点处会设置不同的max-width。
  • .container-{breakpoint},默认是width: 100%,直到指定断点才会修改为响应的值。
  • .container-fluid:在所有断点处都是 width: 100%。

断点媒体查询的宽度和最大宽度的具体数值:
image.png
举个例子:
当前屏幕宽度为 580px,580 大于 576 那么媒体查询 sm 生效,但此时设置最大宽度为 540px,所以.container应用的标签会水平居中,且两边留有 20px 的空白。

总结一下:
前两个容器样式会在断点的媒体查询生效后,在其中设置最大宽度 max-width。在不生效的时候,最大宽度就是 100%。.container会在所有断点处设置最大宽度,而.container-lg则只会在 lg 断点生效后设置最大宽度。
.container-fluid中,所有的断点处都是最大宽度都是 100%。

容器源码:

width: 100% 或 某个断点的宽; - 布局的宽
padding-right: 15px; - 让包含的内容不会靠在布局右边缘
padding-left: 15px; - 让包含的内容不会靠在布局左边缘
margin-right: auto; - 布局居中
margin-left: auto; - 布局居中

为了美观,不让容器包裹的元素紧贴着容器两边,所以设置了左右内边距 15px。

网格系统

网格系统一行分为 12 格。3.0 版本底层实现是浮动,4.0 版本是 flex。

2.0 版本之前是分成16格,为什么换成 12 格呢?
因为 12 的因数比 16 多,所以一行中能有更多的列组合。比如一行要 3 列,16 就分不了。

网格系统是使用container、row和col类来布局,并且布局是支持响应的。
image.png

基本使用

那么我们应该如何使用网格系统?

  1. 编写一个container或container-fluid容器;
  2. 在container容器中编写row容器
  3. 在row容器中编写列col容器。
<div class="container"><div class="row"><div class="col">第一列</div><div class="col">第二列</div><div class="col">第三列</div></div>
</div>

底层实现

.container

见上文。

.row

row没的说,肯定是 flex 容器。 display: flex; flex-wrap: wrap;
但是 row 中还有负的外边距。margin: 0 -15px;
因为 container 中有内边距,row 同样作为一个包裹元素,就需要紧贴着 container 两边,所以要抵消 container 的内边距。
并且如果 row 没有负值来抵消的话,那么网格系统进行嵌套,嵌套越多,左右两边就会有多个多余的padding。

.col、.col-份数

col 和 col-4 是不同的:(不指定份数和指定份数)

  • col 实际实现是**flex-grow: 1;****表示列可以伸缩,**当有新的列加入的时候,其他列会一起缩小宽度让新的列加入,也就是所有 col 列都将处于同一行。
  • col-4 实际实现是**flex: 0 0 33.3333% = flex-grow: 0; flex-shrink: 0; flex-basis: 33.3333%****,它表示列不能拉伸和缩放,按百分比固定占据主轴的位置。**所以当有新的列加入时,新的列会换行到下一行。
<div class="container"><!-- display: flex	flex-wrap:wrap	--><div class="row"><!-- flex item: flex-grow: 1 --><div class="col item">1</div><div class="col item">2</div><div class="col item">3</div></div></div>
<!-- 网格系统(启用了12列,超出12列就会换行) 可以制定列的框-->
<div class="container"><div class="row"><!-- flex item:  flex-basis: xx%max-width: xx%flex-grow: 0,flex-shrink: 0--><div class="col-4 item">1</div><div class="col-4 item">2</div><div class="col-4 item">3</div><div class="col-6 item">4</div></div>
</div>

另外,col 包裹实际内容的,为了美观,所以给 col 设置内边距 15px,防止实际内容紧贴着容器 container。

网格嵌套

网格支持嵌套,当网格系统中的某一列嵌套一个网格系统的时候,嵌套的网络系统可以省略 container 容器。
因为网格系统中的col是可以充当一个container-fluid容器来使用(col的属性和container-fluid的属性基本一样)

不省略 container 就会多出一个列宽。

比如实现一行8列的布局,12的因数没有8,所以如果要使用网格系统实现,我们就需要嵌套。当然也能直接使用 flex,不用网格。

<div class="container"><!-- flex:列宽自动拉伸 --><div class="row"><div class="col item">1</div><div class="col item">2</div><div class="col item">3</div><div class="col item">4</div><div class="col item">5</div><div class="col item">6</div><div class="col item">7</div><div class="col item">8</div></div>
</div>
<div class="container"><div class="row"><div class="col-6 item"><!-- 嵌套网格系统( 嵌套的时候是可以省略container ) --><div class="row"><div class="col-3 item">1</div><div class="col-3 item">2</div><div class="col-3 item">3</div><div class="col-3 item">4</div></div></div><div class="col-6 item"><!-- ( 嵌套的时候是可以省略container ) --><div class="row"><div class="col-3 item">1</div><div class="col-3 item">2</div><div class="col-3 item">3</div><div class="col-3 item">4</div></div></div></div>
</div>

自动布局列 Auto-layout

自动布局列有三种方式,之前已经讲了两种,还有一种 col-auto。

总结自动布局列col(auto layout):

  • col : 等宽列(Equal-width),自动伸缩
    • 底层是 flex-grow: 1, max-width: 100%。该类网格系统仅用flexbox布局。
  • col-auto : 列的宽为auto(Variable width content),
    • 底层是 flex: 0 0 auto; width: auto
    • flex-basis为 auto,宽度就由 width 决定,width 也为 auto,也就是由内容决定宽度。
  • col-{num}: 指定某个列的宽(支持12列网格)。每行固定列数。
    • 底层是 flex: 0 0 x%,max-width: x%

响应式类 Responsive Class

自动布局列也能和断点搭配使用,在不同断点下,进行不同的列布局,比如大屏列多一点,小屏列少一点。而不是固定死不同屏幕宽度的列数一样,导致小屏的时候列堆在一起看不清。

5个断点(Breakpoints):
none(xs) : <576px 、sm : >=576px、 md : >=768px、 lg : >=992、 xl : >=1200px

响应式列布局的类:

  1. 实现:flex-grow: 1,max-width: 100%
  • col-sm : 默认 width:100%,当屏幕>=576px该类启用(flexbox布局)
  • col-md: 默认 width:100%,当屏幕>=768px该类启用(flexbox布局)
  • col-lg : 默认 width:100%,当屏幕>=992px该类启用(flexbox布局)
  • col-xl : 默认 width:100%,当屏幕>=1200px该类启用(flexbox布局)
  1. 实现:flex: 0 0 x%
  • col-sm-{num} : 默认 width:100%,当屏幕>=576px该类启用 (支持12列网格)
  • col-md-{num} : 默认 width:100%,当屏幕>=768px该类启用 (支持12列网格)
  • col-lg-{num} : 默认 width:100%,当屏幕>=992px该类启用 (支持12列网格)
  • col-xl-{num} : 默认 width:100%,当屏幕>=1200px该类启用 (支持12列网格)

在xl屏幕显示6列,在lg屏幕显示4列,在md屏幕显示3列,在sm屏幕显示2列,特小屏(none)显示1列

<div class="container"><div class="row"><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">2</div><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">3</div><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">4</div><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">5</div><div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">6</div></div>
</div>

响应式工具类-Display

当我们在开发响应式页面时,可能会有这样的需求:某个功能在PC端可见,但是在移动端不可见。
Bootstrap提供的响应式工具类(display),给元素添加 display 类可按断点显示和隐藏元素。

隐藏元素:.d-[断点-]-none
显示元素:.d-[断点-]-block

类不添加断点,就是一直隐藏元素或显示元素。

举个栗子:

  1. 某个元素只在lg(>=992px) 和 xl 屏显示;
  • 注意别忘了,元素默认都是显示的。所以要先全部隐藏,再选择显示。.d-none .d-lg-block
  1. 某个元素只在lg(>=992px) 和 xl 屏隐藏;
  • .d-lg-none
  1. 某个元素只在 md(>=768px) 屏隐藏;
  • 这是在一个中间区间隐藏:.d-md-none .d-lg-block

实用工具类(Utility classes)

快速浮动(Float)

  • float-left
  • float-right

文本(Text)

  • text-left、text-right、text-center
  • text-{sm、md、lg、xl}-left

边框

  • borde border-top border-left …
  • border border-primary border-success

截断文本

  • text-truncate

image.png

可访问性-辅助类

屏幕阅读器的适配(专门针对残障人士设备的适配)

  • .sr-only .sr-only 类可以对屏幕阅读器以外的设备隐藏内容,即对屏幕阅读辅助器可见。
  • .sr-only-focusable .sr-only 和 .sr-only-focusable 联合使用的话可以在元素有焦点的时候再次显示出来(例如,使用键盘导航的用户)。对于需遵循可访问性的网站来说是很有必要的。

增强可访问性的辅助类(针对残障人使用的设备的适配,同时增强语义化)

  • role=”xxx” : 定义用户界面元素的类型,作用增强Web可访问性,使残障人士可以更好的使用Web内容。
  • aria-*=”xxx”: 增强可访问性,当与role=“xxx”结合使用时,当元素的状态和属性发生变化时会触发辅助技术发出通知,并将信息传达给用户。

Bootstrap组件

参考文档的例子进行组装就行。
注意:组件需要使用到js,所以别忘了引入 bootstrap 的 js 库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1475202.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

WAIC2024 上海 | Gooxi 全面展示智算新成果,加速人工智能落地应用

浦江之畔&#xff0c;大咖云集&#xff1b;智能浪潮&#xff0c;奔涌不息。7月4日&#xff0c;被誉为人工智能界风向标的世界人工智能大会暨人工智能全球治理高级别会议在上海盛大召开&#xff0c;Gooxi此次携最新AI服务器以及解决方案参与&#xff0c;以算为擎赋能新质生产力&…

花朵短视频:四川江兴川丰科技有限公司

花朵短视频&#xff1a;绽放于屏幕间的自然诗篇 在快节奏的现代生活中&#xff0c;我们常常渴望一抹清新与宁静&#xff0c;以慰藉心灵的疲惫。而花朵短视频&#xff0c;就像是大自然精心编织的一首首无声诗篇&#xff0c;四川江兴川丰科技有限公司通过手机屏幕的方寸之间&…

vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端

参数提取前的写法&#xff0c;此写法值为空的时候也会传空字段给后端 会把无值的空字段传给后端 修改后的写法&#xff0c;不会把没有值的字段传给后端 // 列表和导出需要传给后端的公共参数&#xff08;加 || undefined即可过滤空字段&#xff09; const getCurentParam () …

举例说明深拷贝和浅拷贝

概述 简单描述一下对象的实例化过程。 创建对象的时候&#xff0c;或者说在实例化对象的时候 Person 类有年龄和学生类 int age 18; Student stu1 new Student(); 比如此时创建一个 age 对象&#xff0c;一个Student 对象&#xff0c;在虚拟机中&#xff0c;会在堆中开一…

基于mmap的读写工具封装案例

文章目录 注意事项C封装示例添加构造函数重载以支持追加模式支持文件大小动态变化异常安全性和资源泄漏预防提供更高级的数据访问接口示例代码改进 在很多高性能应用中&#xff0c;直接使用内存映射文件&#xff08;mmap&#xff09;进行文件的读写操作可以显著提高效率&#x…

工业4.0视角下:PLC转OPC UA网关的作用

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;是常见的控制设备&#xff0c;而OPC UA&#xff08;开放型工业自动化统一架构&#xff09;协议则是一种现代化的通信协议&#xff0c;用在工厂自动化系统中实现设备之间的数据交换和通信。PLC转OPC U…

极品AI大模型,抓紧收藏!整合包!

近期&#xff0c;科技巨头谷歌终于发布了1个月前在I/O开发者大会上预告过的Gemma 2大模型。据谷歌介绍&#xff0c;与第1代Gemma模型相比&#xff0c;新模型拥有更优的性能&#xff0c;推理效率也更高。我当然是&#xff0c;“无所谓&#xff0c;我会出手.jpg”&#xff0c;给大…

主数据深度剖析与实际应用

主数据深度剖析与实际应用 想象一下,你正在经营一家跨国连锁咖啡店。每天,全球数千家门店都在使用你的品牌,制作相同的饮品,为客户提供服务。但是,你突然发现一个问题:纽约的"拿铁"和东京的"拿铁"配方似乎不太一样。更糟糕的是,你的线上菜单和实体店菜单显…

最简单的浏览器插件启用github双因素身份验证 (2FA)方法

在github贡献一定的代码量后&#xff0c;github会要求启用双因素身份验证&#xff0c;否则登录会受到影响。一般有短信验证&#xff0c;app扫码验证&#xff0c;这里推荐一种最简单的方式&#xff0c;用浏览器插件验证。 首先&#xff0c;在edge浏览器的微软插件商店&#xff0…

人工智能赋能智慧园区,构建未来城市的科技典范

智慧工地视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

【免费资料】IEEE33节点系统参数及拓扑图visio

主要内容 对于初学配电网的同学&#xff0c;最经典的系统即是33节点配电网系统&#xff0c;在各个研究文献中出现频次最高的也是这个系统&#xff0c;为了让大家更好了解33节点系统参数&#xff0c;本次整理了系统节点、支路参数excel以及33节点网络拓扑图visio&#xff0c…

20240708 每日AI必读资讯

&#x1f916;破解ChatGPT惊人耗电&#xff01;DeepMind新算法训练提效13倍&#xff0c;能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择&#xff08;JEST&#xff09;&#xff0c;大大减少了所需的计算资源和时间。 - JE…

探索企业信用巅峰:3A企业认证的魅力与价值

在现代商业环境中&#xff0c;企业的信用和信誉是其发展的核心要素之一。3A企业认证作为信用评级的最高等级&#xff0c;正在吸引越来越多企业的关注。究竟什么是3A企业认证&#xff1f;它为什么对企业如此重要&#xff1f;本文将深入探讨3A企业认证的独特魅力和巨大价值。 3A企…

Oracle AWR报告快速分析工具

一、背景 详细大家都遇到过需要分析Oracle AWR报告的场景&#xff0c;分析AWR对于专业DBA不是什么问题&#xff0c;但是对于一些业务后台研发确实有些困难&#xff0c;很多业务研发人员看的就是条目太多&#xff0c;无从下手。 不过最近我在使用墨天轮浏览国产信创数据库时&am…

面试题 07. 重建二叉树

重建二叉树 题目描述题解原理代码 题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 题解 原理 代码 TreeNode* build_tree(vector<int> preorder, vector<i…

2.贪心算法.基础

2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列2.1.思路二&#xff1a;动态规划法 3.最大子序和4.买股票的最佳时机24.1.思路二&#xff1a;动态规划法4.2.买股票的最佳时机 5.跳跃游戏5.1.跳跃游戏2 6.K次取反后最大化的数组和7.加油站8.分发糖果 总结 基础知识 什么是贪…

(三)前端javascript中的数据结构之链表上

在js中&#xff0c;没有为我们提供原生的数据结构支持的&#xff0c;但是在java中是有提供的。所以需要我们去模拟这种结构实现。 链表中最关键的一个元素&#xff0c;就是头节点&#xff0c;头节点不存储数据&#xff0c;指向第一个节点链表中几乎所有的操作都要从头结点开始。…

安全防御(防火墙)

第二天&#xff1a; 1.恶意程序---一般会具有一下多个或则全部特点 1.非法性&#xff1a;你未经授权它自动运行或者自动下载的&#xff0c;这都属于非法的。那恶意程序一般它会具有这种特点&#xff0c; 2.隐蔽性&#xff1a;一般隐藏的会比较深&#xff0c;目的就是为了防止…

Proxifier代理的其他妙用方法(内网渗透、反溯源、小程序公众号)

目录 配置说明 1. 通过Proxifier进行内网渗透 2. 通过Proxifier将VM虚拟机代理 3. 通过Proxifier进行小程序抓包 4. 补充 文章截取处 配置说明 配置其他的之前,要新增一个代理规则,如下: 127.0.0.1; ::1 让它 Direct (直接连接,即不走任何代理)即可 说明: ::1是I…

下一代 CSS 框架:Mojo CSS

前言 Tailwind CSS 推出即受到广大开发者的欢迎&#xff0c;当前 Github star 数已达 77.8k。它是一个功能类优先&#xff08;utility-first&#xff09;的 CSS 框架&#xff0c;它提供了一系列功能类&#xff0c;让开发者可以在 HTML 中通过组合这些功能类&#xff08;原子类…