Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. Стиль как декларация
  2. Стиль - это декларация свойств вида тип-значение для дом узла (или набора узлов). Таблица стилей это набор деклараций.
  3. {
  4. "document": {
  5. "selector": {
  6. "meta": {
  7. "local-priority": 1
  8. }
  9. "style": {
  10. "property": "value",
  11. "property": "value"
  12. }
  13. }
  14. }
  15. }
  16. Стиль как функция
  17. Стиль это функция которая принимает на вход дом-ноду (селектор) а через API браузера возвращает ее внешний вид.
  18. Существует 12 основных типов Дом-нод. Большинству типов доступен весь API, но существует и специфический для конкретного типа. Можно менять типизацию внутри функции.
  19. display: inline;
  20. display: block;
  21. display: inline-block;
  22. display: list-item;
  23. display: table;
  24. display: table-cell;
  25. display: table-row;
  26. display: flex;
  27. display: grid;
  28. position: absolute;
  29. position: static;
  30. position: fixed;
  31. Дом-ноды предоставляют 4 вида интерфейса, различающиеся шириной применения
  32. [tag, tag], [tag in tag, tag in tag]
  33. [class, class]
  34. id
  35. inline
  36.  
  37. function applyStyle([tag], [class], id, inline) {
  38. return {
  39. this.style.property="value",
  40. this.style.property="value"
  41. }
  42. }
  43.  
  44. DOM-tree для нас черный ящик. Мы моделируем его через абстракные объекты описанные посредсвам классов и приватных методов. Нет метода - нет DOM ноды. Используем только один интерфейс.
  45.  
  46. Объекты репрезентируют визуально-функциональные модули (комплексные структуры) страницы и возвращют их внешенее оформление.
  47. Все объекты используют один интерфейс (class) и принимают все типы данных.
  48. Объекты не согласованы, не взаимодействуют и ортогональны по отношению друг к другу.
  49. Определенная констеляция классов описывает страницу.
  50.  
  51. конкретный объект
  52. .b-table {}
  53.  
  54. .b-list {} // абстракный объект. Классы исчерпывают свойства родительского класса, он пустой в реализации (не декларирует ничего)
  55. .b-list_vert {}
  56. .b-list_horiv {}
  57. .b-list_unstyled {}
  58. .b-list_flat {}
  59. .b-list_ordered {}
  60. .b-list_unordered {}
  61.  
  62. инкапсуляция
  63. инкапсуляция достигается нейм конвеншеном и использованием только интерфейса class
  64. .b-block // класс
  65. .b-block__element // приватные методы (декларации) класса
  66. .b-block_mod // под класс наследует свойства родительского класса
  67. .b-block_mod .b-block__element // дополняет или перекрывает его свойства
  68.  
  69. иммютабилити класса
  70. неизменность при перекрытии имен (и избежания ненужного наследования)
  71. a) prefixed-uniq-classes-namespaces
  72. .b-block-name
  73. неизменность от случайного наследовании вышестоящего дома
  74. b) local reset in each module
  75. .b-block {
  76. margin: 0;
  77. padding: 0;
  78. list-style: none;
  79. }
  80. неизменность при перекрытии свойства
  81. с) использование !important;
  82.  
  83. наследование
  84. class="b-button b-button_red b-button_big" // модификации наследуют свойства базового класса button и расширяют их цветом и размером
  85. class="b-form b-form_account-info" // модификации наследуют свойства базового класса form и изменяют их специфическими св-ми характерными только для этой формы
  86.  
  87. полиморфизм
  88. отвязка от DOM структуры
  89. .b-table // Этот класс может быть реализован на любом HTML div, ul>li, table и т.д. Он не ожидает какой-то конкретный тип данных
  90. .b-table__row
  91. .b-table__cell
  92.  
  93. .l-pattern { // принимая любой тип данных он может модифицировать свойства по разному. Но мы стараемся изменять тип данных при входе.
  94. margin: 0; // applyed to all elements exept inline and table-cell
  95. padding-top: 10px; // applied to all elements exept inline
  96. list-style: none; // Ad hoc - applied only to <ul> element
  97. vertical-align: top; // applied only to table, td, img (inline-block elems)
  98. position: static; // applyed to all elements
  99. display: initial; // applyed to all elements
  100. }
  101.  
  102.  
  103. SRP
  104. class="b-button b-button_red b-button_big"
  105.  
  106. SoC
  107. .l-asided // отвечает только за скелет, в который вкладываются другие блоки
  108. .b-form // отвечает за переносимый модуль и описывает его
  109. .js-tabs // отвечает только за байндинг к JS
  110. .i-shadow-20 // виртуальный класс, расширяющий любой класс своими свойствами, не может использоваться сам по себе
  111.  
  112. states
  113. через псевдоклассы и модификаторы
  114. class="l-grid__item _@desk_w2 _@tabl_w2 _@mob_w1"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement