详解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>
相关推荐
小白学习日记9 分钟前
【复习】HTML常用标签<table>
前端·html
丁总学Java1 小时前
微信小程序-npm支持-如何使用npm包
前端·微信小程序·npm·node.js
yanlele1 小时前
前瞻 - 盘点 ES2025 已经定稿的语法规范
前端·javascript·代码规范
懒羊羊大王呀1 小时前
CSS——属性值计算
前端·css
xgq1 小时前
使用File System Access API 直接读写本地文件
前端·javascript·面试
永远不打烊1 小时前
librtmp 原生API做直播推流
前端
无咎.lsy1 小时前
vue之vuex的使用及举例
前端·javascript·vue.js
fishmemory7sec2 小时前
Electron 主进程与渲染进程、预加载preload.js
前端·javascript·electron
fishmemory7sec2 小时前
Electron 使⽤ electron-builder 打包应用
前端·javascript·electron
豆豆2 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建