• Angular Material的layout布局(flex布局)在Safari浏览器中的兼容性问题及解决方法


    近期的项目使用到了Angular Material中的layout布局,原理即css3新加入的flex布局,并且和媒体查询很好的结合在一起,使用起来很是方便,例:

    浏览器兼容性测试中,在Safari打开页面后布局并没有按照预期展现出来,几经周转终于找到了原因和并且想到了解决方法,现做笔记记录如下,如果内容有不对的地方或者更好的方法,欢迎补充。

    项目中界面布局举例如下:

    <div layout="row" layout-wrap class="videoCardContainer">
        <div ng-repeat="items in videoListData" flex-lg="20" flex-md="25" flex-sm="33" flex-xs="100">
            <!--此处为视频卡片的内容-->    
        </div>
    </div>

    外面是视频卡片的容器,子元素布局为横向并且换行,并且使用了响应式布局。以屏幕尺寸在'(min- 1280px) and (max- 1919px)'之间为例,此时每个子元素占据的宽度为容器宽度的20%,也就是一行为5个视频卡片,但是在Safari浏览器打开页面看到每个子元素在一行内占据了100%的宽度,如下:

    检查此时的界面视频卡片元素看到如下css:

    一般使用了Angular Material的layout后,决定子元素在容器中宽度的属性为max-width,但是Safari浏览器会忽略这个属性,去找flex属性,可以看到flex中的第三项flex-basis属性值为100%,flex-basis属性为项目占据主轴的空间,所以此时子元素会在一行内占据100%的宽度。目前不清楚这是Angular Material布局的bug还是基于别的考虑,想到的解决方法为在自己的css文件中给flex从新赋相对应的正确的值,把Angular Material自带的样式覆盖掉,如下:

    @media (max- 1919px) and (min- 1280px){
        .layout-row > .flex-lg-20 {
            flex: 1 1 20%;
        }
    }

    覆盖后界面展示正常:

    检查视频卡片元素,可以看到自己的css生效,覆盖成功,如下:

    出处:github的angular-material论坛关于这个问题WebKit Bugzilla中关于这个问题

  • 相关阅读:
    android学习之layout_gravity和gravity的区别
    android学习之布局(如何动态加入其它xml文件中的控件)
    android学习之屏幕切换动画(translate)
    android学习之ViewPager 初步使用
    android学习之Gallery(画廊)
    android学习之handler
    android 学习之AsyncTask
    通过网络路径,返回输入流工具类
    解析输入流 返回二进制数据 工具类
    android学习之 向网络中发送 XML格式数据
  • 原文地址:https://www.cnblogs.com/li-you/p/6543219.html
Copyright © 2020-2023  润新知