- 1.Trochę teorii scss i budowy package’a Element UI
- 2.Import wybranych tylko styli
scss
dla Element UI
Pisząc ostatni projekt zdecydowałam się na użycie gotowego już komponentu dla Vue Elements UI. Jest on bardzo wygodny do szybkiego zrobienia app z wykorzystaniem już napisanych komponentów i stylów. Ma jednak poważną wadę. Zresztą dotyczy to większości spredefiniowanych elementów.
Według dokumenatcji powinniśmy zaimplementować style Element UI w naszym projekcie poprzez:
1
2
//NIE DODAWAJ TEJ LINII
import "element-ui/lib/theme-chalk/index.css";
Importujemy więc do naszego projektu już skompilowane style z .scss
do .css
. Nadpisywanie tak zaimplementowanego pliku jest dość pracochłonne. By wprowadzić poważniejsze zmiany, musimy nadpisać styl elementów zwykłym kodem css
.
Co więc możemy zrobić innego?
Pierwsza i naważniejsza rzecz - NIE DODAWAĆ do naszego projektu całego index.css
, tak jak podają w instrukcji. Zamiast tego możemy ułożyć własny import, w dodatku tylko z tymi stylami, jakich komponentów używamy. Własna implementacja będzie miała wpływ na zmniejszenie wielkości importowanych plików, co uważam za plus.
Z całego Element UI korzystam we wspomnianym na wstępie projekcie jedynie z column, card, button, messageBox, alert, dialog i jedynie te style chciałabym zaimplementować - (optymalizacja zawsze na pierwszym miejscu).
W dodatku chciałabym zmienić breakpoints
(punkty łamania układu i zachowywania elementów, w zależności od wielkości urządzenia, na jakim są wyświetlane) dla mojej app. No kto widział aby xs ustawiać na wartość 768px.
Po krótkim researchu w necie, wielu próbach, w końcu się udało. Należało zrobić mniej więcej tak:
1.Trochę teorii scss i budowy package’a Element UI
Jak to w node wszystkie package z jakich korzysta nasz projekt znajdziemy w folderze node_modules
. Każdy, kto miał choć chwilę styczności z Node i npm o tym wie.
W tym folderze też znajdziemy src
dla Element UI. Bezpośrednia ścieżka to: node_modules\element-ui\packages\theme-chalk\src\
. Tutaj są wszystkie pliki, które nas interesują.
Przeglądając plik ze zmiennymi - ponieważ to on był dla mnie najważniejszy - czyli node_modules\element-ui\packages\theme-chalk\src\common\var.scss
zauważyłam, że wszystkie zmienne są określone jako !deafult
. Co to oznacza w scss
?
W dokumentacji sass’a możemy przeczytać,
You can assign to variables if they aren’t already assigned by adding the !default flag to the end of the value. This means that if the variable has already been assigned to, it won’t be re-assigned, but if it doesn’t have a value yet, it will be given one.
Czyli zmienna zdefiniowana jako !deafult
będzie wykorzystywana, wtedy i tylko wtedy gdy wcześniej nie zostanie zdefiniowana zmienna “zwykła” o tej samej nazwie.
Czyli, jeżeli mamy zmienną w naszych plikach scss zdefiniowaną jako:
1
$bg: #000;
A następnie dodamy:
1
$bg: #ff0 !default;
To nasz element któremu nadamy kolor tła w ten sposób:
1
2
3
.div {
background-color: $bg; //będzie miał tło czarne, a nie żółte
}
Będzie zakolorowany na czarno, a nie na żółto.
W momencie jeśli usuniemy deklarację tła jako #000
nasz element zakoloruje się na żółto.
Będzie on żółty również wtedy, gdy zmienimy kolejność, czyli wpierw zdefiniujemy zmienną jako !default
, użyjemy jej przypisując do elementu .div
, a następnie zdefiniujemy jako zwykłą zmienną - naturalny cykl. Dopiero nadpisując ponownie przypisanie tła do elementu znów zakoloruje nam go na #000
.
1.1.Uzbrojeni w podstawową wiedzę możemy zabrać się do zadania.
2.Import wybranych tylko styli scss
dla Element UI
- W naszym głównym pliku ze stylami nazwijmy go jako
base.scss
definiujemy zmienną z czcionką o wartości~element-ui/packages/theme-chalk/src/fonts
, inaczej wyskoczy nam błąd:
1
Can't resolve './fonts/element-icons.ttf'
Następnie deklarujemy wszystkie te zmienne, jakie chcemy nadpisać.
Dla mnie były to breakpointy
. Oczywiście w tym fragmencie, kolejność deklaracji nie ma znaczenia.
1
2
3
4
5
6
7
8
$--sm: 350px;
$--md: 450px;
$--lg: 1200px;
$--xl: 1920px;
$--font-path:"~element-ui/packages/theme-chalk/src/fonts";
.
.
.
- Importujemy pliki
.scss
Element UI zaczynając odbase.scss
. Pamiętajmy, że wszystkie powyżej zdeklarowane zmienne zostaną nadpisane naszymi wartościami. Jak jakiejś nie zdefiniowaliśmy zostanie użyta zmienna domyślna określona przez autorów Element UI.
1
2
3
4
5
6
7
8
9
@import "~element-ui/packages/theme-chalk/src/base.scss";
//dalej wszystkie style tych komponentów, jakie wykorzystujemy
@import "~element-ui/packages/theme-chalk/src/card";
@import "~element-ui/packages/theme-chalk/src/col.scss";
@import "~element-ui/packages/theme-chalk/src/dialog.scss";
@import "~element-ui/packages/theme-chalk/src/message-box.scss";
@import "~element-ui/packages/theme-chalk/src/alert.scss";
@import "~element-ui/packages/theme-chalk/src/card.scss";
@import "~element-ui/packages/theme-chalk/src/button.scss";
- No i jak to z
.scss
bywa, nasz plikbase.scss
importujemy do głównego pliku projektuApp.vue
poprzez:
1
2
3
4
<style lang="scss">
//ścieżka do naszego base
@import "@/scss/base.scss";
</style>