【问题标题】:Applying a class based on media query - pure CSS or HTML needed应用基于媒体查询的类 - 需要纯 CSS 或 HTML
【发布时间】:2015-10-30 19:46:30
【问题描述】:

我需要使用纯 CSS、HTML 或 LESS(只要 althogh 预编译不起作用)的媒体查询(或类似查询)来根据屏幕高度将特定类应用于 ID。我正在设置由Add2Any 定义的类 - 而不是 css 属性。

jsfiddle

我想要做的是将 div #add2any 设置为小屏幕。

  <div id="add2any" class="a2a_kit a2a_default_style">

否则我想要这个:

  <div id="add2any" class="a2a_kit a2a_kit_size_32 a2a_default_style">

这可能吗?如何实现?

寻找一种非 javascript/非 Jquery 解决方案以避免时间滞后,并为每种样式设置一个 &lt;div&gt; 并仅显示相关的样式。

背景

这个想法是为小屏幕更改 AddToAny 栏的布局和大小,因此它显示的不是 32 像素的图像,而是显示完全不同风格的紧凑栏,按钮更少,并且使用 AddToAny 的类意味着他们将来所做的更改不会依赖于我的样式表中的固定 css。浏览器兼容性很重要。

到目前为止的 CSS

@media screen and (max-height: 430px) {
  .a2a_button_google_plus, .a2a_button_pinterest, .a2a_button_print { display:none;}
  #add2any a, hr#add2any, hr#add2any a, .a2a_divider { font-size: 15px; padding-top:2px; padding-bottom:-2px; }
  .a2a_divider { top:5px ; position: relative}
}

编辑

无法从其中任何一个中找到解决方案,我正在使用基础框架。

conditional CSS based upon div not screen

Toggle mobile view in Foundation using CSS class or JS

How to toggle class using pure javascript in html

**编辑 2 **

来自this question 的使用 Less 或 Sass 的建议似乎有点过头了,因为每个页面都需要解决方案。

Self-hosting 脚​​本并向其添加一些 javacript 可能是更好的选择,即使脚本更改,类名看起来也一定保持不变,因为所有自定义指令都鼓励直接使用 AddToAny 的类名。

【问题讨论】:

  • 既然您几乎处于(明显的)解决方案,那么究竟是什么给您带来了麻烦?您尝试并正在寻找另一种解决方案的方式不可能吗?
  • 你不能用 CSS 添加类名,所以你要么需要在你的标记中重复元素(正如 Marcos Pérez Gude 建议的那样),要么如果你知道 .a2a_kit_size_32 可以应用哪些样式你可以写入仅在媒体查询中有效的覆盖。
  • 只需选择使用 ID 并使用媒体查询来使您的设计具有响应性。还是这会带来其他问题?
  • 不会引入其他问题@klaar
  • 所以我现在正在研究使用 LESS,以便我用于共享栏 &lt;div&gt; 的 ID 可以继承正确的类 - 取决于屏幕大小。我已经编写了 LESS 代码,但它可以动态编译/解释吗?如何?我是否将 LESS .js 文件添加到 CSS 中?还是 HTML?

标签: html css responsive-design less socialshare


【解决方案1】:

已编辑

如果你有这个 html:

 <div  class="a2a_kit a2a_default_style">
 <div  class="a2a_kit a2a_kit_size_32 a2a_default_style">

您可以像这样进行媒体查询:

 /* first state */
 .a2a_kit { display: block; }
 .a2a_kit.a2a_kit_size_32 { display: none; }

 @media screen and (max-height: 430px) {
     /* reverse behaviour on max-height 430 px */
     .a2a_kit { display: none; }
     .a2a_kit.a2a_kit_size_32 { display: block; }
 }

【讨论】:

  • 你不能有多个元素具有相同的#id
  • 这不起作用,它无法识别. a2a_kit.a2a_kit_size_32
  • 点和a之间有一个空格
  • 那是我的键盘自动格式化,我从您的答案中复制并粘贴了代码,没有组合或添加或删除空格(我尝试过)。
  • 如果您的 html 正是这样:&lt;div class="a2a_kit a2a_default_style"&gt; &lt;div class="a2a_kit a2a_kit_size_32 a2a_default_style"&gt; 选择器 .a2a_kit.a2a_kit_size_32 工作正常。如果您更改 html,请告诉我们更改内容。
【解决方案2】:

您只需在媒体查询中设置修改后的样式:

#add2any {
   /* any styles you want to apply all the time */
   background-color: blue;
   width: 100px;
   color: white;
}


@media (min-width: 420px) and (max-width: 760px) {
    /* styles when screen is greater than 420px wide but less than 760px */
    /* omitting the 'and (max-width: 760px)' would cause these styles to apply at any width above 420px unless overridden by another media query */
    #div1 {
        background-color: red;
        width: 300px;
        color: yellow;
    }
}

@media (min-width: 760px) {
    /* styles when screen is greater than 760px wide */
    #div1 {
        background-color: green;
        width: 600px;
    }
}

JSFiddle Demo

*如果你不想基于 ID 设置样式,你可以添加一个独特的类和样式

【讨论】:

  • 我试图避免这样做,一旦 AddToAny 服务稍微改变它的 css 就会导致问题。这不是调整图像大小的情况,而是针对较短的屏幕完全改变布局
  • AddToAny 服务是第三方工具还是由您控制?
  • 第三部分,社交分享服务
  • 那么,无论您如何设置页面元素的样式,对其 CSS 的更改都不会导致问题?
  • 只要类名与我提供的相同,就会找到 - 所有 AddToAny 用户在调用脚本的代码中都使用类名
猜你喜欢
  • 2016-06-22
  • 2021-12-25
  • 2017-03-13
  • 2019-12-09
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
相关资源
最近更新 更多