Выбор родительского стиля на основе условия в SCSS

#html #css #sass #styles

Вопрос:

У меня есть таблица, где я обычно display: flex отображал таблицу. У меня также есть два типа строк, где один-заголовок, а другой-тело таблицы. Текст заголовка таблицы выровнен по центру. Но я хочу, чтобы один из столбцов тела был выровнен по правому краю.

Теперь вы заметили, что я определил заголовок и основную часть столбцов чистой цены одинаковой ширины, чтобы они могли соответствующим образом добавить одинаковую ширину. Теперь я хочу добавить стиль, в котором мне нужно задать только net price столбец тела, который должен быть выровнен по правому краю.

Как я могу добавить селектор в блок net-price SCSS, чтобы стиль применялся только к телу, а не к заголовку таблицы?

 <table>
        <thead class="service-grid__wrapper__header">
            <td>Header one</td><td class="net-price">Header two</td>
        </thead>
        <tbody class="service-grid__wrapper__body">
            <td>Column one</td><td class="net-price">Columntwo</td>
        </tbody>
    </table> 
     .service-grid {
          amp;__wrapper {
            margin: 0;
            background-color: $white;
            amp;__header {
              font-family: "Roboto-Medium";
              display: flex;
            }
            amp;__body {
              display: flex;
              font-family: "Roboto-Regular";
            }
            .net-price {
              width: 160px;
              .myaddtional-style { /* Style block where I need to apply only to the body cell and not the header cell */
                text-align: right;
              }
            }
          }
        } 

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

1. Я думаю, что вы действительно должны попытаться сократить свой опубликованный код стиля, чтобы сделать вопрос как можно более ясным. Я изо всех сил пытаюсь понять, к чему вы клоните. О, и лучше разделить html и стиль на два блока кода в уценке.

2. @Мартин извиняется, вопрос был смягчен для большей ясности.

Ответ №1:

Вам нужно будет использовать service-grid__wrapper__body класс в своем селекторе. Самый простой способ выразить это в вашем текущем SCSS будет выглядеть так (все остальные свойства css опущены):

 .service-grid {
  amp;__wrapper {

    // order is important, regular styles before specialized styles
    .net-price {
      width: 160px; // the regular styles for net-price
    }

    amp;__header {
    }

    amp;__body {
      .net-price { text-align: right; } // the special handling inside the __body
    }

  }
}
 

альтернативно

 .service-grid {
  amp;__wrapper {

    amp;__header {
    }

    amp;__body {
    }

    .net-price {
      width: 160px;
    }

    amp;__body .net-price {
      text-align: right;
    }

  }
}
 

И вот еще одна альтернатива, чтобы запутать всех ваших коллег:

 .service-grid {
  amp;__wrapper {

    amp;__header {
    }

    amp;__body {
    }

    $wrapper-class: amp;;

    .net-price {
      width: 160px;
      @at-root #{$wrapper-class}__body .net-price { text-align: right; }
    }

  }
}
 

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

1. Это именно то, чего я хочу избежать. Может ли это быть достигнуто без дополнительного блока чистой цены снаружи?

2. @Kirk Ну, это не становится более читабельным, но я добавил третью альтернативу.