【问题标题】:How to add media-rules dynamically to a element如何将媒体规则动态添加到元素
【发布时间】:2019-03-07 07:55:08
【问题描述】:

我想为网站中的某些元素添加一些灵活的媒体规则。如果我单击一个元素,将打开一种工具栏来更改特定媒体规则的 css 样式。到目前为止一切顺利...

我的第一个想法很简单,用 inline-style 做,但媒体规则不能用 inline-style。

所以我必须寻找另一种方法来动态添加此规则。

也许我创建了一个新的样式集 dynamicalls。

<style>
@media screen and  (min-width:920px) {}
@media screen and  (min-width:720px) {}
@media screen and  (max-width:580px) {}
</style>

但是,我不知道... 1)如何将新类准确地添加到这个新样式集(我有其他样式声明,并且所有样式标记都在没有 id 用作选择器的情况下。) 2)如果我找到一种方法来选择这个样式集,我怎样才能将新类放入想要的媒体规则中 - 我必须使用哪种选择器?

例如,我想将这个新类 ".newclass{font-size:12px;}" 添加到媒体规则 "min-width:920px"

$("UNKOWN_SELECTOR").html/append/something_else("\
    .newclass {\
        font-size: 12px;\
    }")
    .appendTo("UNKONWN_SECOND_SELECTOR_TO_MEDIARULE");

最后我想要这个结果

 <style>
    @media screen and  (min-width:920px) { .newclass{font-size:12px;} }
    @media screen and  (min-width:720px) {}
    @media screen and  (max-width:580px) {}
    </style>

我希望有人能告诉我一个更简单的方法来解决这个问题。

非常感谢。

【问题讨论】:

  • 为什么在不改变媒体的情况下强制媒体规则?您可以使用 jquery addClassremoveClass 切换元素的类名
  • 一开始我没有媒体规则,我想根据需要添加它们
  • @mikeD 这样做的原因是什么?它似乎正在倒退 - 媒体查询让您定义规则以便自动应用它们......您不仅添加了额外的处理,而且您正在客户端执行它会减慢页面速度。

标签: javascript php jquery css


【解决方案1】:

您可以为每个媒体单独创建类,并使用media-query 将该类添加到您的元素中。

例如,

.desktop {
     /* styles */
}


.mobile {
     /* styles */
}

使用media-query将这些类之一添加到元素中

@media(max-width: 960px){
    /* add desktop class to your specific element */
}

@media(max-width: 480px){
    /* add mobile class to your specific element */
}

当然,您可以将它与您的事件处理程序混合使用,例如 onClick()

【讨论】:

  • 好的,请看一下,我已经更新了我的帖子。我必须如何或使用哪种选择器来匹配想要的样式集并匹配想要的媒体规则?
【解决方案2】:

您应该在样式中定义所有强制类名,并使用addClassremoveClass 将新规则应用于元素。

请在单击后和单击前检查此 sn-p 并检查元素并检查其类名:

$(document).ready(function(){
    $("a").click(function(){
       $(this).removeClass("defaultClass").addClass("newClass");
    })
})
.defaultClass{
    font-size:20px;
}

.newclass{
    font-size:20px;
}

@media screen and  (min-width:920px) { 
    .newclass{font-size:12px;}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="defaultClass">Change Font size by clicking Here</a>

编辑:如果您不想预定义所有类,那么您可以使用insertRule 即时创建新的 css 规则,然后使用我描述的方法。详情请查看this Q/A

【讨论】:

  • 好主意,但不可能为网站添加数百个可能的类,如果最后只有其中一些真正在使用中
  • 请检查我在答案末尾添加的编辑。 @mikeD
  • 是的,这就是我需要的(但前提是我可以插入一个新类,而不仅仅是规则),但我的问题是我必须使用哪个选择器以所需样式插入新规则-设置并在通缉媒体规则中
  • 修改css规则请参考本教程davidwalsh.name/add-rules-stylesheets@mikeD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多