Укажите дочерний элемент в родительском в svelte

Я пытаюсь воспроизвести шаблон загрузки страницы из здесь

HTML

<div class = "loading">
  <div class = "loading__ring">
    <svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" version = "1.1" x = "0px" y = "0px" viewBox = "0 0 100 100" style = "enable-background:new 0 0 100 100;" xml:space = "preserve"><path>...../path></svg>
  </div>
<div class = "loading__ring">
    <svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" version = "1.1" x = "0px" y = "0px" viewBox = "0 0 100 100" style = "enable-background:new 0 0 100 100;" xml:space = "preserve"><path>......</path></svg>
  </div>
</div>

Обычный стиль CSS

/* Demo */
body {
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(#ecf0f1, #fff);
}

/* Animation */
@keyframes rotate {
  to {
    transform: rotate(360deg);
  }
}

/* Variables */
$loader-size: 100px;

/* Loading Icon */
.loading {
  width: $loader-size;
  height: $loader-size;

  &__ring {
    position: absolute;
    width: $loader-size;
    height: $loader-size;
    
    &:first-child {
      transform: skew(30deg,20deg);
    }

    &:last-child {
      transform: skew(-30deg,-20deg) scale(-1, 1);

      svg {
        animation-delay: -0.5s;
      }
    }

    svg {
      animation: rotate 1s linear infinite;
      fill: rgba(0, 0, 0, 0.2);
    }
  }
}

Я попытался изменить стиль svelte, используя пример, указав дочерний элемент, например .loading:global(loading__ring), но именно здесь я получаю сообщение об ошибке

Internal server error: /Users/mypc/Documents/testingsveltenvite/v2/src/App.svelte:18:2 Identifier is expected

Как изменить указание ребенка &__ringили.loading:global(loading__ring) и &:first-child в svelte

/* Loading Icon */
.loading {
  width: var(--size);
  height: var(--size);

  .loading:global(loading__ring) {
    position: absolute;
    width: var(--size);
    height: var(--size);
    
    &:first-child {
      transform: skew(130deg,15deg);
    }

    &:last-child {
      transform: skew(-130deg,-1deg) scale(-1, 1);

      svg {
        animation-delay: -0.91s;
      }
    }

    svg {
      animation: rotate 4s linear infinite;
      fill: rgba(0, 0, 0, 0.2);
    }
  }
}
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не понимаю, зачем вам нужен флаг :global(), если у вас все внутри одного компонента РЕПЛ - нужно только преобразовать scss в обычный css (или добавить scss в проект Svelte)
(тег body здесь нуждается в :global(body), потому что он не входит в область действия компонента. Если вы хотите сделать это загружаемым компонентом, вам, вероятно, лучше добавить фоновый элемент и стилизовать его вместо этого)

<script>
    import {path} from './path'
</script>

<div class = "loading">
    <div class = "loading__ring">
        <svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" version = "1.1" x = "0px" y = "0px" viewBox = "0 0 100 100" style = "enable-background:new 0 0 100 100;" xml:space = "preserve">
            {@html path}
        </svg>
    </div>
    <div class = "loading__ring">
        <svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" version = "1.1" x = "0px" y = "0px" viewBox = "0 0 100 100" style = "enable-background:new 0 0 100 100;" xml:space = "preserve">
            {@html path}
        </svg>
    </div>
</div>

<style>
    :global(body) {
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background: linear-gradient(#ecf0f1, #fff);
    }

    /* Animation */
    @keyframes rotate {
        to {
            transform: rotate(360deg);
        }
    }

    /* Variables */
    :root {
        --size: 100px;
    }

    /* Loading Icon */
    .loading {
        width: var(--size);
        height: var(--size);
    }

    .loading__ring {
        position: absolute;
        width: var(--size);
        height: var(--size);
    }

    .loading__ring:first-child {
        transform: skew(30deg,20deg);
    }

    .loading__ring:last-child {
        transform: skew(-30deg,-20deg) scale(-1, 1);
    }

    .loading__ring:last-child svg {
        animation-delay: -0.5s;
    }

    .loading__ring svg {
        animation: rotate 1s linear infinite;
        fill: rgba(0, 0, 0, 0.2);
    }
</style>

Другие вопросы по теме