SASS, как импортировать указанные классы из файла CSS, а не весь

Я пытаюсь импортировать некоторые классы из файла CSS, например bootstrap.css, в файл site.scss SASS, а не все из них. Проблема со следующим кодом заключается в том, что я получаю все классы начальной загрузки в своем скомпилированном файле site.css:

site.scss

@import "bootstrap";

.my-div-md-6
{
    /*some other styles*/
    @extend .col-md-6;
}

С другой стороны, это можно сделать с помощью LESS, импортировав bootstrap.css в качестве ссылки, используя этот код:

site.less

@import (less, reference) "bootstrap.css";

.my-div-md-6{
     /*some other styles*/
    &:extend(.col-md-6);
}

Скомпилированный вывод LESS очень легкий, как показано ниже:

сайт.css

.my-div-md-6 {
  position: relative;
  min-height: 1px;
  padding-right: 15px;
  padding-left: 15px;
}
@media (min-width: 992px) {
  .my-div-md-6 {
    float: left;
  }
  .my-div-md-6 {
    width: 50%;
  }
}
.my-div-md-6 {
  /*some other styles*/
}

Можно ли добиться этого с помощью SASS? Если да, то быстрый пример поможет.

Спасибо.


person Efe    schedule 29.03.2017    source источник
comment
И разве индивидуальная версия не дает вам того, что вам нужно?   -  person Roope    schedule 29.03.2017
comment
Bootstrap был и примером, мой домен вопроса может быть любым файлом css. Я пометил bootstrap, потому что большинство пользователей bootstrap играют с меньшими затратами и дерзостью.   -  person Efe    schedule 29.03.2017
comment
я не думаю, что вы можете изначально использовать SASS; в документации, похоже, конкретно не говорится, однако я считаю, что изучение оберток вокруг sass может сделать это (какой диспетчер задач вы используете? grunt/webpack/gulp, что-то еще?)   -  person Denis Tsoi    schedule 29.03.2017
comment
изучая это подробнее, функция, которую вы упомянули, - это import reference, что является чем-то вроде новой концепции для меня, использующей scss. Кажется, есть silent classes what-is-the-equivalent-of-lesss-import-reference-style-in-sass а также, похоже, это ожидающая функция в репозитории sass git проблема   -  person Denis Tsoi    schedule 29.03.2017
comment
@Denis Вы имеете в виду миксины или что-то вроде оберток ?? В настоящее время я использую веб-компилятор в Visual Studio, но независимо от того, делает ли это какой-либо другой исполнитель задач.   -  person Efe    schedule 29.03.2017
comment
@efe, я думал, есть ли что-то, например, в webpack, которое читает файл sass для reference, а затем преобразует эту ссылку во что-то подходящее .... в противном случае вам, возможно, придется использовать un-css или post-css, если нет доступного инструмента для вас там   -  person Denis Tsoi    schedule 29.03.2017
comment
@Denis Ваша ссылка - хороший ответ, который я проверил, прежде чем задавать этот вопрос. Я использовал заполнители, которые расширяют класс CSS из внешнего файла, но скомпилированный результат был таким же, содержащим целые классы.   -  person Efe    schedule 29.03.2017
comment
дайте мне минуту - я читаю запрос функции импорта github sass (ссылка ранее)   -  person Denis Tsoi    schedule 29.03.2017
comment
@Denis Спасибо за внимание. Я также читаю о un-css и post-css.   -  person Efe    schedule 29.03.2017
comment
@Efe модули CSS могут помочь ССЫЛКА:   -  person Denis Tsoi    schedule 29.03.2017
comment
похоже, что нативный ruby ​​sass давно хотел/обсуждал эту функцию (более 4 лет), особенно с разговорами о sass4, но ничего существенного (не задержал бы дыхание) для быстрого решения - я бы использовал POSTCSS/UNCSS для очистите вывод css (к сожалению, еще один шаг сборки)... углубимся   -  person Denis Tsoi    schedule 29.03.2017
comment
@Денис, это действительно круто. Я просто удивлен react.js (не сталкивался с этим). Но здесь есть проблема для меня. С этим решением мне нужно отправить x.css (классы которого мне не нужны) клиенту, в котором будут проблемы с производительностью, такие как размер файла для загрузки для клиента. Я прав?   -  person Efe    schedule 29.03.2017
comment
@efe TLDR; СОВЕТУЮ: ИСПОЛЬЗУЙТЕ АЛЬТЕРНАТИВНЫЕ МЕТОДЫ, чем родной Sass поэтому, во-первых, вам нужно вырезать неиспользуемый css, сгенерированный sass (потому что нет ссылки на импорт). работали над google dart - они начали переносить sass с ruby на dart, отсюда и медленные обновления функций. Я предполагаю, что из-за этого будущие выпуски могут быть привязаны к выпуску dart/sass, и есть некоторая неопределенность в отношении нативной поддержки ruby.   -  person Denis Tsoi    schedule 29.03.2017
comment
@Денис ВАУ! невезение. вы хороший исследователь и кажется, что вам действительно нужна эта функция sass больше, чем мне!! Еще один вопрос. Влияет ли POST/UNCSS на медиа-запросы? предположим, что я хочу импортировать часть бутстрапа (пример файла css с медиазапросами) в свой sass и избежать отправки бутстрапа клиенту (полностью удалив любой CDN bootstrap.css на моих страницах). Поскольку медиа-запросы не упоминаются явно, а используются для адаптивного дизайна, будет ли uncss распознавать это и сохранять медиа-запросы? Что-то вроде умной ходьбы по зависимостям.   -  person Efe    schedule 29.03.2017
comment
@Efe UNCSS удалит неиспользуемый css и без параметра мультимедиа удалит медиа-запрос (в uncss есть параметр медиа-запроса для сохранения стилей) REF: ТАК ОТВЕТ   -  person Denis Tsoi    schedule 29.03.2017
comment
Давайте продолжим обсуждение в чате.   -  person Denis Tsoi    schedule 29.03.2017
comment
@Den Вы нашли альтернативы UNCSS? Sass, похоже, до сих пор не включает эту функцию   -  person Tobi    schedule 28.08.2020
comment
эххх, этому вопросу около 3 лет - я не уверен, столкнулись ли вы с той же проблемой или с чем-то другим, возможно, вы захотите задать новый вопрос   -  person Denis Tsoi    schedule 28.08.2020


Ответы (1)


К сожалению, простого ответа нет, и на момент написания этой статьи Ruby Sass изначально не поддерживал функцию LESS import (reference).


TLDR; Предложения:

  • используйте uncss или postcss, чтобы удалить скомпилированный css из файла перед завершением таблицы стилей.
  • если можете, используйте примеси и классы-заполнители для перезаписи файла scss, но это САМОЕ время.
  • import "file" как частичное, так что file="_file.scss" и @extend .class, если вам абсолютно необходимо, (ручной метод, но предположим, что он сработает)

ССООН

Вы можете использовать uncss как пакет из npm для удаления скомпилированного css (я знаю, что это неэффективно, но если бы вам пришлось использовать SASS), тогда вы удалили бы мякину, созданную из пример импорта бутстрапа.

КАК?
ЦИТАТА: SO-Answer-Joesph

Как? Процесс, с помощью которого UnCSS удаляет неиспользуемые правила, выглядит следующим образом:

  • Файлы HTML загружаются PhantomJS, и выполняется JavaScript.
  • Используемые таблицы стилей извлекаются из полученного HTML.
  • Таблицы стилей объединяются, а правила анализируются css-parse.
  • document.querySelector отфильтровывает селекторы, которых нет в файлах HTML.
  • Остальные правила преобразуются обратно в CSS.

Так что да, он удаляет селекторы не в DOM во время выполнения. Если у вас есть динамически добавляемые селекторы, вы можете заставить uncss игнорировать их, добавив комментарий: /* uncss:ignore */ перед ними, например...

УБЕДИТЕСЬ, ЧТО ВЫ ДОБАВИЛИ МАТЕРИАЛ В UNCSS
REF: SO-Answer-Deksden


Базовое исследование SASS:
Подведение итогов выше:

nex3: один из основных лидов sass был в google и работал над dart. Они выпустили dart-sass (нестабильный релиз) в качестве перезаписи в пользу замены и улучшения ruby sass. Это интересно, поскольку эта переработка также объясняет отсутствие разработки функций в Ruby Sass, а также необходимость перезаписи. Поскольку основной участник порта ruby ​​sass, то есть libsass (реализация ruby-sass на C++), покинул команду libsass, это дает дополнительный импульс для улучшения производительности sass.

Кредит:

person Denis Tsoi    schedule 29.03.2017