Отправка динамических переменных в SASS

В настоящее время я работаю над новым проектом, который позволяет пользователям изменять внешний вид веб-сайта по своему вкусу. Они могут изменить цвет фона и прочее, что будет сохранено в базе данных для последующего использования, или они могут быть сохранены в файле cookie. Однако я использовал php-документ для эмуляции таблицы стилей, чтобы в качестве примера я мог передавать такие переменные, как <link rel="stylesheet" type="text/css" href="main.php?bgColor=#444". Таким образом, я мог просто сделать css динамическим и не слишком полагаться на javascript.
Однако один друг упомянул об использовании SASS, но я действительно не знаю, подходит ли он для моего проекта, так как я мало знаю о структуре компаса. Как бы вы передали динамические переменные в этот файл .sass или .scss? Вы просто делаете оператор @import "php-variables"; и включаете файл php? или вы можете отправлять динамические переменные, как я сделал с php?
А также, каковы преимущества использования php по сравнению с SASS или наоборот?


person lomas09    schedule 25.06.2013    source источник
comment
sass !== compass. С SASS вы можете определить свои переменные в своей таблице стилей и, как и в php, вы можете использовать их везде, где вам нужно.   -  person Fabrizio Calderan    schedule 25.06.2013
comment
но как бы вы получили переменные cookie? или даже получить или опубликовать переменные?   -  person lomas09    schedule 25.06.2013
comment
Sass не может импортировать PHP-код (а почему вы ожидали, что он сможет?). Sass не динамичен в том смысле, в каком динамичен PHP: код Sass компилируется в обычный файл CSS, он не предназначен для перекомпиляции на лету. У него нет концепции состояния (нет переменных get/request/post/cookie).   -  person cimmanon    schedule 25.06.2013
comment
Я знаю, что он предварительно скомпилирован, но после прочтения этого вопроса stackoverflow.com/questions/8985109/, они упомянули, что делают что-то подобное, однако они используют phpsass, и мне просто интересно, может ли это быть достигается с помощью только sass   -  person lomas09    schedule 25.06.2013


Ответы (2)


Кажется, здесь есть фундаментальное непонимание, поэтому я дам короткий ответ и более длинный.

короткая

Вы не можете отправлять динамические переменные в Sass. Может быть какой-то порт для PHP, который делает это возможным, но с использованием только Sass это невозможно.

дольше

Вы можете ознакомиться с что такое Sass и как он вписывается в ваш инструментарий. Похоже, вы используете PHP, поэтому я предполагаю, что у вас будет PHP, отображающий HTML-шаблоны/делающий магию БД, может быть, немного JavaScript для выполнения сценариев на стороне клиента, и у вас будут элементы стиля CSS (обычный, ванильный CSS). на Вашем сайте.

Sass/SCSS (далее Sass) не заменяет CSS (вы никогда не увидите <link type="text/sass">), он просто предоставляет другой синтаксис для написания стилей, которые позже компилируются в CSS.

Sass обычно компилируется в CSS перед отправкой ваших ресурсов в производство, он не генерируется, когда пользователь запрашивает его. Между вашими файлами Sass и вашим HTML-документом нет реальной связи, поэтому вы не сможете передавать какие-либо переменные в свои файлы Sass.

person imjared    schedule 25.06.2013
comment
Да, есть порты PHP, которые позволяют динамически компилировать SASS из PHP, например. github.com/leafo/scssphp или github.com/richthegeek/phpsass, вопрос только в том, стоят ли накладные расходы и нужны ли вам другие функции SASS помимо переменных. - person Matt Browne; 25.03.2014
comment
Речь идет о LESS, а не о SASS, но дает представление о том, как к этому подойти: css-tricks.com/using-less-as-a-live-css-engine - person Matt Browne; 25.03.2014

@imjared описал, почему SASS не является подходящим решением, и я попытаюсь предложить, какое из них может быть хорошим.

Ваше решение обслуживания динамического CSS из PHP-скрипта не очень хорошо, потому что оно не допускает кэширования. Каждый пользователь должен будет загружать файл CSS каждый раз, когда он обновляет страницу или переходит по ссылке.

Вместо этого вам нужно создать файлы CSS, сохранить их как настоящие файлы и предоставить к ним динамические ссылки.

Имя файла может совпадать с именем соответствующего пользователя (пожалуйста, будьте особенно осторожны, чтобы очистить имена файлов), тогда файл CSS будет перезаписываться каждый раз, когда пользователь обновляет свои стили.

person Andrey Mikhaylov - lolmaus    schedule 25.06.2013
comment
Ваше решение обслуживания динамического CSS из PHP-скрипта не очень хорошо, потому что оно не допускает кэширования. Каждому пользователю придется загружать файл CSS каждый раз, когда он обновляет страницу или переходит по ссылке. Это совершенно неверно. Файл PHP обычно можно кэшировать, как и любой другой файл. Вы можете использовать внутреннюю логику, чтобы определить, был ли изменен файл scss, и перекомпилировать его только при необходимости, в противном случае вернуть 304 немодифицированный заголовок, как и любой другой файл. Я не говорю, что это эффективно, но это все же возможно. - person JimmyMcHoover; 19.02.2015