详解CSS(三)及案例实现

目录

1.弹性布局

[1.1 弹性布局案例](#1.1 弹性布局案例)

[1.2flex 布局基本概念](#1.2flex 布局基本概念)

1.3常用属性

1.3.1justify-content

1.3.2align-items

2.案例实现:小广告

3.案例实现:百度热榜


1.弹性布局

弹性布局(Flex布局)是一种用于创建自适应和响应式布局的CSS布局模型。它提供了一种简单而强大的方式来排列和对齐页面中的元素,使其在不同的屏幕尺寸和设备上能够保持良好的显示效果

弹性布局的主要特点包括:

  1. 简单易用:相比传统的布局方式,弹性布局使用相对简单的属性来控制布局,减少了复杂的 CSS 代码。
  2. 响应式设计:能够自动适应不同的屏幕尺寸和设备,使布局在各种情况下都能保持良好的显示效果。
  3. 灵活的排列方式:可以通过设置主轴和交叉轴的方向,以及项目在轴上的对齐方式,实现各种不同的排列效果。
  4. 支持换行:可以控制项目在容器中是否换行,以及换行的方式。
  5. 子元素属性失效:当元素设置为弹性布局时,一些传统的 CSS 属性,如 float、clear 和 vertical-align 可能会失效。

1.1 弹性布局案例

创建一个div,内部包含三个span

html 复制代码
    <style>
        div {
            width: 100%;
            height: 150px;
            background-color:red;
        }
        span {
            background-color: green;
            width: 100px;
        }
    </style>
    <div>
        <span>111</span>
        <span>222</span>
        <span>333</span>
    </div>

此时看到的效果为:

当我们给div加上display: flex之后,效果为:
此时看到, span 有了高度, 不再是 "行内元素了"

再给 div 加上justify-content: space-around; 此时效果为:

此时可以看到这些 span 已经能够水平隔开了.

justify-content: space-around; 改为 justify-content: flex-end; 此时三个元素在右侧显示

1.2flex 布局基本概念

lex 是 flexible box 的缩写. 意思为 "弹性盒子".

任何一个 html 元素, 都可以指定为 display:flex 完成弹性布局.

flex 布局的本质是给父盒子添加 display:flex 属性, 来控制子盒子的位置和排列方式****.

基础概念 :

· 被设置为 display:flex 属性的元素, 称为 flex container

· 它的所有子元素立刻称为了该容器的成员, 称为 flex item

· flex item 可以纵向排列, 也可以横向排列, 称为 flex direction (主轴)

注意 :

当父元素设置为 display: flex 之后, 子元素的 float, clear, vertical-align 都会失效.

1.3常用属性

1.3.1justify-content

设置主轴上的子元素排列方式、使用前一定要确定好主轴方向

属性取值

代码示例:

html 复制代码
    <style>
        div {
            width: 100%;
            height: 150px;
            background-color:red;
            
            display: flex;    
        }
        span {
            background-color: green;
            width: 100px;
            height: 100px;
        }
    </style>

    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
    </div>

未指定 justify-content 时, 默认按照从左到右的方向布局.

设置 justify-content: flex-end , 此时元素都排列到右侧了.

设置 jutify-content: center , 此时元素居中排列

设置 justify-content: space-around;

平分了剩余空间.

设置 justify-content: space-between;

先两边元素贴近边缘, 再平分剩余空间.

1.3.2align-items

设置侧轴上的元素排列方式

在上面的代码中, 我们是让元素按照主轴的方向排列, 同理我们也可以指定****元素按照侧轴方向排列.

取值和 justify-content 差不多.

理解 stretch(拉伸):

是 align-content 的默认值. 如果子元素没有被显式指定高度, 那么就会填充满父元素的高度、形如:

html 复制代码
    <style>
        div {
            width: 500px;
            height: 500px;
            background-color: green;
            display: flex;
            justify-content: space-around;          
        }
        div span {
            width: 150px;
            background-color: red;
        }
    </style>

    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>

可以在div中加上align-items: center 实现垂直居中.并且在span中需要加上元素高度和宽度

注意: align-items 只能针对单行元素来实现. 如果有多行元素, 就需要使用 item-contents

2.案例实现:小广告

预期效果

测量结果:

代码示例:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Comatible" content="IE=edge"
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 308px;
            height: 209px;
            border: #d8dad8 solid 2px;
            background-color: #fcfffc;
            margin: auto;
        }
        .title {    
            height: 40px;
            border-bottom: 2px dotted #e8ebe8;
            font-size: 18px;
            padding-left: 20px;
            padding-top: 15px;
        }
      
        .item {
            font-size: 16px;
            flood-color: #898b76;
            padding-left: 25px;
            line-height: 28px;
            padding-top: 10px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="title">广告板</div>
        <div class="content">
            <div class="item">赔钱清仓甩卖,全场一律八折</div>
            <div class="item">赔钱清仓甩卖,全场一律八折</div>
            <div class="item">赔钱清仓甩卖,全场一律八折</div>
            <div class="item">赔钱清仓甩卖,全场一律八折</div>
        </div>

    </div>
</body>
</html>

3.案例实现:百度热榜

预期效果:

代码实现:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>百度热榜</title>
    <style>
        a {
            color: blue;
            text-decoration: none;
        }
        a:hover {
            text-decoration: underline;
        }
        table {
            width: 536px;
        }
        .title .col-1 {
            font-size: 20px;
            font-weight: bolder;
        }
        .col-1 {
            width: 80%;
            text-align: left;
        }
        .col-2 {
            width: 20%;
            text-align: center;
        }
        .icon {
            background-image: url(./refresh.png);
            width: 20px;
            height: 20px;
            background-size: 100% 100%;
            display: inline-block;
            vertical-align: bottom;
        }
        .content {
            font-size: 18px;
            line-height: 40px; 
        }
        .content .col-1,.content .col-2 {
            border-bottom: 2px solid #f3f3f3;
        }
        .num {
            font-size: 20px;
            color: #fffff3; 
        }
        .first {
            background-color: #f54545;
            padding-right: 8px;
        }
        .second {
            background-color: #ff8547;
            padding-right: 8px;
        }
        .third {
            background-color: #ffac38;
            padding-right: 8px;
        }
        .other {
            background-color: #8eb9f5;
            padding-right: 8px;
        }
    </style>
</head>
<body>
    <table cellspacing="0px">
        <th class="titile col-1">百度热榜</th>
        <th class="title col-2"><a href="#">换一换<span class="icon"></span></a></th>
        <tr class="content">
            <td class="col-1"><span class="num first">1</span><a href="#">黑子说话黑子说话黑子说话</a></td>
            <td class="col-2">474万</td>
        </tr>
        <tr class="content">
            <td class="col-1"><span class="second first">2</span><a href="#">黑子说话黑子说话黑子说话</a></td>
            <td class="col-2">474万</td>
        </tr>
        <tr class="content">
            <td class="col-1"><span class="third first">3</span><a href="#">黑子说话黑子说话黑子说话</a></td>
            <td class="col-2">474万</td>
        </tr>
        <tr class="content">
            <td class="col-1"><span class="other first">4</span><a href="#">黑子说话黑子说话黑子说话</a></td>
            <td class="col-2">474万</td>
        </tr>
    </table>

</body>
</html>
相关推荐
Martin -Tang35 分钟前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发36 分钟前
解锁微前端的优秀库
前端
王解1 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js
我不当帕鲁谁当帕鲁2 小时前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis
那一抹阳光多灿烂2 小时前
工程化实战内功修炼测试题
前端·javascript
放逐者-保持本心,方可放逐3 小时前
微信小程序=》基础=》常见问题=》性能总结
前端·微信小程序·小程序·前端框架
毋若成5 小时前
前端三大组件之CSS,三大选择器,游戏网页仿写
前端·css
红中马喽5 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习
Black蜡笔小新6 小时前
网页直播/点播播放器EasyPlayer.js播放器OffscreenCanvas这个特性是否需要特殊的环境和硬件支持
前端·javascript·html
秦jh_7 小时前
【Linux】多线程(概念,控制)
linux·运维·前端