当前位置:首页 > 技术分析 > 正文内容

使用Flex布局的几个小技巧(flex的几个常用布局)

ruisui885个月前 (01-22)技术分析21

总结了工作中遇到的flex开发小技巧,以后需要可以拿来用。

1. 自适应内容宽度

flex-direction设置为column时,子元素默认会充满整行。如果希望子元素根据内容自适应宽度,可以将align-self设置为baselineflex-start

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            flex-direction: column;
            height: 200px;
            border: 1px solid #000;
        }
        .item {
            align-self: baseline; /* or flex-start */
            background-color: lightblue;
            margin: 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2 with more content</div>
        <div class="item">Item 3</div>
    </div>
</body>
</html>


2. 特殊布局的实现

利用margin: auto可以实现一些特殊的布局效果。例如,通过设置左边的包裹div免去,直接使用margin: auto来实现结构打平一层的效果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
        .inner {
            margin: auto;
            background-color: lightgreen;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="inner">Centered Content</div>
    </div>
</body>
</html>


3. 交叉轴上的位置控制

使用align-self属性可以在交叉轴(Cross Axis)上对单个元素进行位置控制。这对于需要在列布局中调整个别元素位置的情况非常有用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            height: 200px;
            border: 1px solid #000;
        }
        .item {
            flex: 1;
            background-color: lightcoral;
            margin: 5px;
        }
        .item-center {
            align-self: center; /* Center this item vertically */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item item-center">Centered Item</div>
        <div class="item">Item 3</div>
    </div>
</body>
</html>


4. 等宽不同高度的列

通过设置flex: 1;给所有项目分配等比例宽度,同时允许它们根据内容自动调整高度。这样可以创建出等宽但不同高度的列布局。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            border: 1px solid #000;
        }
        .item {
            flex: 1;
            background-color: lightseagreen;
            margin: 5px;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Short content</div>
        <div class="item">This is a bit longer content that will make the height of this item taller than others.</div>
        <div class="item">Content</div>
    </div>
</body>
</html>


5. 圣杯布局

利用Flexbox可以轻松实现圣杯布局(两侧固定宽度栏,中间自适应内容区域)。关键在于设置侧边栏的order属性,以及主内容区域的flex-grow: 1;来填充剩余空间。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            height: 100vh;
        }
        .sidebar {
            width: 200px;
            background-color: lightblue;
        }
        .main {
            flex-grow: 1;
            background-color: lightgreen;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="sidebar">Sidebar 1</div>
        <div class="main">Main Content</div>
        <div class="sidebar">Sidebar 2</div>
    </div>
</body>
</html>


6. 自适应间距

利用gap属性(CSS Grid布局中的概念)或在Flex项目之间插入伪元素来实现均匀间距。这有助于保持布局的整洁。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            gap: 10px; /* Adds space between items */
            border: 1px solid #000;
        }
        .item {
            flex: 1;
            background-color: lightcoral;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
    </div>
</body>
</html>


7. 垂直居中

虽然Flexbox可以轻松实现水平和垂直居中,但初学者可能不知道如何正确设置以达到期望的效果。在容器上设置align-items: center;justify-content: center;,或仅针对垂直居中,设置align-items: center;即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            justify-content: center; /* Horizontal center */
            align-items: center; /* Vertical center */
            height: 100vh; /* Full height */
            border: 1px solid #000;
        }
        .item {
            background-color: lightpink;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Centered Content</div>
    </div>
</body>
</html>


8. 避免内容溢出

当Flex容器的内容过多时,可能会导致溢出。使用flex-wrap: wrap;可以允许Flex项目换行,结合max-widthmin-width限制项目的尺寸,可以避免内容溢出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Example</title>
    <style>
        .container {
            display: flex;
            flex-wrap: wrap; /* Allow items to wrap */
            border: 1px solid #000;
        }
        .item {
            flex: 1 1 200px; /* Grow and shrink but not less than 200px */
            background-color: lightyellow;
            margin: 5px;
            padding: 10px;
            box-sizing: border-box; /* Include padding in width calculation */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2 with more content</div>
        <div class="item">Item 3</div>
        <div class="item">Item 4</div>
        <div class="item">Item 5</div>
        <div class="item">Item 6</div>
    </div>
</body>
</html>


创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/475.html

分享给朋友:

“使用Flex布局的几个小技巧(flex的几个常用布局)” 的相关文章

jvm疯狂吃内存,到底是谁的锅?

jvm应该是每一个java程序员都需要掌握的内容,但是在没有遇到问题之前,很多都是基于理论的,唯有实战才能增加个人的知识储备。本文是从一个角度来分析是谁在狂吃内存,希望对你有所帮助。本文是易观技术人员注意到一台开发机上各个微服务进程占用内存很高,随即便展开了调查......ps:本文来源于:http...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

Vue进阶(二十六):详解router.push()

在Vue2.0路由跳转中,除了使用 <router-link> 声明式创建 a 标签来定义导航链接,还可以借助 router 的实例方法,通过编码式编写代码来实现。router.push(location)想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 hi...

三勾点餐系统java+springboot+vue3,开源系统小程序点餐系统

项目简述前台实现:用户浏览菜单、菜品分类筛选、查看菜品详情、菜品多属性、菜品加料、添加购物车、购物车结算、个人订单查询、门店自提、外卖配送、菜品打包等。后台实现:菜品管理、订单管理、会员管理、系统管理、权限管理等。 项目介绍三勾点餐系统基于java+springboot+element-plus+u...

微信开发的五大价值应用

企业形象展示微网站是企业在移动互联网时代完美展示企业及品牌形象的最佳选择,表现内容丰富、实时更新、形式多样化,保证品牌形象的有效传播!微网站带来的轻营销模式,更适应现代网站的发展模式,所以微网站的开发也具有更好的商业营销效果,其面对的受众是7亿多的微信用户,蕴含着无限的商机。将企业微网站植入微信公众...

微信开发整合APP的“应用号” 以整合支付宝为谎言

据最新的消息称,自从前天微信公开课PRO版的各种谣言后,微信的相关人士就对于这个话题澄清后也发表了微信公众号的最新发展趋势。腾讯微信事业群总裁张小龙透露,微信公众平台的出发点并不是要做成一个只是传播内容的平台,而是一个提供服务的平台。“但是,目前的服务号依然没有达到要求。所以,微信正在开发一个新的形...