flex杂谈-解决 Flex 子元素居中,溢出滚动后被裁切的问题
一. 需求
为开发一个空状态通用组件,需要将所有内容水平垂直居中,还需要横向纵向排列,故选择flex布局。
- 组件内容分为三部分,图片、文字、其他(插槽)
- 默认状态,组件排列方式为纵向,图片307*145,所有内容水平垂直居中。
- 容器宽高任一小于330px,假设宽大于高组件排列方式变为横向,图片大小变为70px;否则维持默认。
- 容器宽高任一小于120px,组件只显示文字和其他。
二. 设计
- 组件最外层为自适应宽高,完全由内容撑开。
- 开放属性:
1.类别:默认、横向、纵向、只有文字
2.内置图片高度
3.内置图片选择
4.文字替换
三. 问题及解决方案
问题:当组件内容宽高大于组件设置的宽高,会导致内容显示不完整,Flex 子元素居中,溢出滚动后被裁切的问题。
个人解决方案:使用两层flex,外层只设置align-items: center;,内层设置align-items: center;justify-content: center;flex-shrink: 0;居中和不让内容缩放,重点设置margin: auto;设置居中,消除flex影响。
四. demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex容错</title>
</head>
<style>
.warp {
overflow: auto;
width: 100%;
height: 100%;
border: 1px solid black;
}
.flex1 {
width: 100%;
height: 100%;
display: flex;
align-items: center;
}
.flex2 {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin: auto;
flex-direction: column;
}
.clear {
flex-shrink: 0;
}
.image {
border: 1px solid black;
}
.text {
border: 1px solid black;
}
.other {
border: 1px solid black;
}
</style>
<body>
<h2>消除flex居中后,子元素内容显示不完整 </h2>
<div class="warp">
<div class="flex1">
<div class="flex2">
<div class="clear">
<div class="image"><img src="http://www.baidu.com/img/flexible/logo/pc/result.png" alt=""></div>
</div>
<div class="clear">
<div class="text">提示文字</div>
</div>
<div class="clear">
<div class="other">其他</div>
</div>
</div>
</div>
</div>
</body>
</html>
五. 空组件代码
本文来自博客园,作者:暗鸦08,转载请注明原文链接:https://www.cnblogs.com/DarkCrow/p/15826829.html

浙公网安备 33010602011771号