前言

本文收录于CSS 系列文章中[1],欢迎阅读指正

CSS 布局在 Web 开发中经历了多个阶段的演变,不同的时期出现了不同的布局方法,以适应不断变化的设计需求,从表格布局,浮动布局,到弹性盒,格栅布局,每个阶段都提供了灵活、强大的布局工具,本文将介绍 css 布局相关的知识点。

表格布局

在 CSS 广泛被支持之前,许多网站使用 HTML 表格来创建页面结构。这是早期的布局方法,它使用 HTML

元素以及其行()和单元格()的组合来构建网页的结构,设计页面布局

特点不足

下面看个表格布局的例子

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Table</title>
    <style>
        /* 基本的表格样式 */
        table {
            width100%;
            border-collapse: collapse;
        }

        td,
        th {
            border1px solid #ddd;
            padding8px;
        }

        /* 用于模拟常见的布局结构 */
        header,
        footer {
            background-color#f8f9fa;
            text-align: center;
        }

        nav {
            background-color#e9ecef;
        }

        article {
            background-color#fff;
        }

        aside {
            background-color#e9ecef;
        }
    
</style>
</head>

<body>

    <table>

        
        <tr>
            <td colspan="2">
                <header>
                    <h1>网站标题</h1>
                </header>
            </td>
        </tr>

        
        <tr>
            <td colspan="2">
                <nav>
                    <ul>
                        <li><a href="#">主页</a></li>
                        <li><a href="#">资讯</a></li>
                        <li><a href="#">联系我们</a></li>
                    </ul>
                </nav>
            </td>
        </tr>

        
        <tr>
            
            <td>
                <article>
                    <h2>文章标题</h2>
                    <p>这里是文章内容...</p>
                </article>
            </td>
            
            <td width="200"> 
                <aside>
                    <h3>侧边栏标题</h3>
                    <p>侧边栏内容...</p>
                </aside>
            </td>
        </tr>

        
        <tr>
            <td colspan="2">
                <footer>
                    <p>版权信息©2024</p>
                </footer>
            </td>
        </tr>
    </table>

</body>

</html>

代码中的标签构成了整个页面的骨架。通过合并单元格()和通过的 width 属性指定宽度,这段代码创建了包含页眉、导航菜单、主内容区、侧边栏和页脚的典型页面结构。

浮动布局

浮动布局是 CSS 的一个功能,它允许开发者将元素从常规的文档流中移出,使元素向其容器的左侧或右侧“浮动”。通过使用 CSS 的 float 属性,元素可以横向排列,从而实现多列布局。在引入 和 CSS Grid 这些现代布局技术之前,浮动布局是实现复杂页面布局的主要手段之一。

特点不足

float 属性表示给标签加上浮动效果css样式,它有四个值:

clear 属性表示清除标签的浮动,也有四个值:

下面我用一个例子来展示浮动的效果

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin20px;
        }

        .container {
            border1px solid #ccc;
            padding10px;
            overflow: hidden;
        }

        .box {
            width100px;
            height100px;
            margin10px;
            padding10px;
            border1px solid #000;
            float: left;
            /* 默认左浮动 */
        }

        .btn {
            margin10px;
            padding5px;
            color: white;
            cursor: pointer;
            display: inline-block;
            background: lightcoral;
        }
    
</style>
    <title>浮动布局演示</title>
</head>

<body>
    <h2>浮动布局演示</h2>
    <p>点击按钮切换浮动效果:</p>

    <div id="leftFloatBtn" class="btn">左浮动</div>
    <div id="rightFloatBtn" class="btn">右浮动</div>
    <div id="clearFloatBtn" class="btn">清除浮动</div>

    <div class="container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <p>这是一些文本内容,用以展示在盒子浮动的时候文本是如何围绕它的。通过点击下面的按钮,你可以切换盒子的浮动效果。这段文本足够长,可以让我们看到文本如何环绕一个浮动的元素。</p>
    </div>

    <script>
        document.getElementById('leftFloatBtn').addEventListener('click'function ({
            applyFloat('left');
        });

        document.getElementById('rightFloatBtn').addEventListener('click'function ({
            applyFloat('right');
        });

        document.getElementById('clearFloatBtn').addEventListener('click'function ({
            clearFloat();
        });

        function applyFloat(direction{
            var boxes = document.querySelectorAll('.box');
            boxes.forEach(function (box{
                box.style.float = direction;
            });
        }

        function clearFloat({
            var boxes = document.querySelectorAll('.box');
            boxes.forEach(function (box{
                box.style.float = 'none';
            });
        }
    
</script>
</body>

</html>

代码创建了两个浮动的方框和一个容器。按钮可以控制方框的浮动方向或清除浮动

css样式_滚动条样式css_样式css左右元素居中

块格式化上下文(BFC)

聊到浮动(包括后面会讲到的定位),就离不开 BFC 的概念,这里做个简单的介绍:BFC 是一个独立的布局环境,它决定了页面中的元素如何对其内容进行布局,以及如何与其他元素相互作用和影响。在 BFC 中,元素的布局不受外部元素的影响,反之亦然。

怎么形成的?

元素的 float 属性为 left 或 right

设置 属性为 或 fixed

属性为 -block、table-cell、table-、flex、-flex

属性为 auto、 或

以上操作均会形成 BFC

高度塌陷

在使用浮动时当浮动的父标签没设置高度(或者高度不足以支撑浮动元素的高度)也没有其他标签时,父标签就会产生高度塌陷的效果。参考上面的代码,我们将 的 : 去除可以看到以下效果

样式css左右元素居中_css样式_滚动条样式css

1,2,3 这三个盒子都因为浮动效果脱离了文档流,可以理解为离开了父元素的文档流,并产生了 BFC 的效果,它们的布局和父元素的布局已经隔离开了。

解决方案

产生高度塌陷或许是我们不想看到的效果,如何解决浮动产生的高度塌陷?这就要使用魔法打败魔法了,我们在父元素上创建一个新的 BFC,使父子元素处于同一布局环境下,常用的解决方案也就是我上面说到的方式,给父元素增加 : ,除此之外还有以下方案:

.container::after {
    content"";
    display: table;
    clear: both;
}

定位布局

定位布局是一种使用 CSS 定位属性来摆放元素的布局方式。通过设置元素的 属性,开发者可以将元素放置到文档流中的指定位置,可以是相对于文档流中的其他元素或相对于视口。

特点不足

属性有几个不同的值,可以让开发者按照需要将元素摆放在页面上的几乎任何位置。设置定位后通过 top,,left,right 和 z-index 可以调整元素的位置和层级。

(静态定位)

这是所有元素的默认定位方式。

元素按照正常的文档流进行定位,也就是说,它们按照 HTML 中的顺序出现,并且不会受到 top,,left,right 和 z-index 属性的影响。

(相对定位)

相对于元素的原始位置进行定位。

设置了相对定位的元素可以通过 top,right, 和 left 属性从其正常位置移动。

其他元素会认为这个元素仍然处于它的静态位置,因此,它可能会覆盖其他元素或者被其他元素覆盖。

样式css左右元素居中_css样式_滚动条样式css

(绝对定位)

元素的位置相对于最近的被定位(即非 )的祖先元素进行定位。一般是和 搭配使用。

如果没有这样的祖先元素,则相对于文档的根元素(HTML 页面上的元素)定位。

和 不同的是绝对定位的元素被完全从文档流中移除,因此,它们不会影响其他元素的位置。

样式css左右元素居中_滚动条样式css_css样式

fixed(固定定位)

元素的位置相对于浏览器窗口进行定位,不随滚动条滚动。

使用此定位的元素会固定在页面的指定位置,即使滚动页面内容也不会移动。

同样地,固定定位的元素也是脱离了文档流的。

样式css左右元素居中_滚动条样式css_css样式

(粘性定位)

它是一个相对新的定位特性,它是相对定位和固定定位的结合。

元素根据文档流正常排列,直到页面滚动到达某个阈值点,元素就会在视口中"固定"在指定位置。

粘性定位依赖于 top,right,,left 等属性,当元素到达视口中的特定位置时,才会起作用。

滚动条样式css_css样式_样式css左右元素居中

总结

本篇文章主要介绍了早期开发者的常用布局方式。包括表格,浮动,定位布局,这三者各自有其特点和弊端,根据项目合理使用适合的布局方式才是本文的最终目的

以上就是文章全部内容了,感谢你看到最后,如果觉得文章不错的话,给个三连鼓励一下吧css样式,你的支持就是我创作的最大动力,谢谢!

相关代码

: 基于 js 的一些小案例或者项目 - [2]

参考文章

CSS 布局 - 学习 Web 开发 | MDN[3]

浮动 - 学习 Web 开发 | MDN[4]

定位 - 学习 Web 开发 | MDN[5]

参考资料

[1]

CSS 系列文章中:

[2]

: 基于 js 的一些小案例或者项目 - : %E7%9F%A5%E8%AF%86%E7%82%B9/%E5%B8%83%E5%B1%80

[3]

CSS 布局 - 学习 Web 开发 | MDN:

[4]

浮动 - 学习 Web 开发 | MDN:

[5]

定位 - 学习 Web 开发 | MDN:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注