SlideShare a Scribd company logo
1 of 121
Download to read offline
Книги в браузере
Олег Мохов
Зачем?
7
Приложения
Kindle
iBooks
FBReader
Adobe Reader
FuturePress EPUB Reader
10
12
Сделать читалку книг
Сделать читалку книглучшую
Даже бабушка сможет юзать
16
https://vimeo.com/82527410
* Межстрочные интервалы, размеры шрифта и отступы
reset.css*
Иллюстрация из книги Яна Чихольда «Облик Книги»
Иллюстрация из книги Яна Чихольда «Облик Книги»
Две страницы
Paged Media
CSS Books
scroll
margin, transition, left, etc
22
Две страницы
Paged Media
CSS Books
scroll
margin, transition, left, etc
23
Две страницы
Paged Media
CSS Books
scroll
margin, transition, left, etc
23
Две страницы
Paged Media
CSS Books
scroll
margin, transition, left, etc
23
Две страницы
Paged Media
CSS Books
scroll
margin, transition, left, etc
23
Две страницы
Paged Media
CSS Books
columns
margin, transition, left, etc
24
columns
http://dev.w3.org/csswg/css-multicol-1/#columns
columns: 2;
Перелистывание страниц
columns: 2;
columns: 2;
columns: 2;
Перелистывание страницы
〉 scroll
〉 CSS (margin, left, transition, etc…)
30
Перелистывание страницы
〉 scroll
〉 CSS (margin, left, transition, etc…)
30
columns: 2;
columns: 1;
columns: 1;
columns: 1;
http://dev.w3.org/csswg/css-multicol-1/#the-multi-column-model
A multicol element is an element whose column-count property
is not auto…
Multi-column layout introduces a new type of container …
the column box or column…
Column boxes in a multi-column element are arranged into rows …
columns: 1;
Использован фрагмент передачи КВН, правообладателем передачи является Первый Канал, Россия
Использован фрагмент передачи КВН, правообладателем передачи является Первый Канал, Россия
columns: 1;
columns: 1;
width: 200%;
columns: 2;
width: 200%;
“Ни единого разрыва”
Разрывы заголовков
-webkit-column-break-inside: avoid; /* webkit */
page-break-inside: avoid; /* firefox */
break-inside: avoid; /* ie10+ */
42
Заголовок
h1 {
margin-bottom: 1em;
}
45
заголовок
Однажды в студёную зимнюю
Заголовок
h1 {
padding-bottom: 2em;
}
46
заголовок
Однажды в студёную зимнюю
заголовок
Однажды в студёную зимнюю
заголовок
h1 {
padding-bottom: 2em;
margin-bottom: -1em;
}
Однажды в студёную зимнюю
Заголовок
47
заголовокзаголовок
Однажды в студёную зимнюю
заголовокзаголовок
Однажды в студёную зимнюю
заголовок
Главы
Разрыв страницы
51
Разрыв страницы
-webkit-column-break-after: always;
51
Разрыв страницы
-webkit-column-break-after: always;
page-break-after: always;
51
Разрыв страницы
-webkit-column-break-after: always;
page-break-after: always;
page-break-inside: avoid;
52
Картинки
Иллюстрация из книги «Human Transit: How clearer Thinking about Pulbic Transit Can Enrich Our Communities and Our Lives»
Текст из книги «Human Transit: How clearer Thinking about Pulbic Transit Can Enrich Our Communities and Our Lives»
Картинки
img {
max-width: 100%;
max-height: 100%;
}
57
58
58
div {
position: absolute;
}
img {
max-width: 100%;
max-height: 100%;
}
opacity: 0;
Картинки
img {
max-width: 100%;
max-height: 100%;
}
59
Использован фрагмент передачи КВН, правообладателем передачи является Первый Канал, Россия
И вычислять при ресайзе :(
Зафиксировать размеры
63
64
height: 20px;
64
height: 20px;
height: 100px;
64
height: 20px;
height: 100px;
height: 200px;
64
height: 20px;
height: 100px;
height: 200px;
height: 201px;
65
height: 20px;
height: 100px;
height: 200px;
height: 201px;
max-height: 100%;
66
66
overflow: hidden;
max: 100%
display: flex;
flex-direction: column;
max: 100%
68
68
69
70
70
.image-wrapper {
overflow: hidden;
}
71
71
flex-shrink: 0;
display: flex;
flex-direction: column;
max-height: 100%;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
display: flex;
flex-direction: column;
max-height: 100%;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
flex-shrink: 1;
overflow: hidden;
background-image: url(..)
background-size: contain;
display: flex;
flex-direction: column;
max-height: 100%;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
flex-shrink: 1;
overflow: hidden;
background-image: url(..)
background-size: contain;
flex-shrink: 0;
73
Сноски
И ещё
Фичи
79
Фичи
〉 Сохранение позиции при изменении шрифта
79
Фичи
〉 Сохранение позиции при изменении шрифта
〉 Сохранение позиции при переходе к сноске
79
Фичи
〉 Сохранение позиции при изменении шрифта
〉 Сохранение позиции при переходе к сноске
〉 Ширина листа в символах и браузерная математика
79
Фичи
〉 Сохранение позиции при изменении шрифта
〉 Сохранение позиции при переходе к сноске
〉 Ширина листа в символах и браузерная математика
〉 Примерное время чтения книги
79
80
Использованы кадры сериала «The big bang theory», правообладатель телеканал CBS, США
Использованы кадры сериала «The big bang theory», правообладатель телеканал CBS, США
Сделать читалку книглучшую
Сделать читалку книглучшую
OpenSource is coming…
@chitalkajs
Привет, Вадим!
86
Олег Мохов
Разработчик интерфейсов
Контакты
@olmokhov
olmokhov
+7 (912) 621 45 27
mokhov@yandex-team.ru
Ссылки
Доклад Лёши Иванова про Justify
Спецификация Multicolumn Layout
Спецификация CSS Books
Спецификация Paged Media
87

More Related Content

More from FDConf

Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloRadoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloFDConf
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныВиктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныFDConf
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless FDConf
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?FDConf
 
В погоне за производительностью
В погоне за производительностьюВ погоне за производительностью
В погоне за производительностьюFDConf
 
Если у вас нету тестов...
Если у вас нету тестов...Если у вас нету тестов...
Если у вас нету тестов...FDConf
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxMigrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxFDConf
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаDart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаFDConf
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureScalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureFDConf
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.FDConf
 
CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSSFDConf
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionFDConf
 
Будь первым
Будь первымБудь первым
Будь первымFDConf
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native ""Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "FDConf
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"FDConf
 
«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​FDConf
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​FDConf
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»FDConf
 
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​FDConf
 
«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​FDConf
 

More from FDConf (20)

Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloRadoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and Apollo
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныВиктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?
 
В погоне за производительностью
В погоне за производительностьюВ погоне за производительностью
В погоне за производительностью
 
Если у вас нету тестов...
Если у вас нету тестов...Если у вас нету тестов...
Если у вас нету тестов...
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxMigrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to Redux
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаDart: питание и сила для вашего проекта
Dart: питание и сила для вашего проекта
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureScalable Angular 2 Application Architecture
Scalable Angular 2 Application Architecture
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
 
CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSS
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Будь первым
Будь первымБудь первым
Будь первым
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native ""Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
 
«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​
 

«Книги в браузере»