Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΡΠ»ΡΠΆΠ°ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡ Π½Π°Π΄ Front-End ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Gulp
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ bower
ΠΈ nodejs
(Π²ΠΌΠ΅ΡΡΠ΅ Ρ npm
)
$ git clone https://github.com/Enkil/template-frontend.git app-name
$ cd app-name
$ npm i -d
$ bower install
ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΈΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Bootstrap 3 ΠΈ Bootstrap Material Design. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π±Π»ΠΎΠ½ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΈ Π½Π΅ Π½Π°Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² - Ρ ΠΏΠΎΠΌΠΎΡΡΡ bower
ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ/ΡΠ΄Π°Π»ΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ.
$ gulp html
- ΡΠ±ΠΎΡΠΊΠ° HTML ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ΠΉ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.$ gulp js
- ΡΠ±ΠΎΡΠΊΠ° JavaScript ΠΏΡΠΎΠ΅ΠΊΡΠ°$ gulp less
- ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΈΡ Less$ gulp images
- ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ$ gulp svg
- ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ SVG$ gulp png-sprite
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ PNG-ΡΠΏΡΠ°ΠΉΡΠ°$ gulp svg-sprite
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ SVG-ΡΠΏΡΠ°ΠΉΡΠ°$ gulp fonts
- ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΈΡΡΠΎΠ²$ gulp clean
- ΠΎΡΠΈΡΡΠΊΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°build/
$ gulp webserver
- Π·Π°ΠΏΡΡΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ livereload ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°Π·Π½ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ$ gulp gh-pages
- ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Github Pages$ gulp build
- ΠΏΠΎΠ»Π½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°$ gulp watch
- Π·Π°ΠΏΡΡΠΊ Π·Π°Π΄Π°ΡΠΈwebserver
ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ$ gulp default
- Π·Π°ΠΏΡΡΠΊ Π·Π°Π΄Π°ΡΠΈwatch
src/
- ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² (html-ΡΠ°Π±Π»ΠΎΠ½Ρ, less-ΡΠ°ΠΉΠ»Ρ, ΡΠ°ΠΉΠ»Ρ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠΊΠΈ js, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π² ΡΠΏΡΠ°ΠΉΡΡ ΠΈ Ρ.Π΄.)build/
- ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΡΠΊΠΈdesign/
- ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠ°ΠΊΠ΅ΡΠ°. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Git ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°Π»ΠΈΡΠΎ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
ΠΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/
. Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ build/
Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΡΠ°ΠΉΠ»Ρ Π½Π΅ Π²Π½ΠΎΡΡΡΡΡ.
Back-End ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ/ΠΈΠ»ΠΈ ΠΠ°ΠΊΠ°Π·ΡΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° build/
ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠ°Π΄Π°ΡΠ° $ gulp html
Π‘ΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π΅ΡΡΡΠ°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠΎΡΠ½Π΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° src/
(ΠΏΡΠΈΠΌΠ΅Ρ index.html)
Π€Π°ΠΉΠ»Ρ html ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ Π±Π»ΠΎΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠΈΠΉ header, footer, ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠ΅ ΠΎΠΊΠ½Π° ΠΈ Ρ.Π΄.) ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/html-blocks/
:
src/html-blocks/common
- ΡΠ°ΠΉΠ»Ρ html-Π±Π»ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΡΠ°ΠΉΡΠ°src/html-blocks/common/modals
- ΡΠ°ΠΉΠ»Ρ html ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΡ ΠΎΠΊΠΎΠ½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΡΠ°ΠΉΡΠ°src/html-blocks/pages--external
- ΡΠ°ΠΉΠ»Ρ html-Π±Π»ΠΎΠΊΠΎΠ², Π²Π½Π΅ΡΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΡΠ° (ΡΡΡΠ°Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π»ΡΠ±ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±Π΅Π· Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ΅)src/html-blocks/pages--internal
- ΡΠ°ΠΉΠ»Ρ html-Π±Π»ΠΎΠΊΠΎΠ², Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΡΠ° (ΡΡΡΠ°Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»Π° "ΠΠΈΡΠ½ΡΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ")
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²Π½ΡΡΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ±ΠΎΡΠΊΠ° html ΠΏΡΠΎΠΉΠ΄Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
ΠΠ»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΠΈΠ΄Π°
<!--build:include html-blocks/pages--external/file-name.html-->
This will be replaced by the content of html-blocks/pages--external/file-name.html
<!--/build-->
- ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
file-name.html
Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π° ΠΌΠ΅ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°
ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΠΊΠΎΠ΄ html-ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Π±Π»ΠΎΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ Π±Π»ΠΎΠΊΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ.
ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΊ ΡΠ°ΠΉΠ»Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
Π ΡΠ°ΠΉΠ»Π΅ src/html-blocks/pages-external/header--external.html
ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° src/html-blocks/common/modals/login.html
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·ΠΎΠ² ΠΏΠΈΡΠ΅ΡΡΡΡ ΡΠ°ΠΊ
<!--build:include ../common/modals/login.html-->
This will be replaced by the content of ../common/modals/login.html
<!--/build-->
ΠΠ°Π΄Π°ΡΠ° $ gulp less
Π€Π°ΠΉΠ» src/styles/styles.less
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΡΠΎΡΠΈΡ
less-ΡΠ°ΠΉΠ»ΠΎΠ².
Π‘Π΅ΠΊΡΠΈΡ Third party
ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ less/css ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ².
Π‘Π΅ΠΊΡΠΈΡ Custom
- Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΈΠ»Π΅ΠΉ.
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² CSS, ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΠ»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Π½Π΄ΠΎΡΠ½ΡΡ
ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠ², ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΡ sourcemaps.
ΠΡΠΎΠ³ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΡΠΈΠ»Π΅Π²ΡΡ
ΡΠ°Π±Π»ΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/css
(style.css, style.min.css, style.min.css.map)
ΠΠ»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ ΠΊΡΡΠΏΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡ ΠΎΠΆΠ°Ρ Ρ html-Π±Π»ΠΎΠΊΠ°ΠΌΠΈ.
ΠΠ°Π΄Π°ΡΠ° $ gulp js
Π€Π°ΠΉΠ» src/js/vendor.js
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ js ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ².
Π€Π°ΠΉΠ» src/js/custom.js
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
js ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ (ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°ΠΉΠ»Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π°ΠΌΠΈ), ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΡ sourcemaps.
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/js
(main.js, main.min.js, main.min.js.map)
ΠΠ»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ ΠΊΡΡΠΏΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡ ΠΎΠΆΠ°Ρ Ρ html-Π±Π»ΠΎΠΊΠ°ΠΌΠΈ.
ΠΠ°Π΄Π°ΡΠ° $ gulp images
ΠΡΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΡΠΏΡΠ°ΠΉΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/images
.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΡΡ.
ΠΡΠΎΠ³ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/img/images/
ΠΠ°Π΄Π°ΡΠ° $ gulp svg
ΠΡΠ΅ SVG ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΡΠΏΡΠ°ΠΉΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/svg
.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ΅ SVG ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΡΡ.
ΠΡΠΎΠ³ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/img/svg/
ΠΠ°Π΄Π°ΡΠ° $ gulp png-sprite
ΠΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π² ΡΠΏΡΠ°ΠΉΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, png-ΡΠ°ΠΉΠ»Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ) Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/sprites/png
.
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠΏΡΠ°ΠΉΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/img/sprites/png/png-sprite.png
.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ ΡΠ°ΠΉΠ» src/styles/common/_png-sprite.less
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠΈ (mixins) Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠΏΡΠ°ΠΉΡΠ°.
ΠΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈ (mixin) Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ @sprite-filename
, Π³Π΄Π΅ filename - ΠΈΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ ΡΠΏΡΠ°ΠΉΡΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΏΡΠ°ΠΉΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΡΡΠΈΠ»ΡΠΌΠΈ.
- Π Π°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ png-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅
src/img/sprites/png/html5.png
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
$ gulp png-sprite
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ»
src/styles/common/icons.less
- Π Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ CSS-ΠΊΠ»Π°ΡΡΡ:
.png-sprite{
&:before{
content: '';
display: inline-block;
}
&--html5:before{
.sprite(@sprite-html5);
}
}
- Π€Π°ΠΉΠ»
src/styles/common/icons.less
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π²src/styles/style.less
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ@import
(@import "common/icons.less";
) - ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ less (Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
$ gulp less
)ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ CSS ΠΊΠΎΠ΄
.png-sprite:before
{
display: inline-block;
content: '';
}
.png-sprite--html5:before
{
width: 24px;
height: 24px;
background-image: url(../img/sprites/png/png-sprite.png);
background-position: 0 0;
}
- html-ΡΠ΅Π³Ρ, ΠΎΠΊΠΎΠ»ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ CSS-ΠΊΠ»Π°ΡΡΡ
png-sprite png-sprite--html5
ΠΡΠΈΠΌΠ΅Ρ: <h2 class="png-sprite png-sprite--html5">Test PNG sprite</h2>
Π Π°Π±ΠΎΡΠ° Ρ ΡΠΏΡΠ°ΠΉΡΠΎΠΌ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΡΠΆΠ½ΡΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/sprites/png
ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ CSS-ΠΊΠ»Π°ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ (mixin), ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°ΠΉΡΠ°.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈ (mixins) ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ, Π²ΡΠ·ΡΠ²Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΏΡΠ°ΠΉΡΠ°, Π½Π΅ Π² ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ :before
ΠΡΠΎΠ³ΠΎ, Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠΏΡΠ°ΠΉΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Less/CSS-ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
src/img/sprites/png
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (html5.png) - Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ
$ gulp png-sprite
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ PNG-ΡΠΏΡΠ°ΠΉΡΠ° Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ Retina-ΡΠΊΡΠ°Π½Ρ ΠΈ ΡΠΊΡΠ°Π½Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
src/img/sprites/png
ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ°ΠΉΠ» ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π΄Π²ΠΎΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠ΅ΠΌ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ. ΠΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ
Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΡΡΡΠΈΠΊΡ -2x (filename-2x.png
).
ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄Π²ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, html5.png ΠΈ html5-2x.png).
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°ΠΉΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΏΡΠ°ΠΉΡ build/img/sprites/png-sprite-2x.png
ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²ΠΈΠ΄Π° @sprite-filename-group
,
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, @sprite-html5-group
).
ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (mixin) Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ (mixin) .retina-sprite()
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, .retina-sprite(@sprite-html5-group)
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° icons.less:
.png-sprite{
&:before{
content: '';
display: inline-block;
}
&--html5:before{
.sprite(@sprite-html5);
}
&--html5-retina:before{
.retina-sprite(@sprite-html5-group)
}
}
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°Π·ΠΌΠ΅ΡΠΊΠ΅
<h2 class="png-sprite png-sprite--html5-retina">Test Retina-ready PNG sprite</h2>
ΠΡΠΎΠ³ΠΎ, Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠΏΡΠ°ΠΉΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Less/CSS-ΠΊΠΎΠ΄Π° Retina ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
src/img/sprites/png
Π΄Π²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ - ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΈ Π²Π΄Π²ΠΎΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΏΠΎΡΡΡΠΈΠΊΡΠΎΠΌ -2x (html5.png, html5-2x.png) - Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ
$ gulp png-sprite
ΠΠ°Π΄Π°ΡΠ° $ gulp svg-sprite
ΠΡΠ΅ SVG, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π² ΡΠΏΡΠ°ΠΉΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, svg-ΡΠ°ΠΉΠ»Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ) Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/sprites/svg
.
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠΏΡΠ°ΠΉΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/img/sprites/svg/svg-sprite.svg
, ΠΏΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΏΡΠ°ΠΉΡ
build/img/sprites/svg/svg-sprite.png
Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ
SVG.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ ΡΠ°ΠΉΠ» src/styles/common/_svg-sprite.less
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ CSS-ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠΏΡΠ°ΠΉΡΠ°.
ΠΠΌΡ CSS-ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ @svg-sprite-filename
, Π³Π΄Π΅ filename - ΠΈΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ ΡΠΏΡΠ°ΠΉΡΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ SVG-ΡΠΏΡΠ°ΠΉΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΡΡΠΈΠ»ΡΠΌΠΈ.
- Π Π°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ svg-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅
src/img/sprites/svg/html5.svg
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
$ gulp svg-sprite
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ»
src/styles/common/svg-icons.less
- Π Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ CSS-ΠΊΠ»Π°ΡΡΡ:
.svg-sprite{
&:before{
content: '';
display: inline-block;
width: 32px!important;
height: 32px!important;
background-size: contain!important;
}
&--html5-icon:before{
.svg-sprite--html5(); // CSS-ΠΊΠ»Π°ΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ SVG-ΡΠΏΡΠ°ΠΉΡΠ°.
}
}
- Π€Π°ΠΉΠ»
src/styles/common/svg-icons.less
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π²src/styles/style.less
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ@import
(@import "common/svg-icons.less";
) - ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ less (Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
$ gulp less
) ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ CSS ΠΊΠΎΠ΄
.svg-sprite--html5
{
width: 47px;
height: 47px;
background-image: url('../img/sprites/svg/svg-sprite.svg');
background-repeat: no-repeat;
background-position: 0 0;
background-size: 47px 47px;
}
.no-svg .svg-sprite--html5
{
background-image: url('../img/sprites/svg/svg-sprite.png');
}
.svg-sprite:before
{
display: inline-block;
width: 32px!important;
height: 32px!important;
content: '';
background-size: contain!important;
}
.svg-sprite--html5-icon:before
{
width: 47px;
height: 47px;
background-image: url('../img/sprites/svg/svg-sprite.svg');
background-repeat: no-repeat;
background-position: 0 0;
background-size: 47px 47px;
}
.no-svg .svg-sprite--html5-icon:before
{
background-image: url('../img/sprites/svg/svg-sprite.png');
}
- html-ΡΠ΅Π³Ρ, ΠΎΠΊΠΎΠ»ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ CSS-ΠΊΠ»Π°ΡΡΡ
svg-sprite svg-sprite--html5-icon
ΠΡΠΈΠΌΠ΅Ρ: <h2 class="svg-sprite svg-sprite--html5-icon">Test SVG sprite</h2>
Π Π°Π±ΠΎΡΠ° Ρ SVG-ΡΠΏΡΠ°ΠΉΡΠΎΠΌ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΡΠΆΠ½ΡΡ
SVG Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ src/img/sprites/svg
ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ CSS-ΠΊΠ»Π°ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ (mixin) CSS-ΠΊΠ»Π°ΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°ΠΉΡΠ°.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CSS-ΠΊΠ»Π°ΡΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°ΠΉΡΠ° ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ, Π²ΡΠ·ΡΠ²Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΏΡΠ°ΠΉΡΠ°, Π½Π΅ Π² ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ :before
ΠΡΠΎΠ³ΠΎ, Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠΏΡΠ°ΠΉΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Less/CSS-ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
src/img/sprites/svg
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (html5.svg) - Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ
$ gulp svg-sprite
ΠΠ°Π΄Π°ΡΠ° $ gulp fonts
Π€Π°ΠΉΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΡΡΠΈΡΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/styles/fonts
.
ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΡΠΈΡΡΡ Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/css/fonts
.
ΠΠ°ΠΆΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΊ Π½ΠΈΠΌ ΠΏΡΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Less, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌ ΡΠΈΠΏΠΎΠ³ΡΠ°ΡΠΈΠΊΡ.
ΠΠ°Π΄Π°ΡΠ° $ gulp clean
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° build/
Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° build/.gitignore
ΠΠ°Π΄Π°ΡΠ° $ gulp build
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π·Π°Π΄Π°ΡΠΈ clean
, html
, js
, less
, images
, png-sprite
, svg-sprite
, svg
, fonts
, gh-pages
.
Π ΠΈΡΠΎΠ³Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ build/
ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Π½ΡΠ»Ρ.
ΠΠ°Π΄Π°ΡΠ° $ gulp webserver
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ BrowserSync ΠΈ ΠΎΡΠΊΡΡΠ²Π°ΡΡΡ index.html ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ BrowserSync
Π‘Π΅ΡΠ²Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build/
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΎΡΠΌΠΈΡΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅:
[App Front-End] Access URLs:
----------------------------------------------
Local: http://localhost:9000 // Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ URL ΠΏΡΠΎΠ΅ΠΊΡΠ°
External: http://192.168.0.100:9000 // Π²Π½Π΅ΡΠ½ΠΈΠΉ (Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ) URL ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΠΏΠΎ Π½Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ
ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΡΠΈ)
Tunnel: https://iuvrvzmmli.localtunnel.me // Π’ΡΠ½Π½Π΅Π»Ρ - Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ URL, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΠΌΠΈΡΠ° ΠΈ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
----------------------------------------------
UI: http://localhost:3001 // Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ URL WebUI BrowserSync
UI External: http://192.168.0.100:3001 // Π²Π½Π΅ΡΠ½ΠΈΠΉ (Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΠ΅ΡΠΈ) URL WebUI BrowserSync
----------------------------------------------
[App Front-End] Serving files from: ./build // ΠΊΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ BrowserSync
ΠΠ°Π΄Π°ΡΠ° $ gulp gh-pages
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° Π²Π΅ΡΠΊΠ° gh-pages ΠΈ Π² Π½Π΅Π΅ Π·Π°Π»ΠΈΡΠΎ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° build/
.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ GitHub Pages
ΠΠ°Π΄Π°ΡΠ° $ gulp watch
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ° $ gulp webserver
, Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/
ΠΊΠ°ΠΊΠΈΡ
Π»ΠΈΠ±ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎ ΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅.
Π ΡΠ°ΠΉΠ»Π΅ gulpfile.js
Π² ΡΠ΅ΠΊΡΠΈΠΈ Settings Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Path settings Π·Π°Π΄Π°ΡΡΡΡ
ΠΏΡΡΠΈ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΈΡΠΎΠ³ΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ), ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΡΠΈ ΠΈ ΡΠ΅Π»Π΅Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π», ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ Π΅Π³ΠΎ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ.