BEM (Block-Element-Modifier) on web-kehitysmetodologia sekä joukko käyttöliittymäkirjastoja, kehyksiä ja aputyökaluja.
"Block", "element" ja "modifier" ovat BEM-perustermit. Nämä ovat välttämättömiä ja riittäviä käsitteitä minkä tahansa monimutkaisen rajapinnan kuvaamiseen.
EstäLohko on itsenäinen liitäntäkomponentti. Lohko voi olla yksinkertainen tai yhdistelmä (sisältää muita lohkoja). Lohkoa luotaessa on varmistettava, että sitä voidaan käyttää missä tahansa verkkosivulla sekä toistaa samassa paikassa sivulla (emoelementti). Lohkon tulee sisältää kaikki toteutus, joka tarvitaan edustamaan sen ilmaisemaa käyttöliittymän osaa.
ElementtiElementti on lohkon osa. Elementit ovat kontekstiherkkiä: niillä on järkeä vain lohkossaan. Elementti on lohkon valinnainen komponentti; pienet lohkot pärjäävät ilman elementtejä.
ModifierMuokkaus on lohkon tai elementin ominaisuus, joka määrittää muutoksia sen ulkonäköön tai käyttäytymiseen. Muokkaus voi olla looginen (esim . button_big) tai avainarvo-pari (esim . menu_type_bullet, menu_type_numbers). Lohkolla tai elementillä voi olla useita muokkauksia samanaikaisesti.
BEM tarjoaa yhteisen semanttisen mallin kaikille etupään kehityksessä käytetyille teknologioille (HTML, CSS, JavaScript, mallit jne.)
Käyttämällä käsitteitä "lohko", "elementti" ja "muuntaja" voidaan kuvata dokumentin puurakennetta. Tällaista kuvausta kutsutaan BEM-puuksi ja se on käyttöliittymän semanttinen esitys, abstraktio DOM-puusta.
HTML / CSS :ssä lohkot, elementit ja modifioijat esitetään CSS-luokina, jotka on nimetty nimeämiskäytännön mukaan . Samassa DOM-solmussa voi sijaita useita lohkoja, jolloin DOM-solmulle on määritetty 2 CSS-luokkaa. Myös lohko ja toisen lohkon elementti voivat sijaita samassa DOM-solmussa.
Yandexin BEM-luokkien nimeämissäännötLohkon CSS-luokka vastaa lohkon nimeä. Tavuviivaa käytetään sanojen erottamiseen monimutkaisissa lohkonimissä.
<div class= "header" > ... </div> <ul class= "menu" > ... </ul> <span class= "button" > ... </span> <div class= "tabed-pane" > ... </div>Elementin CSS-luokka sisältää lohkon nimen ja elementin nimen kahdella alaviivalla erotettuna.
<div class= "header" > <div class= "header__bottom" > ... </div> </div> <ul class= "menu" > <li class= "menu__item" > ... </li> </ul> <span class= "button" > <input class= "button_control" > ... </input> </span> <div class= "tabbed-pane" > <div class= "tabbed-pane__panel" > ... </div> </div>Muokkaajan CSS-luokka sisältää lohkon nimen ja muuntajan nimen erotettuna yhdellä alaviivalla. Jos muuntaja on avain-arvo-pari, ne erotetaan myös alaviivalla. Elementtimuuttajalle sekä lohkon nimi että elementin nimi tallennetaan CSS-luokkaan. Muutos-CSS-luokkaa käytetään yhdessä sen lohko- (tai elementti-) luokan kanssa.
<div class= "header header_christmas" > ... </div> <!-- Otsikon jouluversio --> <ul class= "menu" > <li class= "menu__item menu__item_current" > ... </li> </ul> <span class= "button button_theme_night" > ... </span> <div class= "tabed-pane tabed-pane_disabled" > ... </div> Harry Robertsin BEM-luokan nimeämiskäytännötVaihtoehtoisia nimeämiskäytäntöjä on ehdottanut Harry Roberts [1] . Hän neuvoo käyttämään kahta tavuviivaa erottamaan lohko- ja elementtinimet muokkauksesta.
<div class= "header header--christmas" > ... </div> <!-- Otsikon jouluversio --> <ul class= "menu" > <li class= "menu__item menu__item--current" > ... </li> </ul> <span class= "button button--theme_night" > ... </span> <div class= "tabed-pane tabed-pane--disabled" > ... </div> EtuliitteetJotkut nimeämiskäytännöt suosittelevat etuliitteiden käyttöä . Joten kaikki lohkoluokat voivat alkaa etuliitteellä b-.
<div class= "b-header" > ... </div> <ul class= "b-menu" > ... </ul> <span class= "b-button" > ... </span> <div class= "b-tabbed-pane" > ... </div>Joskus etuliitteenä käytetään projektin lyhennettyä nimeä. Esimerkiksi OrangePool->op.
<div class= "op-header" > ... </div> <ul class= "op-menu" > ... </ul> <span class= "op-button" > ... </span> <div class= "op-tabbed-pane" > ... </div>BEM :ssä JavaScript toimii lohkoelementtien ja muokkaajien abstraktin rakenteen kanssa käyttämättä suoraan alla olevia DOM-solmuja ja niiden CSS-luokkia. Myöskään ylimääräisiä "JavaScript-spesifisiä" CSS-luokkia ei käytetä DOM-solmujen tunnistamiseen. Tämän mahdollisuuden tarjoamiseksi käytetään viitekehystä tai omaa apujoukkoaan.
Apua BEM-rakenteen parissa työskentelemiseenJoten jos jokainen JavaScript-toiminnallisuudella varustettu lohko vastaa objektia, sen menetelmät sallivat:
Koska modifioija heijastaa lohkon tilaa, lohko tai elementti on saatettava oikeaan tilaan, kun muokkaaja määrätään. Ulkoasun muuttamiseen riittää, että määrität muuntajan CSS-luokan. Monimutkaisemmissa tapauksissa lohkon saattaminen haluttuun tilaan vaatii JavaScript-toiminnallisuuden. Siksi käytetyn JavaScript-kehyksen on kyettävä ilmoittamaan luettelo toiminnoista, jotka vastaavat muokkaajaa.
BlockObj . on ({ aktiivinen : toiminto () { // tee jotain, kun aktiivinen }, ei käytössä : function () { // tee jotain, kun se ei ole käytössä } }); i-bem.jsTähän mennessä kehys i-bem.js(osa kirjastosta bem-core) tarjoaa JavaScriptin BEM-periaatteiden täydellisimmän toteutuksen. Tietoja kehyksestä ja käyttöesimerkkejä löytyy sivuilta:
Tiedostojärjestelmässä lohkot, elementit ja muokkaajat esitetään tiedostoina niiden toteutuksista erilaisissa verkkoteknologioissa. Yhteen lohkoon kuuluvat tiedostot yhdistetään yhdeksi hakemistoksi.
Tasainen rakenneYksinkertaisin projektirakenne ei sisällä sisäkkäisyyttä lohkohakemistoon:
painike/ button.css button.js button.tpl button_control.css otsikko/ header.css header.tpl header_christmas.css tabed-pane/ välilehti pane.css tabed-pane.js tabed-pane.tpl Sisäkkäinen rakenneSuurissa projekteissa tai kirjastoissa on kätevää käyttää sisäkkäistä lohkotiedostorakennetta, jossa hakemistoja on varattu elementeille ja muokkauksille.
painike/ __control/ button_control.css button.css button.js button.tpl otsikko/ _joulu/ header_christmas.css header.css header.tpl tabed-pane/ välilehti pane.css tabed-pane.js tabed-pane.tplMetodologian on kehittänyt Yandex , ja sitä käytetään laajasti tämän yrityksen tuotteissa [2] .
Se on löytänyt sovelluksen osana erityisesti kehitettyä HTML5 -kehystä mail.ru- sähköpostipalvelun uudelleensuunnitteluun ja uudelleenkäsittelyyn [3] [4] .
Samaa menetelmää käytti muun muassa BBC televisio- ja radioyhtiö kehittäessään uutta verkkosivustoaan [5] .
BEM:ää käytetään myös Googlen vuoden 2015 Material Design Lite -julkaisussa , HTML5 - kehyksessä, kuten Twitter Bootstrapissa , joka tukee Material Designia [6] .
Web ja verkkosivut | |
---|---|
maailmanlaajuisesti | |
Paikallisesti | |
Sivustojen ja palveluiden tyypit |
|
Luominen ja ylläpito | |
Asettelutyypit, sivut, sivustot |
|
Tekninen | |
Markkinointi | |
Yhteiskunta ja kulttuuri |