SlideShare a Scribd company logo
1 of 93
2
3
4
5
6
— Легко поддерживать




  7
— Легко поддерживать
— Легко добавлять темы




  8
— Легко поддерживать
— Легко добавлять темы
— Дешево добавлять темы




  9
Независимые блоки

10
/css
       /blocks
             /messages
             ...



 11
/css
       /blocks
             /messages
             ...
       /pages
             main.css
 12
Тема:




 13
Тема:
    — фоны




 14
Тема:
    — фоны
    — цвета




 15
Тема:
    — фоны
    — цвета
    — шрифты



 16
Тема:
    — фоны
    — цвета
    — шрифты
    — отступы, границы


 17
Геометрия отдельно
       от оформления
18
/css
       /blocks
             /messages
       /themes
             /theme


 19
/default
     /messages




 20
/default
     /messages
     default.scss




 21
/default
     /messages
     default.scss
     default.vars.scss



  22
/default
     /messages
     default.scss
     default.vars.scss
/theme
     theme.scss
  23
/default
      /messages
      default.scss
      default.vars.scss
/theme
      theme.scss
   24
      theme.vars.scss
SASS

25
/css/blocks/messages/messages.scss
.messages{
      padding:20px;
}



 26
/css/blocks/messages/messages.scss
.messages{
      padding:20px;
}
/css/pages/mail.scss
@import url(../messages/messages.scss);
 27
/css/themes/default/messages/messages.scss
.messages{
      background:$messages-background;
}



 28
/css/themes/default/messages/messages.scss
.messages{background:$messages-background;}

/css/blocks/default/default.scss
@import url(messages/messages.scss);


 29
/css/themes/default/messages/messages.scss
.messages{background:$messages-background;}

/css/blocks/default/default.scss
@import url(messages/messages.scss);


 30
/css/themes/theme/theme.vars.scss
$messages-background: #FFF;




 31
/css/themes/theme/theme.vars.scss
$messages-background: #FFF;

/css/themes/theme/theme.scss
@import url(theme.vars.scss);


 32
/css/themes/theme/theme.vars.scss
$messages-background: #FFF;

/css/themes/theme/theme.scss
@import url(theme.vars.scss);
@import url(../default/default.scss);
  33
/css/pages/mail.css

/css/themes/theme/theme.css



 34
mixin

35
36
url("data:image/…") repeat-x scroll 0 top,
url("data:image/…") repeat-x scroll 0 bottom,
url("data:image/…") repeat-y scroll right top,
url("data:image/…") repeat-y scroll 0 top,
none repeat scroll 0 0 white


  37
38
none repeat scroll 0 0 white




  39
background: url(...), url(..), color url(datauri)




  40
background: color url(datauri);
background: url(...), url(..), color url(datauri)




  41
background: color url(datauri);
background: url(...), url(..), color url(datauri)
*background: color url(link)




  42
.block {
      background: $block--bg1, $block--bg2;
}




 43
.block {
      background: $block--background;
}




 44
Список

color url() no-repeat left top




  45
Двухуровневый список

url() no-repeat left top,
url() no-repeat left top,
color url() no-repeat left top


  46
Ключ

47
фон как есть




 48
фон как есть
+ фолбэк на старые браузеры




 49
фон как есть
+ фолбэк на старые браузеры
+ фолбэк на старых ИЕ




 50
url(), color, <key>

51
нет ключа




 52
нет ключа
--multiback




  53
нет ключа
--multiback
--multiback-ie




  54
@mixin multibackground($bgs){




}
    55
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));




}
    56
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {}



}
    57
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {}
    @else if $flag == "--multiback-ie" {}

}
    58
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {}
    @else if $flag == "--multiback-ie" {}
    @else {}
}
  59
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {…}
    @else if $flag == "--multiback-ie" {}
    @else {}
}
  60
background: nth($bgs,length($bgs) - 1);
@include _multiback($bgs, 1);




  61
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {}
    @else if $flag == "--multiback-ie" {…}
    @else {}
}
  62
background: nth($bgs, length($bgs) - 2);
@include _multiback($bgs, 2);

*background: nth($bgs, length($bgs) - 1);



  63
@mixin multibackground($bgs){
    $flag: nth($bgs, length($bgs));
    @if $flag == "--multiback" {}
    @else if $flag == "--multiback-ie" {}
    @else {…}
}
  64
background: $bgs;




 65
16

66
Переключение тем

67
deferred

68
$.when(
    AJAX.post(...),
    switchThemeCss(themeId)
);



 69
Проверка загрузки

70
jquery.getCSS

71
id темы

72
content font-family

73
IE:
content: undefined
font-family: 'some_data'
css data: 'some_data'



  74
content + font-family

75
OPERA
content: "some_data"
font-family: "Times New Roman"
css data: "some_data"



 76
content + font-family

77
function switchThemeCss (themeId){

         var url = getThemeCssUrl(themeId);



}
    78
function switchThemeCss (themeId){

         var url = getThemeCssUrl(themeId);
         $.getCSS(url, function(link){ … });

}
    79
function switchThemeCss (themeId){
      var deferred = $.Deferred();
      var url = getThemeCssUrl(themeId);
      $.getCSS(url, function(link){ … });
      return deferred;
}
  80
function switchThemeCss (themeId){
      var deferred = $.Deferred();
      var url = getThemeCssUrl(themeId);
      $.getCSS(url, function(link){ … });
      return deferred.promise();
}
  81
if (getApplyedThemeId() !== oldThemeId){
       $Theme.remove(); $Theme = $(link);
       deferred.resolve();
} else {
       $(link).remove();
       deferred.reject();
}
 82
Config

83
t1026 : {
     title : 'Роботы',
     text : 'Поздравляем!'
}



 84
t1036 : {
     title : 'Легенда',
     link : {
              href: 'http://link.mail.ru/',
              title: 'Играть!',
              target: '_blank'
     }
}
  85
Динамика

86
setTimeout

87
function chooseTheme(themeId){
      var themeVariant = 'all',
      switch (themeId) {…}

         return themeVariant
}
    88
function chooseTheme(themeId){
      var themeVariant = 'all',
      switch (themeId) {…}

         return themeVariant
}
    89
case 't1032':
     if (time >= 7 && time < 19){
            themeVariant = "day";
     } else {
            themeVariant = "night";
     }
  90
var themeChoosed = chooseTheme('t1032');
document.write(
      '<link href="t1032.' + themeChoosed + '.css"/>'
);



  91
92
СПАСИБО!
             Андрей Сумин
Руководитель разработки клиентской части
           sumin@corp.mail.ru

More Related Content

What's hot

Template 6786628199202133222.index
Template 6786628199202133222.indexTemplate 6786628199202133222.index
Template 6786628199202133222.indexhandryus
 
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説Takashi Uemura
 
문돌이가 가르치는 웹 프론트엔드 기초 2차시
문돌이가 가르치는 웹 프론트엔드 기초 2차시문돌이가 가르치는 웹 프론트엔드 기초 2차시
문돌이가 가르치는 웹 프론트엔드 기초 2차시동현 조
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizEdderson J. Ortiz
 
Templating en JavaScript
Templating en JavaScriptTemplating en JavaScript
Templating en JavaScriptSOAT
 
CSS Techniques Explained
CSS Techniques ExplainedCSS Techniques Explained
CSS Techniques ExplainedFinishJoomla
 
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetTudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetCaelum
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en phpErwin Lobo
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化hagino 3000
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаяsheplyakov
 
New text document (2) 2
New text document (2) 2New text document (2) 2
New text document (2) 2raj lex
 

What's hot (18)

Jogos 3.0
Jogos 3.0Jogos 3.0
Jogos 3.0
 
Template 6786628199202133222.index
Template 6786628199202133222.indexTemplate 6786628199202133222.index
Template 6786628199202133222.index
 
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説
WordPressのテンプレートをカスタマイズするために必要なphpを初歩から解説
 
문돌이가 가르치는 웹 프론트엔드 기초 2차시
문돌이가 가르치는 웹 프론트엔드 기초 2차시문돌이가 가르치는 웹 프론트엔드 기초 2차시
문돌이가 가르치는 웹 프론트엔드 기초 2차시
 
jQuery入門
jQuery入門jQuery入門
jQuery入門
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortiz
 
Templating en JavaScript
Templating en JavaScriptTemplating en JavaScript
Templating en JavaScript
 
CSS Techniques Explained
CSS Techniques ExplainedCSS Techniques Explained
CSS Techniques Explained
 
Johny see book update
Johny see book updateJohny see book update
Johny see book update
 
Web App Mvc
Web App MvcWeb App Mvc
Web App Mvc
 
Macdom html preprocesor
Macdom html preprocesorMacdom html preprocesor
Macdom html preprocesor
 
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetTudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcset
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en php
 
Alaindavila
AlaindavilaAlaindavila
Alaindavila
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленная
 
New text document (2) 2
New text document (2) 2New text document (2) 2
New text document (2) 2
 

More from kuchinskaya (20)

Kharkov
KharkovKharkov
Kharkov
 
Balashov
BalashovBalashov
Balashov
 
Zamyakin
ZamyakinZamyakin
Zamyakin
 
Panfilov
PanfilovPanfilov
Panfilov
 
Platov
PlatovPlatov
Platov
 
Rabovoluk
RabovolukRabovoluk
Rabovoluk
 
Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)
 
Smirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforumSmirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforum
 
Zacepin
ZacepinZacepin
Zacepin
 
Zagursky
ZagurskyZagursky
Zagursky
 
Haritonov
HaritonovHaritonov
Haritonov
 
Chudov
ChudovChudov
Chudov
 
Bubnov
BubnovBubnov
Bubnov
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
Zenovich
ZenovichZenovich
Zenovich
 
Romanenko
RomanenkoRomanenko
Romanenko
 
Perepelitsa
PerepelitsaPerepelitsa
Perepelitsa
 
Osipov
OsipovOsipov
Osipov
 
Kubasov
KubasovKubasov
Kubasov
 
Kalugin balashov
Kalugin balashovKalugin balashov
Kalugin balashov
 

сумин андрей