用可重用的JavaScript函数管理CSS中的状态

在CSS中,确定最有效的状态管理方法是一个具有挑战性的问题,但是谢天谢地,有许多基于OOCSS的方法提供了一些好的解决方案。 文章系列: 1. 使用可重用的JavaScript函数在CSS中管理状态(您在这里!)我最喜欢的是CSS(Scalable and modular architecture for CSS),它包含有状态类。引用smass自己的文档,有状态类是:状态是扩展和覆盖所有其他样式的东西。例如,手风琴部分可能处于折叠或展开状态。消息可能处于成功或错误状态。状态通常作为布局规则应用于同一元素,或作为基本模块类应用于同一元素。我最常用的有状态类之一是is-active。以前面引用的手风琴为例,is-active在本例中应用所有必需的CSS样式来表示扩展状态。如下面的示例所示:您将注意到,当检测到click事件时,有一些JavaScript在组件上切换is-active类:var = 0; i This works fine, but if we slot it into our accordion JavaScript there\"s a problem:var = function(elem){elem.classList.toggle(\"is-active\");}for(var =>Although the makeActive函数是可重用的,我们仍然需要首先编写代码来获取组件及其任何内部元素,因此,当然还有很大的改进空间。要进行这些改进,我们可以利用HTML5的自定义数据属性:A data-active属性已经添加到元素中,该元素以前在单击时触发了is-active切换。这个属性的值表示应该在其中进行is-active切换的元素,它和以前一样是顶级c-accordion元素。注意添加了一个新的js-accordion类,而不是挂接到现有的c-accordion类中。这是为了将组件的功能方面从它的样式中分离出来。让我们来看看JavaScript:// Grab all elements with data-active attributevar = 0; i Adding number suffixes to each js-accordion参考确实解决了这个问题,但这是一个我们可以不用的麻烦。一个好的解决方案是对我们的可重用函数实现作用域,这将使我们能够封装我们的切换,以便它们只影响我们想要的元素。要实现作用域,我们需要创建一个单独的自定义属性,名为data-active-scope。它的值应该表示切换应该封装在其中的父元素,在这个实例中是父js-accordion元素。Using the above HTML, the following behaviour should happen:When you click the first accordion, because it has a scope set to js-accordion,只有data-active元素匹配或是这个js-accordion实例的子元素将有is-active被切换。当您单击没有范围的第二个accordion时,is-active将在js-accordion的所有实例上切换。前提是data-active-scope设置正确,每个js-accordion元素中的任何类切换都应该被封装,而不考虑任何冲突的类名。下面是修改后的Javascript和一个工作示例,显示了有无data-active-scope属性:// Grab all elements with data-active attributevar = function(child, match) {if (!child || child == document) {return null;}if (child.classList.contains(match) || child.nodeName.toLowerCase() == match) {return child;}else {return closestParent(child.parentNode, match);}}// Loop through if any are foundfor(var = closestParent(this, this.getAttribute(\"data-active-scope\"));}if(scopeElement) {// Grab scoped linked elementvar = Array.prototype.slice.call(linkedElement);// Check if our scope matches our target element and add to array if true.// This is to make sure everything works when data-active matches data-active-scope.if(scopeElement.classList.contains(this.getAttribute(\"data-active\"))) {linkedElement.unshift(scopeElement);}}else {// Grab linked elementvar = 0; i < linkedElement.length; i++) {linkedElement[i].classList.toggle(\"is-active\");}});}超越是活动的我们的可重用功能现在正在工作很好,是一个有效的方法设置is-active开关上的各种组件。但是,如果我们需要为另一个有状态类设置一个类似的切换呢?按照目前的情况,我们必须复制函数并将is-active的所有引用更改为新的有状态类。效率不高。我们应该改进可重用函数,通过重构数据属性来接受任何类。与其将data-active属性附加到触发器元素,不如将其替换为以下内容: 2. When you click the first accordion, because it has a scope set to js-accordion,只有data-active元素匹配或是这个js-accordion实例的子元素将有is-active被切换。 3. 当您单击没有范围的第二个accordion时,is-active将在js-accordion的所有实例上切换。

用可重用的JavaScript函数管理CSS中的状态

在CSS中,确定最有效的状态管理方法是一个具有挑战性的问题,但是谢天谢地,有许多基于OOCSS的方法提供了一些好的解决方案。文章系列:1. 使用可重用的JavaScript函数在CSS中管理状态(您在这里!)我最喜欢的是CSS(Scalable and modular architecture for CSS),它包含有状态类。引用smass自己的文档,有状态类是:状态是扩展和覆盖所有其他样式的东西。例如,手风琴部分可能处于折叠或展开状态。消息可能处于成功或错误状态。状态通常作为布局规则应用于同一元素,或作...

日期:2021-06-24 10:00:02 浏览:855

使用JavaScript获取CSS自定义属性值

下面是安迪Bell的一个巧妙的技巧,他使用CSS自定义属性来检查是否使用JavaScript支持特定的CSS功能。基本上,他使用的功能是CSS必须检查特定属性的浏览器支持,设置一个返回值0或1(布尔值!)然后通知JavaScript根据该值执行。下面是他的示例:.my-component {--supports-scroll-snap: 0;}@supports (scroll-snap-type: x mandatory) {.my-component {--supports-scroll-snap: 1...

日期:2021-06-24 10:03:07 浏览:574

弥合CSS和JavaScript之间的鸿沟:JS中的CSS

在本文中,我们将深入探讨JS中CSS的概念。如果你已经熟悉了这个概念,你可能仍然喜欢在这个方法的哲学中漫步,你可能对下一篇文章更感兴趣。Web开发是一个非常跨学科的领域。我们习惯于与多种语言密切合作。而且,随着开发web应用程序变得越来越普遍和细致入微,我们经常寻找创造性的方法来弥合这些语言之间的差距,使我们的开发环境和工作流程更简单、更高效。最常见的例子通常是在使用模板语言时。例如,可以使用一种语言来生成更详细的语言(通常是HTML)的代码。这是前端框架的一个关键方面——操作HTML是什么样子的?这个领域...

日期:2021-06-29 04:00:01 浏览:652

WordPress用Javascript获取和修改Gutenberg post内容

你好,几个星期以来,我一直在用插件修改帖子内容。上下文:翻译插件。获取标题、摘录和内容,通过API进行翻译,并使用生成的字符串更新标题、摘录和内容。翻译不涉及&lt;–wp xxxx–&gt;标记(它们在源代码和结果HTML代码中)标题很简单:wp.data.dispatch( \"core/editor\" ).editPost( { title: new_title} )摘录很简单:wp.data.dispatch( \"core/editor\" ).editPost( { excerpt: new_...

日期:2021-07-01 16:00:03 浏览:824

为什么我要用JavaScript编写CSS

我永远不会告诉你用CSS(或一些语法预处理器)来写CSS是个坏主意。我认为你完全可以在没有任何工具的情况下完成工作。但是,我也认为用JavaScript编写CSS是一个好主意,对于那些用JavaScript构建所有组件的代码库中的基于组件的样式,Max Stoiber在本文中关注的是用JavaScript编写CSS的原因,而不是如何用JavaScript编写CSS。有一个原因引起了我的强烈共鸣,那就是信心。这就是造型自信对我的意义。团队中的任何人都可以设计一个组件的样式,而不必担心意外的副作用。没有压力来设...

日期:2021-07-03 15:00:02 浏览:899

WordPress中的表情符号——注入css和javascript

坦率地说,在核心中包含emoji支持的决定是一个糟糕的决定。据我所知,wordpress从来没有自动向DOM中注入额外的css和js来支持一些看似琐碎的、坦率地说是可选的东西。这为今后的wordpress发布树立了一个坏的先例。怎样才能阻止wordpress向DOM注入我们不想加载的其他资产呢?是的,你可以禁用它们,但不应该反过来吗?你不应该启用它们吗?根据定义,这是特征膨胀(https://en.wikipedia.org/wiki/Softwareu bloat)而核心决策者应该谨慎行事,否则他们可能会...

日期:2021-07-05 08:00:03 浏览:868

通过JavaScript获取CSS旋转值

aditya的一条评论:有没有方法[通过JavaScript]获得元素旋转的角度?似乎是一个合理的要求。因此,我们有一些HTML:And it\"s rotated through CSS:#i-am-rotated {-webkit-transform: rotate(30deg);-moz-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);}我们的目标是通过JavaScript从该元素获得数字\"...

日期:2021-07-08 07:00:04 浏览:676

WordPress自定义程序中Javascript单击/更改事件的行为不一致

我注意到4.4-b4中有一个奇怪的行为,它与在自定义程序中单击小部件按钮触发的更改事件有关。这是一个带有当前版本(4.3.1)中测试小部件的动画Gif,预期的行为是:https://dl.dropbox.com/s/mime1qqemk3a2c4/wp431.gif和另一个Gif,在版本4.4-b4中显示问题:https://dl.dropbox.com/s/xki1ye0op9mqsq8/wp44b4.gif点击最终会影响其他元素,而没有明显的原因。测试小部件中使用的JS代码非常简单,要点如下:https...

日期:2021-07-14 12:00:03 浏览:833

WordPressJavascript不工作

我是一个新手,正在将一个静态html网站转换成wordpress。除了javascript之外,大多数事情似乎都进展顺利。有猫头鹰旋转木马和放大滑块插件,是不工作的,并与下拉菜单项上的悬停相同。我正在使用它将javascript排列在函数页上。...

日期:2021-07-24 19:00:03 浏览:901

弥合CSS和JavaScript之间的鸿沟:CSS模块、PostCSS和CSS的未来

在这个由两部分组成的系列文章的前一篇文章中,我们探讨了JS环境中的CSS,我们不仅意识到JS中的CSS可以生成关键样式,而且有些库甚至没有运行时。我们看到通过添加巧妙的优化可以显著改善用户体验,这也是本系列关注开发者体验(创作风格的体验)的原因,我们将从我们现有的例子中重构Photo组件来探索\"纯ol\"CSS的工具。争议和热剧其中一个最著名的CSS辩论是语言是否按原样运行良好。我认为这场辩论之所以能够继续下去,是因为双方都有一些道理。例如,虽然CSS最初的设计初衷是设计文档的样式,而不是应用程序的组件,...

日期:2021-07-30 01:00:03 浏览:854