如何计算 IE11 中 CSS 网格列的宽度以进行动画处理?
How to calculate the width of a CSS Grid column in IE11 for animation?
'Slide' 按钮切换 left-margin
。需要找到一种方法来为 left-margin
设置动画,但是在任何 calc
ed 元素上使用 transition
似乎在 IE11 中被窃听 - 仍然。
JS Bin 中的示例
https://jsbin.com/qirozodete/1/edit?html,css,output
及以下。
这是我正在处理的项目的一个非常简单的模型。尝试创建一个在每个分辨率下滑动并缩小 1 grid
列的元素。目前正在使用 calc
来计算网格列的大小,这适用于 FF/Chrome/Safari。只是不是IE。
不要认为我可以使用 transform: translate
,因为元素不会收缩,并且所需的 calcs
比仅堆叠 translates
更复杂一点。
如有任何想法,我们将不胜感激。
document.getElementById('slide-btn').addEventListener('click', function() {
document.getElementById('grid').classList.toggle('slide');
})
button {
background: white;
border: 1px solid black;
padding: 5px 10px;
}
#grid {
display: -ms-grid;
-ms-grid-columns: 1fr 1fr 1fr 1fr;
}
#grid-item-1 {
background: teal;
-ms-grid-column: 1;
-ms-grid-column-span: 2;
height: 150px;
transition: margin-left 500ms ease-in;
}
#grid.slide #grid-item-1 {
margin-left: calc(100vw / 4);
}
<button id="slide-btn">Slide</button>
<div id="grid">
<div id="grid-item-1"></div>
</div>
我测试了你的代码并重现了这个问题。我认为我们只能使用 JavaScript 进行更改作为 IE 中的解决方法。我们可以计算 clientWidth
的值,并计算 marginLeft
的值。
示例代码:
document.getElementById('slide-btn').addEventListener('click', function() {
var ml = document.getElementById("grid-item-1").style.marginLeft;
var vw = (document.documentElement.clientWidth) / 4;
if (ml == "") {
document.getElementById("grid-item-1").style.marginLeft = vw + "px";
} else {
document.getElementById("grid-item-1").style.marginLeft = "";
}
})
button {
background: white;
border: 1px solid black;
padding: 5px 10px;
}
#grid {
display: -ms-grid;
-ms-grid-columns: 1fr 1fr 1fr 1fr;
display: grid;
grid-template-columns: repeat( 4, 1fr);
}
#grid-item-1 {
background: teal;
-ms-grid-column: 1;
-ms-grid-column-span: 2;
grid-column: span 2;
height: 150px;
transition: margin-left 500ms ease-in;
}
<button id="slide-btn">Slide</button>
<div id="grid">
<div id="grid-item-1"></div>
</div>
'Slide' 按钮切换 left-margin
。需要找到一种方法来为 left-margin
设置动画,但是在任何 calc
ed 元素上使用 transition
似乎在 IE11 中被窃听 - 仍然。
JS Bin 中的示例 https://jsbin.com/qirozodete/1/edit?html,css,output 及以下。
这是我正在处理的项目的一个非常简单的模型。尝试创建一个在每个分辨率下滑动并缩小 1 grid
列的元素。目前正在使用 calc
来计算网格列的大小,这适用于 FF/Chrome/Safari。只是不是IE。
不要认为我可以使用 transform: translate
,因为元素不会收缩,并且所需的 calcs
比仅堆叠 translates
更复杂一点。
如有任何想法,我们将不胜感激。
document.getElementById('slide-btn').addEventListener('click', function() {
document.getElementById('grid').classList.toggle('slide');
})
button {
background: white;
border: 1px solid black;
padding: 5px 10px;
}
#grid {
display: -ms-grid;
-ms-grid-columns: 1fr 1fr 1fr 1fr;
}
#grid-item-1 {
background: teal;
-ms-grid-column: 1;
-ms-grid-column-span: 2;
height: 150px;
transition: margin-left 500ms ease-in;
}
#grid.slide #grid-item-1 {
margin-left: calc(100vw / 4);
}
<button id="slide-btn">Slide</button>
<div id="grid">
<div id="grid-item-1"></div>
</div>
我测试了你的代码并重现了这个问题。我认为我们只能使用 JavaScript 进行更改作为 IE 中的解决方法。我们可以计算 clientWidth
的值,并计算 marginLeft
的值。
示例代码:
document.getElementById('slide-btn').addEventListener('click', function() {
var ml = document.getElementById("grid-item-1").style.marginLeft;
var vw = (document.documentElement.clientWidth) / 4;
if (ml == "") {
document.getElementById("grid-item-1").style.marginLeft = vw + "px";
} else {
document.getElementById("grid-item-1").style.marginLeft = "";
}
})
button {
background: white;
border: 1px solid black;
padding: 5px 10px;
}
#grid {
display: -ms-grid;
-ms-grid-columns: 1fr 1fr 1fr 1fr;
display: grid;
grid-template-columns: repeat( 4, 1fr);
}
#grid-item-1 {
background: teal;
-ms-grid-column: 1;
-ms-grid-column-span: 2;
grid-column: span 2;
height: 150px;
transition: margin-left 500ms ease-in;
}
<button id="slide-btn">Slide</button>
<div id="grid">
<div id="grid-item-1"></div>
</div>