Вызов класса CSS внутри другого класса?

#css #class

#css #класс

Вопрос:

Возможно ли, чтобы один класс CSS ссылался на другой? Вместо того, чтобы переписывать весь css-код заново?

Например, у меня есть это:

 .btn{
    /* Whatever btn related styles I have */
}

.btn:hover{
    box-shadow:0 0 4px black;
}

.btn:active{
    /* This is where I want to reference the '.red' class */
}

.red{
    /* There is a LOT of CSS code here for cross browser gradients */
}
  

Дело в том, что я уже использую класс .red, как есть в определенных местах, и я также хотел бы применить тот же стиль градиента к «активному» состоянию всех элементов с классом .btn…

Если вы можете помочь решить (это не обязательно должно быть так, как я просил) это, я был бы очень признателен…

Комментарии:

1. Если это соответствует вашему варианту использования, это одна из задач, на решение которой призван SASS.

Ответ №1:

На самом деле вы не можете создать ссылку (один из основных недостатков CSS), но вы можете сделать это:

 .btn:active, .red {
    /* Block A: Most (or all) of what used to just be in .red below */
}

.btn:active {
    /* Block B: Stuff *just* for .btn:active, if any */
}

.red {
    /* Block C: Stuff *just* for .red, if any */
}
  

Запятая означает, что определения в теле блока A применяются отдельно к каждому из этих селекторов, и поэтому они применяются к любым элементам «.btn», которые являются «:активными», и отдельно применяются к любым элементам «.red».

Блок B и блок C являются необязательными. Они предназначены для любых определений, которые вы хотите применить только к данному селектору. Обычно вы перечисляете их после блока A, потому что правила одинаковой специфичности применяются сверху вниз, поэтому вы можете переопределить все, что хотите, из блока A в блоке B или блоке C, и эти блоки «выиграют».

Комментарии:

1. Хммм… Я понимаю концепцию, вы используете общие атрибуты, которые будут использоваться обоими классами .btn:active и .red… Но вы видите, содержимое ТОЧНО такое же… Возможно, я просто использую ваше первое объявление? Таким образом, я определяю атрибуты только один раз, но они применяются к классам .btn:active и .red одновременно?

2. @Abhishek: Да, именно так; если все должно быть точно так же, вы просто определяете первое правило, а не два других. Два других предназначены только на тот случай, если вам нужно затем определить некоторые дополнительные свойства, которые специфичны только для «.btn: active» или «.red», но не для других. Все, что они разделяют, подпадает под первое правило. Если они разделяют все, то это единственное правило.

Ответ №2:

Для вызова класса другому классу.

 .classA{
 
 }
 .classB .classA:hover{
   visibility: visible;
   /*classA -> onmouseover , classB -> visible*/
 }

 classB{
 visibility: hidden;
 }
  

Пример кода показывает всплывающее окно при наведении мыши

 <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    /* Popup container - can be anything you want */
    .popup {
      position: relative;
      display: inline-block;
      cursor: pointer;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    .popup:hover .popuptext{
      visibility: visible;
      -webkit-animation: fadeIn 1s;
      animation: fadeIn 1s;
    /*onmouseover .popup class .popuptext is visible*/
    }
    
    /* The actual popup */
    .popup .popuptext {
      visibility: hidden;
      width: 160px;
      background-color: #555;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 8px 0;
      position: absolute;
      z-index: 1;
      bottom: 125%;
      left: 50%;
      margin-left: -80px;
    }
    
    /* Popup arrow */
    .popup .popuptext::after {
      content: "";
      position: absolute;
      top: 100%;
      left: 50%;
      margin-left: -5px;
      border-width: 5px;
      border-style: solid;
      border-color: #555 transparent transparent transparent;
    }
    
    
    
    /* Add animation (fade in the popup) */
    @-webkit-keyframes fadeIn {
      from {opacity: 0;} 
      to {opacity: 1;}
    }
    
    @keyframes fadeIn {
      from {opacity: 0;}
      to {opacity:1 ;}
    }
    </style>
    </head>
    <body style="text-align:center">
    
    <h2>Popup</h2>
    
    <div class="popup">over me to toggle the popup!
      <span class="popuptext" id="myPopup">A Simple Popup!         </span>
    </div>
    
    
    
    </body>
    </html>  

Комментарии:

1. Применение этого к вопросу OP не является супер прямым.

2. Разве это не должно быть .classB{} (с полной остановкой), или я что-то упускаю?