Sass: применение одного и того же правила к двум классам, чтобы гарантировать, что цвет фона элемента span не изменится - PullRequest
1 голос
/ 08 апреля 2020

Я работаю над приложением ReactJS, и у меня есть следующий код HTML, который используется в компоненте:

<div class="order-box">
    <div class="order-header">Table #1</div>
    <div class="order-list">
        <div class="order-item-container  ">
            <span class="checkmark"></span>
            <div class="order-item-name">Fish and Chips&nbsp;&nbsp;×&nbsp;&nbsp;1</div>
        </div>
        <div class="order-item-container  ">
            <span class="checkmark"></span>
            <div class="order-item-name">Teriyaki Chicken&nbsp;&nbsp;×&nbsp;&nbsp;1</div>
        </div>
        <div class="order-item-container  ">
            <span class="checkmark"></span>
            <div class="order-item-name">Satay Chicken&nbsp;&nbsp;×&nbsp;&nbsp;2</div>
        </div>
        <div class="order-item-container  ">
            <span class="checkmark"></span>
            <div class="order-item-name">Lava Cake&nbsp;&nbsp;×&nbsp;&nbsp;2</div>
        </div>
    </div>
</div>

Я использую Sass для стилизации кода HTML. У меня есть следующий код Sass:

.order-box {
    border: 1px solid #c3c9c8;
    height: 400px;
    width: 400px;
    border-radius: 5px;
    box-shadow: 0 10px 6px -6px #ededed;
    overflow: hidden;
}

.order-list {
    overflow-y: scroll;
    height: 80%;
}

.order-header {
    text-align: center;
    background: #222222;
    color: #ffffff;
    font-weight: bold;
    font-size: 26px;
    height: 20%;
    display: flex;
    justify-content: center;
    align-items: center;
}


.order-item-container {
    display: block;
    position: relative;
    padding-left: 35px;
    cursor: pointer;
    font-size: 22px;
    user-select: none;
    margin: 30px;

    &.order-item-cooked {
        .order-item-name {
            text-decoration: line-through;
        }

        .checkmark {
            background: #222222;

            &:after {
                display: block;
            }
        }
    }


    &.order-item-delivered {
        .order-item-name {
            text-decoration: line-through;
        }

        .checkmark {
            background: #222222;

            &:after {
                display: block;
            }
        }
    }


    &:hover:not(.order-item-cooked) .checkmark {
        background-color: #ccc;
    }


    &:hover:not(.order-item-delivered) .checkmark {
        background-color: #ccc;
    }

}

.checkmark {
    position: absolute;
    top: 2px;
    left: 0;
    height: 25px;
    width: 25px;
    border-radius: 15px;
    background-color: #eee;

    &:after {
        content: "";
        position: absolute;
        display: none;
        left: 9px;
        top: 5px;
        width: 5px;
        height: 10px;
        border: solid white;
        border-width: 0 3px 3px 0;
        transform: rotate(45deg);
    }
}

В моем коде React, в зависимости от определенных условий, классы "order-item-cooked" и "order-item-delivered" добавляются в div с классом "order-item-container".

Например, у вас может быть одно из следующих:

<div class="order-item-container order-item-cooked">
<div class="order-item-container order-item-delivered">

Когда у div с классом order-item-container также есть класс "order-item-cooked" или "order-item-delivered", если один из них находится над определенной галочкой по тегу span внутри этого div, цвет фона не должен изменяться на # ccc.

Следующий код Sass имеет дело с этим:

    &:hover:not(.order-item-cooked) .checkmark {
            background-color: #ccc;
        }


   &:hover:not(.order-item-delivered) .checkmark {
            background-color: #ccc;
        }

С вышеупомянутым в моем файле Sass при наведении указателя мыши на флажок внутри элемента div с классом order-item-cooked или order-item-delivered цвет фона меняется на # ccc.

Я не уверен, почему это происходит , Любые идеи приветствуются.

1 Ответ

0 голосов
/ 08 апреля 2020

Вы должны объединить оба псевдокласса not() в один селектор, если хотите, чтобы они работали как логический and:

&:hover:not(.order-item-cooked):not(.order-item-delivered)  .checkmark {
    background-color: #ccc;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...