我如何处理使用 Javascript 在 CSS 中设置多个样式(由于供应商前缀)
How do I handle setting multiple styles (due to vendor prefixes) in CSS with Javascript?
我希望用户单击一个按钮来显示隐藏的弹性框菜单。所以我当然知道如何处理正常的事情:
nav#test {
display: none;
flex-flow: column nowrap;
}
document.querySelector('#test').style.display = 'flex';
但是愚蠢的供应商前缀替代规则呢?这以前从未出现过,我不知道如何处理它们。
编辑:为什么不是自动前缀?
一句话:wrap
.在上面的例子中,我使用了flex-flow: column nowrap;
.但是,假设规则已经flex-flow: row wrap;
。Autoprefixer只会为你修复最近的浏览器,因为在较旧的(但甚至不是那么旧的)Firefox和Safari(包括Chrome for iOS)上没有(没有wrap
支持)。
因此,如果您使用自动前缀器,您的 flex-flow: row wrap
元素只会在此类浏览器上中断。根据设置,您的弹性子项可能会在屏幕一侧直接运行。
在这些情况下,也许您更愿意通过指定-webkit-box-orient: vertical
甚至-moz-box-orient: vertical
(相当于现代flex-direction: column
)来提供替代布局。
您可以使用标准属性和前缀属性创建一个CSS类选择器,只需使用JavaScript即可在单击按钮时将类添加到所需的任何元素中。例如:
var navButton = document.getElementById("navControl");
navButton.addEventListener("click", showNav, false);
function showNav() {
var nav = document.getElementById("test");
nav.className = "flexClass";
}
nav#test {
display: none;
flex-flow: column nowrap;
}
#test.flexClass {
display: flex; /* Standard for Firefox, Chrome, and Opera */
display: -webkit-box; /* iOS 6-, Safari 3.1-6 */
display: -ms-flexbox; /* IE 10 */
display: -webkit-flex; /* Safari 6.1+. iOS 7.1+ */
background: lightgray;
border: 1px solid black;
}
<button id="navControl">Show Nav menu</button>
<nav id="test">Nav menu goes here</nav>
我写了#test.flexClass
而不仅仅是.flexClass
因为 ID 选择器比类选择器更具体,所以单独.flexClass
会被您现有的nav#test
选择器覆盖。
自动前缀器会自动将供应商前缀添加到任何需要它的属性中。
相关文章:
- 对插件初始化后动态加载的元素进行样式设置
- 使用jQuery按条件将样式设置为html标记
- 将 href 样式设置为按钮
- 如何以类似于vivus.js的样式设置SVG填充和路径的动画
- 根据用户输入声明样式设置
- 更改:在使用Javascript进行样式设置之前
- 反应:使用内联样式设置所有元素的样式
- 在AngularJS中构建SPA应用程序与纯JavaScript - 选择哪种Boostrap进行样式设置
- 我将如何使用CSS3对动态创建的jQuery UI元素进行样式设置
- Tumblr JS嵌入CSS/HTML标签进行样式设置
- 如何使用 ng 样式设置元素宽度 % 的样式
- 如何使用 Web 浏览器控件进行样式设置,但具有 C# 中的逻辑
- 从 javascript 获取样式设置时出现问题
- 样式设置 jQuery 验证错误消息
- 使用 React-Toolbox 的按钮进行样式设置不起作用
- 如何将离子输入类型文件的样式设置为按钮
- 如何将加载到<对象>中的元素样式设置为数据
- CKEDITOR没有't对来自数据库的文本进行样式设置
- 如何对一个元素进行ng样式设置's$索引由ng repeat创建
- D3可以't将样式设置为带标题的对象