从基本概念上区别block和inline以及block、inline和inline-block实例用法

从基本概念上区别block和inline

转自:http://kb.cnblogs.com/page/41699/

在讲样式表开发管理之前,我想插播一个小知识。前几天看web标准设计组里,看到龍佑康同学问到关于 block 和 inline 的区别。记得以前也经常会有人问这样的问题,国内的论坛也好,国外的论坛也好,似乎大家都会比较疑惑这两者究竟是用来干什么的。想想其实好多人都会在这里犯一些比较常见错误,所以干脆就开一篇文章专门讲讲 block 和 inline 吧。

- 讲表现之前先要讲概念

这里我要强调一下,概念在前端开发中是很重要的啦~

可能很多人都觉得,随便搞个样式,左摆摆右弄弄,能用就行了,但是实际上,很多情况都会有一些非常棘手的状况。对于这些状况,你需要有应对。应对的方法取决于很多因素,其中一个是灵感,还有一个就是对概念深入的理解了。

这里,我们要明确的概念是——什么是 block, 而什么又是 inline 呢?

其实,金光闪闪bling bling的规范里,在三个完全不同的地方提到了block和inline的概念。或许这个就是为什么这么多人都会感到confused 的原因吧=v=

- Block-level Elements VS Inline Elements

第一处讲到block和inline概念的地方是在 HTML 的规范中。确切的说应该是 block-level elements (块级元素)inline elements (内联元素):

所有允许被 BODY 元素包含的元素,要么是块级的;要么是内联的;要么既可以算作块级的,也可以算作内联的。但是绝对不存在一个能被BODY包含,但即非块级,又非内联的元素。

常见的块级元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等等。

常见的内联元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR 等等。

另外,SCRIPT, OBJECT, MAP, BUTTON, DEL, INS 这些元素,既可以作为块级元素,也可以作为内联元素。

 

那么块级元素和内联元素具体有什么区别呢?具体表现在以下几个方面:
  • 一般来说块级元素可以包含块级元素和内联元素;但内联元素只能包含内联元素。要注意的是,每个特定的元素,能包含的元素也是特定的,所以具体到个别元素上,这条规律是不适用的

    比如 P 元素,只能包含内联元素,而不能包含块级元素。

       1: <!-- 这样做是错误的 -->
       2: <p><div>一段文字</div></p>
       3:  
       4: <!-- 这样才是王道 b=v= -->
       5: <p><span>一段文字</span></p>
  • 另一个区别是在显示上。块级元素通常被现实为独立的一块,前后都会和换一行;内联元素则前后不会产生换行,一系列内联元素都在一行内显示。但是,最终决定页面显示的是样式表,而非元素本身。这条规则的制定,估计多半是为了让那些先于规范出现的浏览器能自圆其说而已

    比如我们知道,TABLE 元素的默认显示布局其实是用一套独特的 display: table 规则;而 BR 元素,根本本身就是个换行;哪怕一个DIV,都能用样式表直接指定它 display: inline,所以这条规则也根本等于没用。

  • 那么本质的区别呢?其实最本质的区别在于——在 Strict 的DTD下,BODY 元素只能包含块级元素,而不能包含内联元素。或许你要问,不是说BODY包含的元素不是块级就是内联么?怎么没有内联了?很简单——因为在Transitional 的DTD里,BODY也是可以包含内联元素的

    大家来看具体例子:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Block-Level vs Inline Demo</title>
    </head>
     
    <body>
     
    <!-- 这样做是错的 -->
    <img src="/SomeImage.png" title="an image" alt="an image" />
     
    <!-- 一定要这样做才可以哟 -->
    <p><img src="/SomeImage.png" title="an image" alt="an image" /></p>
     
    </body>
    </html>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Block-Level vs Inline Demo</title>
    </head>
     
    <body>
     
    <!-- 换了个DTD就都OK了 -->
    <img src="/SomeImage.png" title="an image" alt="an image" />
    <p><img src="/SomeImage.png" title="an image" alt="an image" /></p>
     
    </body>
    </html>

- Block Box VS Inline Box

大家应该对CSS的盒式模型有些了解了吧。网页上内容的布局,都是靠controlling box来实现的。

在CSS2.1的规范里,Controlling box 分三类——block box, inline box, 和至今都没怎么被广泛支持的run-in box。这就是规范中第二处提到block 和inline 的地方。网页上的内容,不论是不是有标签包围,或者设定了何种显示方式,最终都会被计算成一个 controlling box,并应用布局规则。

好在这个过程对于前端开发来说是透明的,大家可以不用去考虑,而只要考虑这两种盒的区别就行了

  • 在普通布局中,block box 是从上至下,一个隔一个的布局的;inline box 则是从左至右(也可能因为设置了direction而从右到左,或者从上到下)首尾相接,不间断的布局的。
  • inline box 不响应垂直margin, width, height, max/min width/height 等属性声明;block box 则可以响应这些属性。

常用的基本上就这样了。

- display: block VS display: inline

最后一个有提到block 和inline 的地方就是这里了。和其他两个地方不同,block 和inline 并不是display 这个属性的唯一取值。CSS2.1规范中,display 属性的取值可以为以下的任何一个:inline, block, list-item, run-in, inline-block, table, inline-table, table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, table-caption, none, inherit。

在通常情况下,display: block 能让元素生成一个block box, 而display: inline 会生成inline box。

以上内容转自:

 

 

block、inline和inline-block实例用法区别

转自:http://myqianduan.diandian.com/css/1208110900

我们用firbug浏览别人网站时会发现设计者会在很多地方使用inline-block。我们都知道inline是声明div是内联对象,block是声明块对象,那么inline-block是什么意思,即内联又成块?接下来做个测试,让我们了解一下三者的区别和作用吧:

 
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< title >inline、block、inline-block的区别</ title >
< style >
.a{display:inline; width:100px; height:100px; padding:5px; background-color:#F00;}
.b{display:block; width:100px; height:100px; padding:5px;background-color:#0f0;}
.c{display:inline-block; width:100px;height:100px; padding:5px;background-color:#00f;}
</ style >
</ head >
< body >
 
< span class = "a" >
inline
</ span >inline
 
< span class = "b" >
block
</ span >block
 
< span class = "c" >
inline-block
</ span >inline-block
 
</ body >
</ html >


我们发现内联对象inline给它设置height和width是没有用的,致使它变宽变大的原因是内部元素的宽高+padding。观察inline对象的前后元素我们会发现Inline不单独占一行,其它元素会紧跟其后。

块对象block是可以设置宽高的,但是它的实际宽高是本身宽高+padding。观察block的前后元素我们会发现block要单独占一行。

当看到这里的时候我们就会想,如果我们即需要div有宽高,又不希望它独占一行怎么办?

这个时候我们就需要使用inline-block了,再观察一下上图,我们会发现inline-block即具有block的宽高特性又具有inline的同行元素特性。

 

最后提醒一下,IE6/7下padding对inline的宽高是对其没影响的。看下图:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以通过以下步骤使用rook-ceph的inline模式: 1. 在rook-ceph集群中创建一个存储池。 2. 在存储池中创建一个存储桶。 3. 在存储桶中上传您的数据。 4. 在应用程序中使用rook-ceph的inline模式来访问您的数据。 请注意,使用rook-ceph的inline模式需要一些额外的配置和设置,具体取决于您的应用程序和使用情况。建议您查阅rook-ceph的官方文档以获取更详细的信息和指导。 ### 回答2: 在使用rook-ceph的inline模式时,首先需要安装和配置rook-ceph的集群。确保你已经部署了rook-ceph集群,并且处于正常运行状态。 使用inline模式可以将ceph的存储资源以块设备的形式直接暴露给容器,容器可以直接使用这些块设备来存储数据。下面是使用rook-ceph的inline模式的步骤: 1. 创建一个新的命名空间,并将其设置为活动命名空间。 ```shell kubectl create namespace my-namespace kubectl config set-context --current --namespace=my-namespace ``` 2. 创建一个ceph block pool。 ```shell kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/mon/pool.yaml ``` 3. 创建一个storage class,并使用inline模式指定rook-ceph的存储类。 ```shell kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml ``` 4. 创建一个pvc(Persistent Volume Claim)来申请存储资源。 ```shell kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/csi/rbd/pvc.yaml ``` 5. 创建一个pod,并将上一步骤中创建的pvc挂载到容器中。 ```shell kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/csi/rbd/pod-inline.yaml ``` 通过这些步骤,你就可以将rook-ceph的存储资源以块设备的形式直接使用在容器中了。请确保你已经正确安装和配置了rook-ceph集群,并正确创建了相关的存储资源和配置文件。 ### 回答3: Rook是一个用于在Kubernetes集群中部署、管理和运行存储系统的工具。它可以与Ceph集群集成,提供了许多不同的存储选项。其中一种选项是使用Rook-Ceph的inline模式。 使用Rook-Ceph的inline模式可以让应用程序更方便地访问和使用存储资源。以下是使用该模式的一些步骤和注意事项: 1. 部署Rook-Ceph:首先,在Kubernetes集群中使用Rook部署Ceph集群。可以按照Rook文档提供的指南进行操作,确保Rook和Ceph成功运行。 2. 创建存储类:使用kubectl命令创建一个存储类,以定义Ceph存储资源访问的规则。可以在存储类中指定inline模式以启用该功能。 3. 配置卷模板:在需要使用存储资源的应用程序配置文件中,添加一个卷模板,并引用上一步中创建的存储类。在卷模板中,可以定义访问模式、大小和其他属性。 4. 应用程序配置:编辑应用程序的配置文件,将卷模板应用于应用程序的存储需求。可以指定挂载点、卷的名称和其他参数。 使用Rook-Ceph的inline模式还需要注意一些事项: - 内联模式使用单个Ceph卷为多个Pod服务多个实例,因此需要小心管理和分配存储资源以避免性能瓶颈。 - 在使用内联模式时,应该注意保护数据的一致性和完整性。可以通过备份和恢复机制来保护数据,以确保在故障发生时能够快速恢复。 - 在创建存储类和配置卷模板时,也应考虑到应用程序的性能需求和数据访问模式。使用适当的存储类型、数据复制和网络设置等关键参数配置来优化性能。 总之,使用Rook-Ceph的inline模式可以让应用程序更方便地访问和使用Ceph存储资源。但是要注意数据的一致性和完整性,并根据实际需求进行配置和管理,以获得最佳性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值