SlideShare uma empresa Scribd logo
1 de 16
Front-end Rails-приложений
   основанный на БЭМ



             Дмитрий Карпунин, Evrone.com
FRONT-END RAILS-ПРИЛОЖЕНИЙ

   views
   helpers
   stylesheets
   images
   javascripts

   controllers
   locales
СЕМАНТИЧЕСКАЯ ВЁРСТКА

<body>
  <div id="header">
    <ul id="main_menu">
       <li class="menu_item">...</li>
       ...
    </ul>
  </div>
  <div id="content">...</div>
  <div id="footer">...</div>
</body>
БЭМ — БЛОК, ЭЛЕМЕНТ, МОДИФИКАТОР


<div class="b-post b-post_favorite">
  <div class="b-post__author">
    <div class="avatar">...</div>
    ...
  </div>
  <div class="b-post__content">
    <h3 class="title">...</h3>
    ...
  </div>
</div>
ПОПРОБУЕМ УПРОСТИТЬ
<div class="b-post favorite">
  <div class="author">
    <div class="avatar">...</div>
    ...
  </div>
  ...
    <a class="g-iconed favorite">В избранное</a>
</div>


.g-iconed {
  padding-left: 20px;
  background: left center no-repeat;
}
.g-iconed.favorite {
  background-image: url("/images/icons/favorite.png");
}
ПОЛЬЗОВАТЕЛЬ IE6 В ШОКЕ
<div class="b-post favorite">
  <div class="author">
    <div class="avatar">...</div>
    ...
  </div>
  ...
    <a class="g-iconed favorite">В избранное</a>
</div>


.g-iconed {
  padding-left: 20px;
  background: left center no-repeat;
}
.g-iconed.favorite {
  background-image: url("/images/icons/favorite.png");
}
СТАТИСТИКА IE 6-8, РФ,
   LIVEINTERNET.RU
IE 6-8, ЕВРОПА, GS.STATCOUNTER.COM
БЭМ НА ПРАКТИКЕ
C) .c-placeholder, .c-blue, .c-link, ...
  $c-placeholder, $c-blue, $c-link, ...

G)
1) глобальные модификаторы:
  .g-line, .g-inline-block, .g-font_accident, ...
   g-line, inline-block, g-font_accident, ...
2) микроструктуры:
  .g-iconed.user, .g-thumb.size_50x50, ...
  g_thumb(@user.image.url(:medium), "50x50")

L)   .l-page, .l-profile, l-users-show, ...
     .l-page__footer, .l-profile__left-content, ...
     @import "blocks/users/b-friends";

B)   .b-post, .b-post_favorite, .b-post__author, ...
     div_for(post, :class => "b-post") => #post_42
SASS
                         http://sass-lang.com/




 /config/environment.rb

Sass::Plugin.options[:template_location] = "./app/stylesheets"
Sass::Plugin.options[:css_location] = "./public/stylesheets/compiled"
if RAILS_ENV == "production"
  Sass::Plugin.options[:style] = :nested
else
  Sass::Plugin.options[:style] = :expanded
  Sass::Plugin.options[:debug_info] = true
end


                                          FireSass for Firebug
СТРУКТУРА СТИЛЕЙ

/app/stylesheets/
    import/
        *.scss
    global/
        *.scss
    layouts/
        l-*.scss
    blocks/
        [%C%/[%A%/]]b-*.scss
/APP/STYLESHEETS/IMPORT/

base.scss                       константы проекта
$layout-page-width: 1000px;
$layout-side-width: 240px;

$c-black: #333333;
$c-gray: #777777;
$c-light-gray: #999999;
$c-blue: #2266aa;



mixins.scss                        базовые миксины
                                          @mixin g-line {
                                            *zoom: 1;
@mixin opacity($value: 0.5) {               _height: 0;
  opacity: $value;                          &:after {
  $value: $value * 100;                       content: " ";
  filter: progid:DXImageTransform.            display: block;
    Microsoft.Alpha(opacity=#{$value});       clear: both;
}                                             height: 0;
                                            }
                                          }
/APP/STYLESHEETS/GLOBAL/

reset.scss

fundamental.scss

.g-line {
  @include g-line;
}

reserved.scss

.bold {
  font-weight: bold;
}

.placeholder {
  color: $c-placeholder;
}
/APP/STYLESHEETS/GLOBAL/
structures.scss

@import "include/base";

.g-iconed {
  padding-left: 20px;
  background: transparent 0 0 no-repeat;
}

@mixin _g-iconed_type($name) {
  .g-iconed.#{$name} {
    background-image: url("#{$icons-path}/#{$name}.png");
  }
}

@include _g-iconed_type(user);
@include _g-iconed_type(email);

layout.scss

all.scss
/app/views/users/show.haml

- content_for :head,
          stylesheet_link_tag("compiled/layouts/l-users-
show");


/app/stylesheets/layouts/l-users-show.scss

@import "blocks/users/b-friends";


/app/stylesheets/blocks/users/b-friends.scss

.b-friends {
  .title {...}
  .users-list {...}
  ...
}

/public/javascripts/users/b-friends.js

$( function () {
  var jFriends = $('.b-friends');
  ...
} );
ВОПРОСЫ? 0_O

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Erik mogensen stowe
Erik mogensen stoweErik mogensen stowe
Erik mogensen stowe
 
PHP記帳網頁教材(第一頁是空白的)
PHP記帳網頁教材(第一頁是空白的)PHP記帳網頁教材(第一頁是空白的)
PHP記帳網頁教材(第一頁是空白的)
 
Legend ortauzunluk
Legend ortauzunlukLegend ortauzunluk
Legend ortauzunluk
 
Binary Studio Academy 2016: Laravel Routing
Binary Studio Academy 2016: Laravel Routing Binary Studio Academy 2016: Laravel Routing
Binary Studio Academy 2016: Laravel Routing
 
Beyond Posts & Pages - Structured Content in WordPress
Beyond Posts & Pages - Structured Content in WordPressBeyond Posts & Pages - Structured Content in WordPress
Beyond Posts & Pages - Structured Content in WordPress
 
J queryui
J queryuiJ queryui
J queryui
 
webstudy jquery
webstudy jquerywebstudy jquery
webstudy jquery
 
18. images in symfony 4
18. images in symfony 418. images in symfony 4
18. images in symfony 4
 
A casa atividades arasaac
A casa atividades arasaacA casa atividades arasaac
A casa atividades arasaac
 
Ahmad faizun
Ahmad faizunAhmad faizun
Ahmad faizun
 
Joomla!Day 2013 Nürnberg; Vortrag von Johannes Hock
Joomla!Day 2013 Nürnberg; Vortrag von Johannes HockJoomla!Day 2013 Nürnberg; Vortrag von Johannes Hock
Joomla!Day 2013 Nürnberg; Vortrag von Johannes Hock
 
TICT #13
TICT #13TICT #13
TICT #13
 
Game jump: frontend introduction #1
Game jump: frontend introduction #1Game jump: frontend introduction #1
Game jump: frontend introduction #1
 
TICT #11
TICT #11 TICT #11
TICT #11
 
Work and play with SASS & Compass
Work and play with SASS & CompassWork and play with SASS & Compass
Work and play with SASS & Compass
 
Javascript application
Javascript applicationJavascript application
Javascript application
 
Little Brown Bat by Elaine
Little Brown Bat by ElaineLittle Brown Bat by Elaine
Little Brown Bat by Elaine
 
2 Graph Theory
2 Graph Theory2 Graph Theory
2 Graph Theory
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10min
 
Drupal sins 2016 10-06
Drupal sins 2016 10-06Drupal sins 2016 10-06
Drupal sins 2016 10-06
 

Semelhante a Evrone.ru / BEM for RoR

Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid Prototyping
Even Wu
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
WordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin PagesWordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin Pages
Brandon Dove
 

Semelhante a Evrone.ru / BEM for RoR (20)

CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the World
 
Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid Prototyping
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Death of a Themer
Death of a ThemerDeath of a Themer
Death of a Themer
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角
 
WordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin PagesWordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin Pages
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Web Frontend development: tools and good practices to (re)organize the chaos
Web Frontend development: tools and good practices to (re)organize the chaosWeb Frontend development: tools and good practices to (re)organize the chaos
Web Frontend development: tools and good practices to (re)organize the chaos
 
Presentation html5 css3 by thibaut
Presentation html5 css3 by thibautPresentation html5 css3 by thibaut
Presentation html5 css3 by thibaut
 
QConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações WebQConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações Web
 
Sass & Compass (Barcamp Stuttgart 2012)
Sass & Compass (Barcamp Stuttgart 2012)Sass & Compass (Barcamp Stuttgart 2012)
Sass & Compass (Barcamp Stuttgart 2012)
 
Test upload
Test uploadTest upload
Test upload
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Evrone.ru / BEM for RoR

  • 1. Front-end Rails-приложений основанный на БЭМ Дмитрий Карпунин, Evrone.com
  • 2. FRONT-END RAILS-ПРИЛОЖЕНИЙ  views  helpers  stylesheets  images  javascripts  controllers  locales
  • 3. СЕМАНТИЧЕСКАЯ ВЁРСТКА <body> <div id="header"> <ul id="main_menu"> <li class="menu_item">...</li> ... </ul> </div> <div id="content">...</div> <div id="footer">...</div> </body>
  • 4. БЭМ — БЛОК, ЭЛЕМЕНТ, МОДИФИКАТОР <div class="b-post b-post_favorite"> <div class="b-post__author"> <div class="avatar">...</div> ... </div> <div class="b-post__content"> <h3 class="title">...</h3> ... </div> </div>
  • 5. ПОПРОБУЕМ УПРОСТИТЬ <div class="b-post favorite"> <div class="author"> <div class="avatar">...</div> ... </div> ... <a class="g-iconed favorite">В избранное</a> </div> .g-iconed { padding-left: 20px; background: left center no-repeat; } .g-iconed.favorite { background-image: url("/images/icons/favorite.png"); }
  • 6. ПОЛЬЗОВАТЕЛЬ IE6 В ШОКЕ <div class="b-post favorite"> <div class="author"> <div class="avatar">...</div> ... </div> ... <a class="g-iconed favorite">В избранное</a> </div> .g-iconed { padding-left: 20px; background: left center no-repeat; } .g-iconed.favorite { background-image: url("/images/icons/favorite.png"); }
  • 7. СТАТИСТИКА IE 6-8, РФ, LIVEINTERNET.RU
  • 8. IE 6-8, ЕВРОПА, GS.STATCOUNTER.COM
  • 9. БЭМ НА ПРАКТИКЕ C) .c-placeholder, .c-blue, .c-link, ... $c-placeholder, $c-blue, $c-link, ... G) 1) глобальные модификаторы: .g-line, .g-inline-block, .g-font_accident, ... g-line, inline-block, g-font_accident, ... 2) микроструктуры: .g-iconed.user, .g-thumb.size_50x50, ... g_thumb(@user.image.url(:medium), "50x50") L) .l-page, .l-profile, l-users-show, ... .l-page__footer, .l-profile__left-content, ... @import "blocks/users/b-friends"; B) .b-post, .b-post_favorite, .b-post__author, ... div_for(post, :class => "b-post") => #post_42
  • 10. SASS http://sass-lang.com/ /config/environment.rb Sass::Plugin.options[:template_location] = "./app/stylesheets" Sass::Plugin.options[:css_location] = "./public/stylesheets/compiled" if RAILS_ENV == "production" Sass::Plugin.options[:style] = :nested else Sass::Plugin.options[:style] = :expanded Sass::Plugin.options[:debug_info] = true end FireSass for Firebug
  • 11. СТРУКТУРА СТИЛЕЙ /app/stylesheets/ import/ *.scss global/ *.scss layouts/ l-*.scss blocks/ [%C%/[%A%/]]b-*.scss
  • 12. /APP/STYLESHEETS/IMPORT/ base.scss константы проекта $layout-page-width: 1000px; $layout-side-width: 240px; $c-black: #333333; $c-gray: #777777; $c-light-gray: #999999; $c-blue: #2266aa; mixins.scss базовые миксины @mixin g-line { *zoom: 1; @mixin opacity($value: 0.5) { _height: 0; opacity: $value; &:after { $value: $value * 100; content: " "; filter: progid:DXImageTransform. display: block; Microsoft.Alpha(opacity=#{$value}); clear: both; } height: 0; } }
  • 13. /APP/STYLESHEETS/GLOBAL/ reset.scss fundamental.scss .g-line { @include g-line; } reserved.scss .bold { font-weight: bold; } .placeholder { color: $c-placeholder; }
  • 14. /APP/STYLESHEETS/GLOBAL/ structures.scss @import "include/base"; .g-iconed { padding-left: 20px; background: transparent 0 0 no-repeat; } @mixin _g-iconed_type($name) { .g-iconed.#{$name} { background-image: url("#{$icons-path}/#{$name}.png"); } } @include _g-iconed_type(user); @include _g-iconed_type(email); layout.scss all.scss
  • 15. /app/views/users/show.haml - content_for :head, stylesheet_link_tag("compiled/layouts/l-users- show"); /app/stylesheets/layouts/l-users-show.scss @import "blocks/users/b-friends"; /app/stylesheets/blocks/users/b-friends.scss .b-friends { .title {...} .users-list {...} ... } /public/javascripts/users/b-friends.js $( function () { var jFriends = $('.b-friends'); ... } );

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n