粉丝提问篇之css3的多列布局与p标签结合出现的样式

简介: 粉丝提问篇之css3的多列布局与p标签结合出现的样式

前言

之前写过的css3有哪些新特性里面提到了多列布局,当时举例用的div包裹着三个p标签,结果出现的样式有点迷惑,被粉丝提问过,之前去过愉快的国庆假了,忽然想到这个问题忘了回,那就总结一篇文章吧。

解析

源代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .column-container {
        column-count: 3;
        column-gap: 20px;
        background-color: #f5f5f5;
        border: 1px solid #ddd;
        padding: 10px;
      }
    </style>
  </head>
  <body>
    <div class="column-container">
      <p>第一列的内容...</p>
      <p>第二列的内容...</p>
      <p>第三列的内容...</p>
      <!-- 更多文本内容 -->
    </div>
  </body>
</html>

效果如下:可以明显看出,第一列有个上边距,但是第二列第三列却没有,代码也没有写,为什么回出现这种效果呢?原因:大多数浏览器会给<p>标签添加默认的边距(外边距)和填充(内边距)。这个默认的样式是为了在文本段落之间创建一些空白空间,以提高文本的可读性。

在这个例子中,第一个 p 标签出现上边距的原因是 column-count 属性导致了块级元素的分割。

column-count 属性可以将一个块级容器划分为多个列,这里将 .column-container 设置为3列。

在多列布局中,不同列之间是通过块级元素的分割实现的。第一个 p 标签恰好被分到了一个新的列中,所以上面出现了分割线导致看似有了上边距。

而第二和第三个 p 标签仍在同一列内,所以不会出现分割,看起来就没有上边距。

我们看下面的例子

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .column-container {
        column-count: 3;
        column-gap: 20px;
        background-color: #f5f5f5;
        border: 1px solid #ddd;
        padding: 10px;
      }
      .column-container2{
        column-count: 3;
        column-gap: 20px;
        background-color: #f5f5f5;
        border: 1px solid #ddd;
        padding: 10px;
      }
      .column-container2 p{
       margin:0;
      }
    </style>
  </head>
  <body>;
   <h2>这里用div</h2>
    <div class="column-container">
      <div>第一列的内容...</div>
      <div>第二列的内容...</div>
      <div>第三列的内容...</div>
      <!-- 更多文本内容 -->
    </div>
    <h2>这里用p标签,设置了margin:0</h2>
    <div class="column-container2">
      <p>p第一列的内容...</p>
      <p>p第二列的内容...</p>
      <p>p第三列的内容...</p>
      <!-- 更多文本内容 -->
    </div>
  </body>
</html>


效果如下:解析:

  • 第一个将p标签替换成div,正常显示。原因是 div 和 p 标签的默认样式不同导致的。p 标签是一个块级元素,默认情况下外边距值会进行合并(margin collapsing),这导致了第一个 p 标签出现视觉上有间距的问题。而 div 作为一个通用块级容器,默认情况下的外边距是 0,不会造成外边距合并问题。
  • 第二个将p标签的margin设置为0,也能解决问题。这是因为在多列布局中,不同列之间是通过块级元素的分割实现的。当列容器分割到一个新的列时,会在新的列的顶部出现一个分割线。而默认情况下,p标签和分割线之间存在外边距合并(margin collapsing)的效果。也就是说,p标签的默认上外边距(实际上是0)和分割线的上外边距发生了合并,导致了视觉上看起来p标签有了上边距。

这说明页面中的空白间距有时并不是某个元素本身的样式导致的,而是和其他元素的关系或者渲染规则引起的。

需要根据具体情况来分析元素的空白间距的根源所在,才能很好地处理这类视觉问题。

目录
相关文章
|
3月前
|
前端开发
如何设置 CSS 盒子模型的边框样式?
CSS盒子模型的边框样式可以通过`border`属性设置,包括边框宽度、样式和颜色。例如:`border: 2px solid red;` 设置了2像素宽的红色实线边框。也可分别设置四边,如`border-top`、`border-right`等。
|
22天前
|
JavaScript 前端开发
jQuery和CSS3斑马线样式range滑块特效
jQuery和CSS3斑马线样式range滑块特效
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
50 5
|
2月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
2月前
|
前端开发 JavaScript 开发者
掌握 CSS 弹性布局(Flexbox):构建复杂页面布局的高效秘籍与实战案例
CSS弹性布局(Flexbox)是现代网页设计中构建复杂页面布局的高效工具。本文将深入浅出地介绍Flexbox的核心概念、使用技巧及实际应用案例,帮助读者快速掌握这一强大布局方法。
|
2月前
|
前端开发 JavaScript UED
|
3月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
310 1
|
2月前
|
前端开发 容器
实现CSS品字布局
【10月更文挑战第27天】
|
3月前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
85 2

热门文章

最新文章