【问题标题】:How do I conditionally apply CSS to a class if a different class is present?如果存在不同的类,我如何有条件地将 CSS 应用于一个类?
【发布时间】:2018-09-04 19:42:05
【问题描述】:

我在视图中有以下内容:

<div class="bottom-nav container-fluid">
 <div class="container">
  <div class="row mobile-menu-row">
   <div class="col"></div>
  </div>
  <div class="row mobile-menu-row">
   <div class="slidedown"></div>
  </div>

Slidedown 和 Slideup 都取决于用户点击按钮的情况。目前我有一个 440px 的高度应用于底部导航,它是巨大的,如果 Slidedown 存在并且屏幕尺寸低于 768px,真的只想出现在底部导航上。如果出现一个类,有什么建议只在另一个类上应用 CSS 样式?

我尝试过的尝试肯定没有用:

@media and (max-width: 767px) {
  .bottom-nav .slidedown{
   height: 440px; 
  }
 }

这自然是行不通的,因为它将它应用到滑动而不是底部导航部分。

我的 JS 文件有:

const nav = () => {
const mobileButton = document.querySelector('a.mobile-button');
const menu = document.querySelector('.mobile-menu-cont');
const regionLink = document.querySelector('.mobile-menu-row ul > li');
const regionMenu = document.querySelector('.mobile-menu-row ul > li > ul');
const bottom = document.getElementsByClassName('bottom-nav');

function init() {
  mobileButton.addEventListener('click', toggleMenu);
  regionLink.addEventListener('click', toggleSubMenu);
}

let toggleMenu = (e) => {
  e.preventDefault();
  if (menu.classList.contains('slideup')) {
    menu.classList = 'slidedown';
  } else {
    menu.classList = 'slideup';
  }
};
if (menu.classList = 'slidedown'){
  bottom.setAttribute("style", "height: 440px;")
} else {
  bottom.setAttribute("style","height: 0;")
}

我认为该条件会起作用,但它似乎只是破坏了页面上的许多不同内容。

我也试过了:

    let toggleMenu = (e) => {
     e.preventDefault();
     if (menu.classList.contains('slideup')) {
       menu.classList = 'slidedown';
       bottom.setAttribute("style", "height: 440px;")
     } else {
       menu.classList = 'slideup';
       bottom.setAttribute("style", "height: inherit;")
     }
   };

这弄乱了我在页面上的很多其他 JS。

【问题讨论】:

  • 您没有尝试任何可以向我们展示的代码吗?您是否考虑过媒体查询?
  • 有效点。我编辑了这个问题并添加到我当前正在切换的 JS 中。

标签: javascript html css ruby-on-rails


【解决方案1】:

你很接近!不要压缩bottom elem 的完整样式属性,只需设置height 属性,同样,不要替换menuclassName,只需在类名中添加和减去:

let toggleMenu = (e) => {
  e.preventDefault();
  if (menu.classList.contains('slideup')) {
    menu.className = menu.className.replace('slideup', '');
    menu.className += ' slidedown';
    bottom.style.height = '440px';
  } else {
    menu.className = menu.className.replace('slidedown', '');
    menu.className += ' slideup';
    bottom.style.height = 'inherit';
  }
};

【讨论】:

  • 我最终都做了 bottom.setAttribute 。我将改为测试 style.height
  • 有没有办法只用 CSS 来做到这一点?我的意思是只有在存在另一个 CSS 类时才应用一个 CSS 类?
  • 好吧,你可以做到.class-one.class-two { background: red; } --- 你是这个意思吗?
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2020-09-09
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多