Идеальный css-framework. Maxmertkit

от автора

Всю документацию на английском языке вы сможете прочесть на maxmert.com.

Требования и задачи

При создании версии 1.0 мне пришлось пересмотреть основные требования к фреймворку:

  • Возможность легко добавить/удалить размер или тему. Json-файл с прописанными темами и размерами для каждого виджета. Таким образом можно конфигурировать фреймворк исправляя json-файл.
  • Модульность. При отключении или добавлении любого виджета фреймворк должен стабильно работать (привет bootstrap).
  • Особое именование классов для избежания переопределения пользовательских классов.
  • Javascript компоненты без jQuery (но с возможностью его использования, если он подключен).

Конечно это не единственные требования, а приоритетные. Их, поверьте, было очень-очень много. В итоге у меня получился фреймворк, которым я сам с большим наслаждением пользуюсь. Так каковы же его основные отличия от уже существующих?

Особенности и отличия

  • Не сочтите за самолюбование, но им действительно легко и удобно пользоваться.
  • Модульность. Вы можете отключить любой виджет, при этом maxmertkit будет выглядеть и работать как прежде. Дело здесь в двух вещах. Во-первых, если в виджете используется, например, grid, то он импортируется непосредственно в виджет. Во-вторых, на уровне Sass в maxmertkit предусмотрена защита от множественных импортов для предотвращения дубликатов кода.
  • Темы и Размеры. В файле mkit.json лежат темы и размеры для каждого виджета. При правке mkit.json maxmertkit будет перекомпилирован, таким образом вы можете быстро добавлять или удалять темы.
  • Наименования классов.
    -widget — widget, for example -btn
    -theme- — theme, for example -primary-
    _size — size, for example _major
    _modifier_ — modifier, for example _active_
    -animation— — animation, for example -fadein—
    Теперь, взглянув на код ниже, вы сможете без чтения документации понять, что вы увидете в браузере:
    <ul class="-menu -primary- _big"> 	<li class="_active_"> 		<a>Menu item 1</a> 		<div class="-drop -door--"> 			... 		</div> 	</li> 	<li> 		<a>Menu item 1</a> 	</li> 	<li class="_disabled_"> 		<a>Menu item 1</a> 	</li> </ul>  <a class="-btn -error- _huge _active_">Big activated error button</a> 

  • Быстрые javascript компоненты. В отличие от многих других фреймворков, maxmertkit не использует события «scroll» напрямую. Везде, где есть возможность используется requestAnimationFrame, в результате скорость работы многократно возрастает. При 40 parallax-компонентах (называется wall) на странице fps держалось больше 60-ти.
  • Поддержка deferred-объектов для событий onactive, beforeactive и т.д. То есть можно асинхронным кодом (например ajax-запросом) получать данные для любых компонент maxmertkit перед его активацией (например перед показом модульного окна или попапа).

Далее полагается описать файловую структуру и ее особенности, но это тоска зеленая. Поэтому сначала перейду к описанию существующих виджетов.

Виджеты

Здесь я не буду рассказывать о стандартных виджетах, таких как grid, forms, tables или typography. Это стандарты, которые даже неудобно обсуждать.
Кроме того надо напомнить, что классы тем, размеров и модификаторов для всех виджетов одинаковы. То есть, например, размер _major, тема -dark- или модификатор _active_ можно использовать с любыми виджетами.
И последнее перед стартом: в этой статье я буду указывать не все возможности, модификаторы, темы и опции, а только самые основные. Для полной домументации добро пожаловать на www.maxmert.com.
От винта!

Кнопка btn

Используется класс -btn.

<button class="-btn">Default</button> <button class="-btn -primary-">Primary</button> <button class="-btn -error-"><i class="fa fa-repeat"></i> Error</button> <button class="-btn -info-"><i class="fa fa-bell"></i> Info</button> <button class="-btn -primary- _unstyled_"><i class="fa fa-gift"></i>Primary</button> 

Добавьте модификатор _round_

<button class="-btn _round_">Round button</button> <input type="button" class="-btn _round_" value="Round input"> <a class="-btn _round_">Round link</a> 

Модификатор _disabled_ или атрибут [disabled]

<button class="-btn _disabled_">With modifier</button> <button class="-btn" disabled="">With attribute</button> <button class="-btn _disabled_ -primary-">Primary modifier</button> <button class="-btn -primary-" disabled="">Primary attribute</button> 

Модификаторы _active_ и _hover_

<button class="-btn">Default</button> <button class="-btn _hovered_">Hovered</button> <button class="-btn _active_">Active</button>  <button class="-btn -primary-">Default</button> <button class="-btn _hovered_ -primary-">Hovered</button> <button class="-btn _active_ -primary-">Active</button> 
Кнопка ghost-btn

Прозрачная кнопка -btn-ghost наследуется от виджета -btn, так что все модификаторы, в общем-то, те же самые.

<button class="-btn-ghost -primary-">Button</button> <input type="button" class="-btn-ghost -primary-" value="Input"> <a class="-btn-ghost -primary-">Link</a> 

С модификатором _round_.

<button class="-btn-ghost -primary- _round_">Round button</button> <input type="button" class="-btn-ghost -primary- _round_ _active_" value="Round input"> <a class="-btn-ghost -primary- _round_">Round link</a> 
Группы

Для контейнера с виджетами использовать класс -group.

Кнопки внутри групп

Добавьте виджеты -btn внутрь группы.

<div class="-group"> 	<a class="-btn"><i class="fa fa-align-left"></i></a> 	<a class="-btn _active_"><i class="fa fa-align-center"></i></a> 	<a class="-btn"><i class="fa fa-align-right"></i></a> 	<a class="-btn"><i class="fa fa-align-justify"></i></a> </div> <div class="-group"> 	<a class="-btn"><i class="fa fa-font"></i></a> 	<a class="-btn"><i class="fa fa-bold"></i></a> 	<a class="-btn"><i class="fa fa-italic"></i></a> </div> <div class="-group"> 	<a class="-btn -primary-"><i class="fa fa-thumbs-up"></i></a> </div> <div class="-group"> 	<a class="-btn -warning-"><i class="fa fa-star"></i></a> </div> 

Используйте темы и размеры как на самой группе, так и на виджетах внутри нее.

<div class="-group"> 	<a class="-btn">Dropdown <i class="fa fa-caret-down"></i></a> </div> <div class="-group -primary-"> 	<a class="-btn">Dropdown</a><a class="-btn"><i class="fa fa-caret-down"></i></a> </div><br> <div class="-group"> 	<a class="-btn">Like</a><a class="-btn -primary-"><i class="fa fa-thumbs-o-up"></i></a> </div> <div class="-group"> 	<a class="-btn">You liked it</a><a class="-btn -primary- _active_"><i class="fa fa-thumbs-o-up"></i></a> </div> 
Элементы формы внутри группы

Добавьте элементы формы внутрь группы.

<div class="-group -primary-"> 	<form> 		<a class="-btn">Button</a> 		<div class="-field"><input type="text"></div> 		<a class="-btn">Button</a> 		<div class="-field"> 			<select> 				<option>Option 1</option> 				<option>Option 2</option> 			</select> 		</div> 	</form> </div> <div class="-group -primary-"> 	<form> 		<a class="-btn">Button</a> 		<input type="text"> 		<a class="-btn">Button</a> 		<select> 			<option>Option 1</option> 			<option>Option 2</option> 		</select> 	</form> </div> 
Addon внутри группы

Используйте класс -addon внутри группы.

<div class="-group"> 	<form> 		<span class="-addon">e-mail</span><div class="-field"><input type="text"></div> 	</form> </div> <div class="-group -primary-"> 	<form> 		<span class="-addon">e-mail</span><div class="-field"><input type="text"></div> 	</form> </div> <div class="-group -error-"> 	<form> 		<span class="-addon">e-mail</span><div class="-field"><input type="text"></div> 	</form> </div> <div class="-group -warning-"> 	<form> 		<span class="-addon">e-mail</span><div class="-field"><input type="text"></div> 	</form> </div> <div class="-group"> 	<form> 		<span class="-addon">Addon</span><a class="-btn">Button</a> 	</form> </div> <div class="-group"> 	<form> 		<span class="-addon">Addon</span><a class="-btn -warning-">Button</a> 	</form> </div> 

Комбинируйте.

<div class="-group"> 	<form> 		<span class="-addon">@</span> 		<a class="-btn">me@maxmert.com</a> 		<a class="-btn"><i class="fa fa-caret-down"></i></a> 		<div class="-field"><input type="text"></div> 	</form> </div> 
Drops

Блоки с выпадающей информацией (dropdown) – -drop.

<div class="-drop"> 	Drop without content block.<br> 	Great with menus and other navigation stuff. </div>  <div class="-drop"> 	<div class="-content"> 		Drop with content block.<br> 		Great with text, information, pictures and other stuff. 	</div> </div> 
Задаем позицию и добавляем стрелки.

Добавляем -arrow в dropdown.

<div class="-drop -primary- _top_"> 	<i class="-arrow"></i> 	<div class="-header"> 		Header 	</div> 	<div class="-content"> 		Dropdown Top 	</div> 	<div class="-content"> 		Footer 	</div> </div>  <div class="-drop _bottom_"> 	<i class="-arrow"></i> 	<div class="-header"> 		Header 	</div> 	<div class="-content"> 		Dropdown Bottom 	</div> 	<div class="-content"> 		Footer 	</div> </div>  <div class="-drop -error- _right_"> 	<i class="-arrow"></i> 	<div class="-header"> 		Header 	</div> 	<div class="-content"> 		Dropdown Right 	</div> </div>  <div class="-drop -warning- _left_"> 	<i class="-arrow"></i> 	<div class="-header"> 		Header 	</div> 	<div class="-content"> 		Dropdown Left 	</div> </div> 
Navigation

Сюда входит много виджетов, отвечающих, соответственно, за навигацию.

Menu

Добавьте класс -menu, не забудьте про темы и размеры. Если вы добавите модификатор _vertical_, то получите вертикальное меню. С модификатором _disabled_ пункт меню становится неактивным.

<ul class="-menu -primary-"> 	<li><a>Menu 1</a></li> 	<li><a>Menu 2</a></li> 	<li><a>Menu 3</a></li> </ul> 

Добавьте -addon для отображения второстепенной информации внутри пунктов меню (например, хоткей).

<ul class="-menu -primary-"> 	<li><a>Menu 1 <i class="-addon fa fa-caret-down"></i></a></li> 	<li><a>Menu 2 <i class="-addon">⌘M</i></a></li> 	<li class="_active_"><a>Menu 3 <i class="-addon fa fa-star"></i></a></li> </ul> 

Для добавления подменю добавьте виджет -drop с виджетом -menu внутри. Если вы добавите модификатор _hovered_ к виджету -menu, то подменю будет появляться при наведении, если этого модификатора нет – при активации пункта меню.

<ul class="-menu -primary-"> 	<li><a>No hovered</a></li> 	<li><a>Menu 2</a></li> 	<li> 		<a>Menu 3 <i class="-addon fa fa-caret-down"></i></a> 		<div class="-drop"> 			<ul class="-menu _vertical_"> 				<li><a>Menu with long name <i class="-addon">⌘M</i></a></li> 				<li> 					<a>Menu 2 <i class="-addon fa fa-caret-right"></i></a> 					<div class="-drop _right_"> 						<ul class="-menu _vertical_"> 							<li><a>Menu 1</a></li> 							<li><a>Menu 2</a></li> 							<li> 								<a>Menu 3</a> 							</li> 						</ul> 					</div> 				</li> 				<li><a>Menu 3</a></li> 			</ul> 		</div> 	</li> </ul>  <ul class="-menu -primary- _hovered_"> 	<li><a>With hovered</a></li> 	<li><a>Menu 2</a></li> 	<li> 		<a>Menu 3 <i class="-addon fa fa-caret-down"></i></a> 		<div class="-drop"> 			<ul class="-menu _vertical_"> 				<li><a>Menu with long name <i class="-addon">⌘M</i></a></li> 				<li> 					<a>Menu 2 <i class="-addon fa fa-caret-right"></i></a> 					<div class="-drop _right_"> 						<ul class="-menu _vertical_"> 							<li><a>Menu 1</a></li> 							<li><a>Menu 2</a></li> 							<li> 								<a>Menu 3</a> 							</li> 						</ul> 					</div> 				</li> 				<li><a>Menu 3</a></li> 			</ul> 		</div> 	</li> </ul> 
Tabs

Используйте класс -tabs. Как и для всех виджетов работают темы, размеры и модификаторы.

<ul class="-tabs"> 	<li><a>Tab 1</a></li> 	<li class="_active_ -error-"><a>Tab 2</a></li> 	<li><a>Tab 3</a></li> 	<li disabled=""><a>Tab 4</a></li> </ul>  <ul class="-tabs -primary-"> 	<li><a>Tab 1</a></li> 	<li class="-warning-"><a>Tab 2</a></li> 	<li class="_active_"><a>Tab 3</a></li> 	<li disabled=""><a>Tab 4</a></li> </ul> 

Кроме того работают модификаторы _left_ и _right_ с модификатором _vertical_. Комбинируйте табы с виджетом grid.

<div class="-row"> 	<div class="-col2"> 		<ul class="-tabs _vertical_"> 			<li><a>Tab 1</a></li> 			<li class="_active_"><a>Tab 2</a></li> 			<li><a>Tab 3</a></li> 			<li disabled=""><a>Tab 4</a></li> 		</ul> 	</div> 	<div class="-col4"> 		Content of the second tab. 	</div> </div>  <div class="-row"> 	<div class="-col2"> 		<ul class="-tabs _vertical_ -primary-"> 			<li><a>Tab 1</a></li> 			<li><a>Tab 2</a></li> 			<li class="_active_"><a>Tab 3</a></li> 			<li disabled=""><a>Tab 4</a></li> 		</ul> 	</div> 	<div class="-col4"> 		Content of the third tab. 	</div> </div>  <div class="-row"> 	<div class="-col4"> 		Content of the second tab. 	</div> 	<div class="-col2"> 		<ul class="-tabs _right_ _vertical_"> 			<li><a>Tab 1</a></li> 			<li class="_active_"><a>Tab 2</a></li> 			<li><a>Tab 3</a></li> 			<li disabled=""><a>Tab 4</a></li> 		</ul> 	</div> </div>  <div class="-row"> 	<div class="-col4"> 		Content of the third tab. 	</div> 	<div class="-col2"> 		<ul class="-tabs _right_ _vertical_ -primary-"> 			<li><a>Tab 1</a></li> 			<li><a>Tab 2</a></li> 			<li class="_active_"><a>Tab 3</a></li> 			<li disabled=""><a>Tab 4</a></li> 		</ul> 	</div> </div> 
Pills

Используется класс -pills.

<ul class="-pills"> 	<li><a>Pill 1</a></li> 	<li class="_active_ -error-"><a>Pill 2</a></li> 	<li><a>Pill 3</a></li> 	<li disabled=""><a>Pill 4</a></li> </ul> <ul class="-pills -primary-"> 	<li><a>Pill 1</a></li> 	<li class="-warning-"><a>Pill 2</a></li> 	<li class="_active_"><a>Pill 3</a></li> 	<li disabled=""><a>Pill 4</a></li> </ul> 
Navbar

Панель инструментов -navbar можно комбинировать со всеми виджетами. При этом если их несколько и они идут подряд, из них формируется составная панель инструментов (пример ниже).

<div class="-navbar"> 	<div class="-row"> 		<div class="-col3"> 			<ul class="-menu"> 				<li><a>Menu 1</a></li> 				<li><a>Menu 2</a></li> 			</ul> 		</div> 		<div class="-col3"> 			<ul class="-pills -primary-"> 				<li><a>Pill 1</a></li> 				<li><a>Pill 2</a></li> 			</ul> 		</div> 		<div class="-col2"> 			<a class="-btn">Button</a> 		</div> 		<div class="-col4"> 			<div class="-group"> 				<form> 					<span class="-addon">@</span><div class="-field"><input type="text"></div> 				</form> 			</div> 		</div> 	</div> </div>  <div class="-navbar"> 	<div class="-group"> 		<a class="-btn"><i class="fa fa-th-large"></i></a> 		<a class="-btn"><i class="fa fa-th"></i></a> 		<a class="-btn"><i class="fa fa-th-list"></i></a> 	</div> 	<div class="-group"> 		<a class="-btn"><i class="fa fa-font"></i></a> 		<a class="-btn _active_"><i class="fa fa-bold"></i></a> 		<a class="-btn"><i class="fa fa-italic"></i></a> 	</div> 	<div class="-group"> 		<a class="-btn"><i class="fa fa-align-left"></i></a> 		<a class="-btn"><i class="fa fa-align-center"></i></a> 		<a class="-btn"><i class="fa fa-align-right"></i></a> 		<a class="-btn _active_"><i class="fa fa-align-justify"></i></a> 	</div> </div> 

Не забывайте комбинировать grid с -navbar.

<div class="-navbar"> 	<div class="-row"> 		<div class="-col2"> 			<div class="-header">Header</div> 		</div> 		<div class="-col3"> 			<ul class="-menu"> 				<li><a>Menu 1</a></li> 				<li><a>Menu 2</a></li> 			</ul> 		</div> 		<div class="-col2 -offset1"> 			<ul class="-pills -primary-"> 				<li><a>Pill 1</a></li> 				<li><a>Pill 2</a></li> 			</ul> 		</div> 		<div class="-col2"> 			<a class="-btn">Button</a> 		</div> 	</div> </div> 

ссылка на оригинал статьи http://habrahabr.ru/post/224957/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *