Little-Gee / blog

15 stars 11 forks source link

flex居中,子元素overflow时无法滚动到顶部和左侧 #13

Open Little-Gee opened 4 years ago

Little-Gee commented 4 years ago
<div class="wrap">
    <div class="box">
        <div>第一行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第二行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第三行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第四行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第五行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第六行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第七行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        <div>第八行啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
    </div>
</div>

<style>
html,
body {
    height: 100%;
}
.wrap {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
    overflow: auto;
}
.box {
    flex-shrink: 0;
    width: 500px;
    height: 500px;
    background: red;
}
.box div {
    height: 50px;
    background: skyblue;
}
</style>

本意是让子元素居中,可是当子元素超出宽度时,滚动条无法滚动到顶部和左侧

img

解决方案:

justify-content: centeralign-items: center 改成 margin: auto 的形式即可

如果要兼容ie10,那么设置flex的元素还需要添加 align-items: flex-start(前缀和转换什么的自己弄)

参考:

Can't scroll to top of flex item that is overflowing container