css - 是否有用于将 css flex 简写转换为简写以支持 IE11 的 polyfill?
问题描述
是否有用于将 Flexbox flex:速记属性转换为可比较的速记属性以支持 IE11 的 polyfill?
在做了一些研究之后,我发现了一些 flexbox polyfill,但它们都不支持 flex: 速记属性。
如果没有支持 flex 速记的 polyfill,我将不得不手动将它们全部替换为速记版本。
任何意见是极大的赞赏!
目前我创建了这个 mixin 来提供一个后备:
/*
Mixin for IE11 fallback for shorthand flex property.
EXAMPLE USAGE:
.grid {
flex: 1 0 100%; // todo: replace this with below
}
.grid {
@include flexIEFallback(1 0 100%);
}
OUTPUT:
.grid {
flex-grow: 1;
flex-shrink: 0;
flex-basis: 100%;
}
*/
@mixin flexIEFallback($flex-list) {
// this is the shorthand
// flex: $flex-list;
// IE11 fallback for shorthand prop flex
@if length($flex-list) == 1 {
@if $flex-list == (auto) {
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
}
@if $flex-list == (initial) {
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
}
@if $flex-list == (none) {
flex-grow: 0;
flex-shrink: 0;
flex-basis: auto;
}
@if $flex-list == (unset) {
flex-grow: unset;
flex-shrink: unset;
flex-basis: unset;
}
@if $flex-list == (inherit) {
flex-grow: inherit;
flex-shrink: inherit;
flex-basis: inherit;
} @else {
flex-grow: $flex-list;
}
}
@if length($flex-list) > 1 {
@for $item from 1 through length($flex-list) {
$index: index($flex-list, $item);
@if $index == 1 {
flex-grow: $item;
}
@if $index == 2 {
flex-shrink: $item;
}
@if $index == 3 {
flex-basis: $item;
}
}
}
}
解决方案
看看这个 ponyfill 而不是走 polyfill 路线。
https://github.com/jhildenbiddle/css-vars-ponyfill
自添加示例以来,它可能不符合您的确切需求,但我之前已将其用于类似情况,以允许为 css 类定义速记属性并保持与不支持 css 速记语法的旧浏览器的兼容性。
推荐阅读
- sql-server - SSMS SQL 以与 Excel VBA 不同的用户身份运行
- java - java中的推广
- node.js - 自适应卡上的 Action.Submit 不会调用下一步(仅在 Microsoft Teams 中有效,在网络聊天中有效):Bot Framework V4
- tensorflow - AssertionError:labels.txt 和 cfg/yolov2.cfg 表示的类号不一致
- android - 如何在 android 的首选项中从工具中获取值(使用 androidAnnotations)
- firebase - 尝试获取 Firestore 数据库实例时出现 NoClassDefFoundError
- android - 如何获取 FragmentPagerAdapter 中的当前项目?
- azure - 每当运行操作时,Azure Artifact 源都会导致“从缓存中获取时完整性不正确”
- graphql-dotnet - GraphQL .NET:单例模式的中间件问题
- postgresql - PostgreSQL for Debian vs Redhat (Centos)