2016-05-27 2 views
18

Я создал глобальную таблицу стилей, используя sass, и поместил ее в public/style/styles.scss. Я указываю только цвет фона.angular-cli как добавить глобальные стили?

В индексе, я добавил ссылку на него: <link rel="stylesheet" href="style/styles.css">

Цвет фона не работает на бирке тела. При проверке тега тела я вижу, что фоновый цвет был применен, но отменен scaffolding.less:31

Что я делаю неправильно?

Заранее спасибо

ответ

26

Начиная с версии бета-версии CLI (которая использует окончательный вариант Angular 2.0) глобальную таблицу стилей можно связать внутри angular-cli.json под клавишей «styles». Это ссылка на файл относительно каталога src/, который по умолчанию равен style.css.

Используя этот метод, вы можете:

  • Скопируйте глобальные стили в src/styles.css
  • импорта Использование CSS для импорта внешних правил в styles.css
  • Добавить еще глобальные стили через apps[0].styles собственности в angular-cli.json

См. Также Global Styles в angular-cli 's wiki.

+0

работает! и вам не нужно добавлять в файл index.html, как только вы добавляете в angular-cli.json –

+1

. Есть ли за/против использование импорта CSS для импорта в 'styles.css', а просто добавление их в свойство 'styles'' .angular-cli.json'? – WillyC

+1

@WillyC интересующий вопрос. Я настраиваю новый проект с использованием текущей версии CLI (v1.0.0) и тестировал оба метода. Вывод точно такой же, даже хеш. Единственная рекомендация, которую я хотел бы сделать, - импортировать стили приложений в 'styles.css', тогда как сторонние стили (например, Bootstrap) будут лучше определены в' .angular-cli.json'. – filoxo

1

Я была такая же проблема и нашли this example от до того, как была даже дерзость/меньше поддержки в кли. Я полагаю, что текущая сборка cli (1.0.0-beta.5) может компилировать только sass компонента и даже игнорировать .css в папке/src. Мне удалось разместить глобальный * .css в общедоступной/папке и скопировать его в/dist, но не удалось получить такое же поведение из/src, и препроцессоры по-видимому не компилировались по умолчанию. Я полагаю, что это может быть по дизайну и ИМХО несколько противоречивым. Угловой кли успешно строится на вершине Брокколи, и, возможно, стоит потратить время и усилия, чтобы узнать, как настроить сборку с использованием брокколи, как в примере ниже:

Вот копия углового-cli-build. js Я закончил с.

'use strict'; 
/* global require, module */ 

var Angular2App = require('angular-cli/lib/broccoli/angular2-app'); 
var compileSass = require('broccoli-sass'); 
var mergeTrees = require('broccoli-merge-trees'); 
var _ = require('lodash'); 
var glob = require('glob'); 

module.exports = function(defaults) { 

    let sourceDir = 'src'; 
    let app = new Angular2App(defaults, { 
     sourceDir: sourceDir, 
     sassCompiler: { 
     includePaths: [ 
      'src/style' 
     ] 
     }, 
     vendorNpmFiles: [ 
     'systemjs/dist/system-polyfills.js', 
     'systemjs/dist/system.src.js', 
     'zone.js/dist/*.js', 
     'es6-shim/es6-shim.js', 
     'reflect-metadata/*.js', 
     'rxjs/**/*.js', 
     '@angular/**/*.js' 
     ] 
    }); 
    let styles = mergeTrees(_.map(glob.sync('src/**/*.scss'), function(sassFile) { 
     sassFile = sassFile.replace('src/', ''); 
     return compileSass(['src'], sassFile, sassFile.replace(/.scss$/, '.css')); 
    })); 
    return mergeTrees([app, styles], { overwrite: true }); 
}; 
+0

Я пробовал это, и это не сработало для меня. Спасибо за ответ, хотя, я пойду с подходом Филиппа. – Thibs

+0

В примере была ошибка, исправлена. Стили должны переопределить приложение. –

0

Я использую следующую стратегию (хотя я не видел каких-либо официальных решений по этому вопросу от углового Cli команды, так что может быть лучше, метод там):

Если все мои файлы src находятся в файле src/app/..., я помещаю файл app.scss в каталог ./app. Что же тогда будет скомпилирован автоматически CSS с текущей конфигурацией сборки, так что я могу включить его в моем index.html как таковой:

<link rel="stylesheet" type="text/css" href="app/app.css"> 

Если файловая структура отличается по какой-либо причине из файловой структуры в CLI по умолчанию, просто убедитесь, что файл app.scss включен в тот же каталог, где живет ваш основной компонент приложения. Мне нравится эта техника, потому что это означает, что мне не нужно изменять сборку, что делает ее менее болезненной для обновления проекта в будущем.

+0

Это работает до тех пор, пока мы не услышим ответ от команды angular-cli. Я буду использовать это, так как мне не нужно изменять какие-либо настройки. – Thibs

3

В то время как я думаю, @filoxo's answer это документально решение, что-то вроде следующих работ для меня, как хорошо, и может сделать его более ясным, какой компонент нуждается в нем:

require('style!../../../node_modules/bootstrap/scss/bootstrap-reboot.scss'); 

Или при использовании более поздних версий угловыми CLI :

require('style-loader!../../../node_modules/bootstrap/scss/bootstrap-reboot.scss'); 

Или:

@Component({ 
    selector: 'my-component', 
    styles: [require('style-loader!../../../node_modules/bootstrap/scss/bootstrap-reboot.scss')], 
    styleUrls: ['./my.component.scss'] 
}) 

Последнее может быть запрещено; возможно, не следует указывать как styles, так и styleUrls, так как я получаю «Литерал объекта не может иметь несколько свойств с тем же именем в строгом режиме» и «Стиль дублирующего идентификатора».

+0

Все еще исследуя: возможно, не следует указывать как 'styles', так и' styleUrls', поскольку я получаю «Литерал объекта не может иметь несколько свойств с помощью то же имя в строгом режиме "и" Дублировать идентификатор "стилей". – Arjan

+0

... тоже, некоторые претензии это не работает с AOT, но для меня это (при использовании 'ng build --aot'). – Arjan

-1

Добавить scss в массив стилей angular-cli.json.

+1

Привет и добро пожаловать в переполнение стека! Спасибо, что оставили ответ, но можете ли вы объяснить всем заинтересованным людям, как они могут делать то, что вы предлагаете? –

5

Я знаю, что это слишком поздно, но по мере того, как все меняется. По состоянию на 16 марта 2017 года

это работало для меня для cli.

<link rel="stylesheet" href="src/styles.css"> 
1

просто переименовать SRC/styles.css в SRC/styles.scss

запомнить переименовать styles.css в styles.scss в .angular-cli.json тоже.

Смежные вопросы