让人又爱又恨得inline-block

本文探讨了网页布局技术的发展,从表格布局到div+css的浮动布局,并介绍了内联块布局的优势及其如何克服浮动布局的局限性。此外,还讨论了使用内联块布局时可能出现的间距问题及其解决方案。

从页面的发展历程俩看我们是经过了 表格布局->表格+css->div+css的浮动布局->div+css的内联块布局
div+css的浮动布局

div+css的浮动布局之所以流行多年也是有原因的:

  • 更快的网页布局
  • 搜索引擎更加友好
  • 更好的重构性
    不过也存在一些问题:
  • 浮动元素导致其上级父盒子的“高度塌陷”,也就不能如正常文档结构所体现的那样自然包裹其下级元素;
  • 不及时清理浮动可能导致一些布局错位;
  • 在ie6,ie7下有许多著名的bug;

inline-block布局:一种更优的布局技术
inline-block布局:一种全新的web页面布局解决方案,其既可以充分发挥div+css浮动布局的优点,又可克服浮动盒子所带来的缺点。

  1. 盒子跟外界(其兄弟元素)表现为内联(inline)模式,即可以跟其兄弟元素自然并排放置(类似img标签),但盒子作为整体,又表现为块模式,即该盒子本身不能“自动换行显示”,可以设定宽高。
  2. 实际上,从整体表现上来说,inline-block盒子的表现非常类似“img”元素,即多个img可以在一行中出现,但一个img本身是不会“中间折行”的(对比:span和a标签碰到了行尾都会自动折行)。只不过img作为图片显示元素,其“内部”不能放其他内容了,而inline-block盒子却是我们最常规的可任意放置其他内容的一个“容器”。

    要用inline-block布局会存在一个4px左右的的间隙
    下面总结了几条去除inline元素和inline-block元素去除间距的方法:

1、可以在html中直接把元素写在一行上或把闭合标签和第二个开始标签写在一行或两行间添加注释或直接去掉闭合标签但最后一个不能去掉。
2、设置margin-right为负值,但要考虑上下文的字体和文字大小。
3、先设定子元素字体,再设置父元素font-size:0px;////chrome中:-webkit-text-size-adjust:none;
4、设置父元素letter-spacing或word-spacing为负值,要考虑字体,子元素有文字也要注意设置letter-spacing或word-spacing的值。
5.float:left;


题外话:Span或Div设置“display:inline-block形式的中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法是给span设置vertical-align:middle;

### display: inline-block `display: inline-block` 用于创建一个行内块级元素。该元素的行为类似于行内元素,但它内部的内容以块级元素的方式进行布局,这意味着可以为其设置宽度、高度、内边距和外边距,并且这些属性会生效。同时,该元素不会强制换行,因此它可以与相邻的行内元素或文本在同一行内显示。这种显示方式在需要对元素进行精确控制的同时又希望它能与其他内容在同一行展示时非常有用 [^2]。 ### display: inline-flex `display: inline-flex` 使元素成为一个弹性盒子容器(flex container),并且该容器的外层显示类型为“行内”(inline-level)。这表示该容器可以像文本或图片那样只占据自身内容所需的空间,并且可以和相邻的行内元素在一行内并排出现。与 `display: flex` 不同的是,`inline-flex` 容器不会独占一行,而是根据其内容的大小进行扩展 [^1]。 ### 主要区别 1. **布局模式**: - `display: inline-block` 的内部布局仍然是传统的盒模型布局,可以设置宽高,但不会自动调整子元素的排列方式 。 - `display: inline-flex` 触发 Flexbox 布局模型,其子元素会根据 Flexbox 规则自动排列,支持灵活的对齐、分布空间等功能 。 2. **对子元素的影响**: - `display: inline-block` 不影响其子元素的布局方式,子元素仍然按照传统的块级或行内元素进行布局。 - `display: inline-flex` 会将其直接子元素转换为 Flex 项目(flex items),这些子元素会受到 Flexbox 相关属性(如 `justify-content`、`align-items` 等)的控制 。 3. **适用场景**: - `display: inline-block` 更适合简单的行内布局需求,尤其是需要对宽高进行控制的场景。 - `display: inline-flex` 更适合需要高度灵活的布局场景,例如水平或垂直对齐多个元素、自动分配空间等。 ### 示例代码 #### `display: inline-block` 示例 ```html <div style="display: inline-block; width: 100px; height: 50px; background-color: lightblue; margin: 5px;"> inline-block </div> <span style="display: inline-block; width: 100px; height: 50px; background-color: lightgreen; margin: 5px;"> Another inline-block </span> ``` #### `display: inline-flex` 示例 ```html <div style="display: inline-flex; align-items: center; background-color: lightblue; padding: 10px; margin: 5px;"> <div style="margin: 5px;">Item 1</div> <div style="margin: 5px;">Item 2</div> </div> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值