为什么Bootstrap要默认12列

本文探讨了Bootstrap从16列改为12列网格的原因。最初选择16列是为了设计和开发的便利,但发现12列或24列能提供更灵活的布局选项,特别是对于常见的三列布局需求。

为什么Bootstrap要默认12列

今天被问了一个问题:”有没有想过为什么Bootstrap要默认是12列?“
呃,好吧,用了Bootstrap一段时间,的确没想过为什么要默认是12列,隐隐约约觉得是因为布局比较方便,常见的分2块,3块,4块,都可以方便分完。

既然有假设,那还是要求证一下。

谷歌上一阵搜索。

Contrary to the question’s parenthetical, Bootstrap was always at 940px wide, and not 960px, even with the original 16 columns. With the switch to 12 columns in Bootstrap 2, we wanted to simplify the overall grid (16 columns is right on the edge of enough granularity) and make it easier to get three columns.

大致意思就是原来是16列的,后来改成了12列,是为了更容易可以排出三列。
好,那么问题来了,为什么之前是设计16列呢?
继续谷歌。

16-columns has long been the go-to grid for designers and developers, but we’ve noticed a shift to 12- and 24-columns to offer a more flexible layout. And they’re right for doing so—gridded layouts work best with an odd number of columns (you often see three columns, but four or six are not that popular).

这个是Bootstrap的github bug列表中2011年的一段讨论,题目是问为什么用16列代替了24列。原来16列之前还有24列。大概是说,16列是开发和设计人员的首选,但是12列或者是24列可以更灵活。其中说到就是奇数列的布局更常见,比如经常可以看到三列形式的布局。

这里的话,为什么说16列是开发和设计人员的首选,我并不清楚。但是后面说到三列布局更常见,的确是这样,比如优快云的首页就是个三列形式的布局。用16列想分3:1或者3:2都不是很方便。

如果你有别的理解,欢迎留言讨论。

参考

http://www.quora.com/Why-did-Twitter-Bootstrap-change-their-grid-system-from-16-columns-to-12-960px-to-940px
http://www.quora.com/Why-does-Twitter-Bootstrap-3-use-a-12-column-grid-system-by-default
https://github.com/twbs/bootstrap/issues/93

<think>嗯,用户问的是为什么需要bootstrap配置,结合之前的对话历史和提供的参考资料,需要特别注意区分两个概念:前端Bootstrap框架和Spring Boot中的bootstrap配置文件。 用户引用的资料[1][3][4][5]都在说前端Bootstrap框架,但用户实际想问的是Spring Boot里的bootstrap配置,这点从用户前一个问题能明显看出来。用户可能混淆了这两个同名同物的概念,需要明确区分。 在Spring Cloud的语境下,bootstrap配置的核心价值在于它的加载时机和可覆盖性。它比application配置更早加载,适合放那些没有就无法连接远程配置中心的参数,比如配置中心地址本身。如果这些参数放在application里,应用启动时还没加载到这些配置,就会导致连接失败。 另外注意到用户引用的资料[2]提到Cloud Bootstrap依赖,这正好验证了Spring Boot 1.x和2.x的差异。在Spring Boot 2.4之后需要显式引入spring-cloud-starter-bootstrap包才能启用这个功能。 用户可能还隐含想知道使用场景的区别。可以举个具体例子:比如配置中心的地址必须放在bootstrap里,而业务数据库连接可以放在application里。这样前者会被远程配置覆盖,后者可以动态更新。 需要特别提醒的是,纯Spring Boot项目默认加载bootstrap配置,这点容易被忽视。很多开发者遇到配置生效的问题就是因为没引入cloud starter依赖。 最后考虑到用户连续问配置优先级的问题,可能是在搭建微服务架构时遇到了实际困难。或许可以建议用户如果使用Spring Cloud Alibaba,Nacos的配置地址必须写在bootstrap里这个具体场景。</think>在 Spring Boot/Cloud 环境中,**bootstrap 配置**的存在主要解决两个核心问题: ### 一、为什么需要 bootstrap 配置? 1. **优先加载系统关键参数** `bootstrap.yml` 由 **父 ApplicationContext** 加载,**早于** `application.yml`(子上下文)。这种机制确保在应用启动的最初阶段就能读取到**生存依赖级配置**(例如配置中心地址、注册中心地址、加解密密钥等)[^2]。 *示例场景*:若配置中心地址放在 `application.yml` 中,应用启动时因未加载该配置而无法连接配置中心,导致后续流程崩溃。 2. **保护核心配置被覆盖** `bootstrap.yml` 中的配置通常**允许被远程配置中心覆盖**(如 Nacos/Config Server),而 `application.yml` 中的业务参数(如数据库连接)可被远程配置动态修改[^2]。 *示例对比*: ```yaml # bootstrap.yml → 可覆盖 spring: cloud: nacos: config: server-addr: 192.168.1.100:8848 # 配置中心地址(必须优先固定) ``` ```yaml # application.yml → 可被覆盖 spring: datasource: url: jdbc:mysql://remote-db:3306/app # 允许远程修改 ``` 3. **支持远程配置的引导** 当应用依赖**远程配置中心**(如 Spring Cloud Config)时,`bootstrap.yml` 提供连接配置中心的必要参数(地址、认证信息),使应用能**在启动初期拉取远程配置**,再结合本地 `application.yml` 合并成完整配置[^2]。 ### 二、bootstrap 配置的典型使用场景 | 场景 | 配置示例 (bootstrap.yml) | 必要性说明 | |---------------------------|--------------------------------------|------------------------------| | 连接配置中心 | `spring.cloud.config.uri=http://config-server` | 必须先知道地址才能拉取远程配置 | | 注册中心地址 | `spring.cloud.nacos.discovery.server-addr=...` | 服务注册依赖此地址 | | 敏感信息加解密密钥 | `encrypt.key=my-secret-key` | 密钥必须在业务逻辑前初始化 | | 跨服务共享的全局参数 | `global.feature.enabled=true` | 避免被业务配置意外覆盖 | ### 三、与 application 配置的关系 ```mermaid graph LR A[启动阶段] --> B[加载 bootstrap.yml] B --> C[连接配置中心/注册中心] C --> D[拉取远程配置] D --> E[加载 application.yml] E --> F[合并所有配置启动应用] ``` - **bootstrap 是 "引导者"**:确保基础设施(配置中心、注册中心)可用 - **application 是 "执行者"**:定义业务行为(端口、数据库、业务开关) > ⚠️ **注意**:在纯 Spring Boot 项目(无 Spring Cloud)中,`bootstrap.yml` **会生效**,需额外引入依赖: > ```xml > <dependency> > <groupId>org.springframework.cloud</groupId> > <artifactId>spring-cloud-starter-bootstrap</artifactId> > </dependency> > ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值