Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >当flex容器中包含absolute元素时

当flex容器中包含absolute元素时

作者头像
celineWong7
发布于 2020-11-05 11:05:10
发布于 2020-11-05 11:05:10
3.7K00
代码可运行
举报
文章被收录于专栏:web前端踩坑web前端踩坑
运行总次数:0
代码可运行

我们曾经在 iphone5真机,绝对定位的兼容问题 这篇文章指出 采用的是 flex + positon:absolute 来布局时,遇到了低版本苹果机的兼容问题,而且后来还用了媒体查询的方式进行折中处理。 后来,同事反映在vivo xplay 5A 也遇到了和iphone5机型一样的兼容问题。由于vivo机型就不是很好媒体查询方式特别处理了,于是就不得不深究这个原因,并找到替代方案。

一、问题重现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .div1{
        width: 300px;
        height: 300px;
        background-color: pink;
        position: relative;
    }
    .div2 {
        width: 200px;
        height: 100px;
        background-color: green;
    }

    .div2{
        position: absolute;
    }
    .div1{
        display: flex;
        justify-content: center;
        /*justify-content: flex-end;*/
    }
</style>
<body>
    <div class="div1">
        <div class="div2"></div>
    </div>
</body>
</html>

我们设置了justify-content: center;,不同机型显示区别如下:

在PC端和iphone5以上的机型中:居中显示(正常)

在iphone5真机上的浏览器打开:偏右显示(异常)

有趣的是,我们把 justify-content: center; 改成 justify-content: flex-end; 时,它们的表现也不一致:

在PC端和iphone5以上的机型中:在容器内的最右端(正常)

在iphone5真机上的浏览器打开:跑到容器外了(异常)

当我们把绿色块改成相对定位时.div2{ position: relative; },就会发现flex布局在任何机子上都正常了。

可见,是因为 flex布局 和 绝对定位abosolute 起冲突了。

二、 问题分析

我们到技术文档查阅一下flex布局的一些说明https://www.w3.org/TR/css-flexbox-1/#abspos-items,可以看到如下一段话:

翻译过来就是:

绝对定位的元素是不参与flex布局的。

尽管文档规定如此,但我们在高版本的机型里面,却能实现两者的配合使用。也许将来这种兼容差异就不存在了,flex容器里面也可以有绝对定位元素了。

三、替代方案

问题原因是找到了,但还是得解决实际问题。

目前个人的需求是:绝对定位元素要实现水平居中,但又无法提前知道该元素的宽度。

最后在小伙伴的帮助下,找到了一种margin:auto的解决方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.div2{
        position:absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin:auto;
    }

该方法的兼容性还没有具体测试,但目前来讲,能适配手头上的所有机型(包括iphone5)。

参考文献:

flex布局中的绝对定位:嗯,完美。还给出了w3.org的技术文档说明。

在flex布局中,不要使用绝对定位(fixed、absolute):一篇只说明现象,不给出具体原因分析的,同病相怜的家伙。

实现绝对定位元素水平垂直居中的两种方法:完美啊~给出了一个很漂亮的margin:auto方案啊!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CSS&HTML面经专题——(三)CSS定位/盒模型/经典布局/浮动布局与BFC
position:static | relative | absolute | fixed | center | page | sticky
玖柒的小窝
2021/10/26
2K0
CSS&HTML面经专题——(三)CSS定位/盒模型/经典布局/浮动布局与BFC
17个场景,带你入门CSS布局
CSS 布局本质就是控制元素的位置和大小。比如这样的布局:元素宽960px,水平居中。宽960px是大小。水平居中是位置。又如这样的布局:两个元素在一行,左侧元素固定宽200px,右侧元素撑满剩余空间。固定宽200px,撑满剩余空间是大小。两个元素在一行是位置。
前端GoGoGo
2020/03/20
2.7K0
最全总结,CSS实现居中的方式全部方式
利用text-align: center可以实现在块级元素内部的行内元素水平居中。 此方法对行内元素(inline),行内块(inline-block),行内表(inline-table),inline-flex元素水平居中都有效。
用户5997198
2022/01/18
3.3K0
最全总结,CSS实现居中的方式全部方式
「资深前端工程师总结」前端面试知识点大全——html篇
定时让网页在3秒内跳转到mozilla首页(http-equiv 属性为名称/值对提供了名称。并指示服务器在发送实际的文档之前先在要传送给浏览器的 MIME 文档头部包含名称/值对。)
用户5997198
2019/08/12
2K0
「资深前端工程师总结」前端面试知识点大全——html篇
【前端攻略】最全面的水平垂直居中方案与flexbox布局
最近又遇到许多垂直居中的问题,这是Css布局当中十分常见的一个问题,诸如定长定宽或不定长宽的各类容器的垂直居中,其实都有很多种解决方案。而且在Css3的flexbox出现之后,解决各类居中问题变得更加容易了。搜了搜园子内关于flexbox的文章觉得很多不够详尽,故想借介绍flexbox的同时好好总结一番各类垂直居中的方法。由简至繁: 行内元素的水平居中     要实现行内元素(<span>、<a>等)的水平居中,只需把行内元素包裹在块级父层元素(<div>、<li>、<p>等)中,并且在父层元素CSS设置如
Sb_Coco
2018/05/28
1.4K0
[ HTML5 ] WEB 常用页面布局梳理和分析
页面布局实现的方法有许多种,但是我个人习惯是会只用一种自己比较习惯的方法,只要不是出现了兼容性问题一般也不会去使用其他的方法,但是也是要知道有哪一些方法可以实现,确实忘记了我就使用搜索快速解决问题。下面是我梳理了一下各种布局的方法。
GavinUI
2021/07/26
1.3K0
[ HTML5 ] WEB 常用页面布局梳理和分析
前端面试题归类-css
网页看着不方便,想要文档可以私聊我。要是有错别字和错误的地方,请各位大佬直接指出,谢谢啦!!
肥晨
2023/02/16
1.7K0
【基础】这15种CSS居中的方式,你都用过哪几种?
CSS居中是前端工程师经常要面对的问题,也是基本技能之一。今天有时间把CSS居中的方案汇编整理了一下,目前包括水平居中,垂直居中及水平垂直居中方案共15种。如有漏掉的,还会陆续的补充进来,算做是一个备忘录吧。
毛瑞
2018/05/03
2.2K0
【基础】这15种CSS居中的方式,你都用过哪几种?
Web前端学习 第2章 网页重构15 flex布局
此前我们制作的所有网页都是基于盒子模型和浮动布局完成的,本节我们一起学习弹性布局(或者叫弹性盒子布局),这是一种更先进的布局方式,可以让网页布局更简洁,更易于维护。
学习猿地
2020/06/15
4790
两个元素定位,要求子元素垂直居中
<!DOCTYPE html> <html> <hed> <meta charset="utf-8"> <title></title> <style> /*普通定位*/ #div1{ width: 598px; height: 498px; margin: 20px auto; background: gray; padding: 1px; } #inner_div1{ width: 200px; height: 150px; background: ghostwhite
前朝楚水
2018/04/02
9600
iphone5真机,绝对定位的兼容问题
该问题出现的原因已经找到:根本原因就是absolute定位的元素不参与flex的布局,详见 当flex容器中包含absolute元素时。
celineWong7
2020/11/05
7600
一文掌握css常见布局float、position、flex、grid
css在前端的学习中是一个绕不过去的课题,他决定如何显示的你网页内容,初学css你也许会觉得它很容易,无非就是控制元素的位置,大小,颜色等等表现层面的东西,但当你真正使用它去做一些事前的时候,往往会出现无处下抓的现象,这么多属性,我该使用哪个属性来实现想要的效果呢,更有时候自己以为的效果跟实际出来的效果又有很大差异,有人说css是感性的,确实,它不像javasctipt这种有很强逻辑性的语言,它的很多特性毫无逻辑可以,你只能试出来,从这个角度而言,其实css是很难学的,你需要积累很多很多的场景,才能说可以灵活的使用css,这篇文章就css中最常见的场景---布局,介绍一下集中常见的布局方法。
用户11102514
2024/04/29
2860
剖析一些经典的CSS布局问题,为前端开发+面试保驾护航
这样做的优点就是在图文混排的时候可以很好的使文字环绕在图片周围。另外当元素浮动了起来之后,它有着块级元素的一些性质例如可以设置宽高等,但它与inline-block还是有一些区别的,第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题
桃翁
2019/11/09
1.2K0
剖析一些经典的CSS布局问题,为前端开发+面试保驾护航
多个你不知道的 CSS 居中方案!
要使内联元素(如链接,span 或img)居中,使用 text-align: center 足够了。
前端小智@大迁世界
2020/10/23
1.3K0
再不学 flex 就不会写布局了
块状元素居中是一个老生常谈的话题,之前面试的时候考官也曾问到过这个。下面写几种常见的块状元素居中的方式。
李振
2021/11/26
3100
再不学 flex 就不会写布局了
简单的聊一聊如何用CSS制作一个专业的头部页眉(Headers)
在本文中,我们将探索一些基本的技巧和提示,以帮助您使用CSS创建令人惊艳的页眉布局。我们并不过多关注设计,而是专注于创建布局,并了解创建布局时可能遇到的困难。
前端达人
2023/08/31
4590
简单的聊一聊如何用CSS制作一个专业的头部页眉(Headers)
14种CSS实现水平或垂直居中的技巧
css水平和垂直居中是一个亘古不变的话题,它常常出现在优美的网页上以及各大前端面试当中。
前端达人
2021/08/10
5780
HTML 水平居中 垂直居中 垂直水平居中的几种实现方式「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说HTML 水平居中 垂直居中 垂直水平居中的几种实现方式「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/05/22
5.4K0
HTML 水平居中 垂直居中 垂直水平居中的几种实现方式「建议收藏」
web前端面试中10个关于css高频面试题,你都会吗?
BFC(Block Formatting Context),块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。
coder_koala
2019/07/30
2.8K0
前端知识点总结(html+css)(上)
众所周知,前端内容多而杂,经过查阅各种资料,总结了一些知识点,以备后续复习使用。文章分为上(html,css)中(js)下(vue)三部分。
zhouzhouya
2023/10/26
3730
推荐阅读
相关推荐
CSS&HTML面经专题——(三)CSS定位/盒模型/经典布局/浮动布局与BFC
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验