Вадим Макишвили — Распечатай Яндекс.Карты

Post on 16-Jun-2015

2.315 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

В Яндексе разработали лучшую в мире страницу печати Карт. Как они это сделали, с какими проблемами столкнулись, какие трюки изобрели.

TRANSCRIPT

Распечатай Яндекс.КартыВадим Макишвили, WSD декабрь 2013

Конкуренты1. Google Maps

2. Yahoo! Maps

3. Bing Maps

4. MapQuest

5. Wikimapia

6. 2GIS

...и это ещё не все

7. OpenStreetMap

8. Géoportail

9. Apple Maps

10. Nokia Maps

11. ViaMichelin

12. Seat Pagine Gialle

10

Какая нужна

карта?

чистая

удобная

подробная

полная

наглядная

Print & Go!

Критерии качества:• Размер карты

• Подача информации

• Альбомная ориентация

18

А4 формат

21х29cm

19

Google Maps

15х15cm

20

Google Maps 21

Google Maps 22

Google Maps 23

Google Maps 24

Google Maps 25

Google Maps 26

Google Maps 27

Google Maps 28

Yahoo! Maps

15х10cm

29

Yahoo! Maps 30

Microsoft Bing

12х12cm

3х3cm

31

Microsoft Bing 32

Microsoft Bing 33

Microsoft Bing 34

Рамблер Карты

15х15cm

35

Рамблер Карты 36

Рамблер Карты 37

Карты Mail.ru

15х12cm

38

Карты Mail.ru 39

Карты Mail.ru 40

Яндекс.Карты до 2013 года

15х15cm

41

Яндекс.Карты до 2013 года 42

Яндекс.Карты до 2013 года 43

Яндекс.Карты до 2013 года 44

Яндекс.Карты до 2013 года 45

Недостатки существующих решений:

• Карта маленькая

• Подача информации неоптимальная

• Нет альбомной версии

46

Но!

Печать на

Яндекс.Картах

Размеры карты:

20 х 27cm

49

50

51

52

53

54

55

56

57

58

59

Печать на

Яндекс.Картах

Как мы это

сделали?

... Quirks again?

63

1998

2012

Дальше будет:• как искали раскладку

• как подключали стили

• как фильтровали браузеры

• как обошлись с IE

• ...

• как напечатать фон?

66

В поисках раскладки 67

Карта

Шапка

Подвал

Quirks Mode

<table height=' 100% '>

...

</table>

td.map {

height: 100%

}

В поисках раскладки

01.

02.

03.

04.

05.

06.

68

<td class='map'> Карта </td>

<td> Шапка </td>

<td> Подвал </td>

Javascript?

В поисках раскладки 69

<td class='map'> Карта </td>

<td> Шапка </td>

<td> Подвал </td>

Javascript

:(

Хочется красотыif ( page.orientation === 'landscape' ) {

// do something

}

if ( page.size.width === '210mm' ) {

// do something

}

01.

02.

03.

01.

02.

03.

71

CSS for printer@media print and (orientation:landscape) {

// do something

}

01.

02.

03.

72

@rules

74

Nitro

WebCore

Webkit2

75

V8

WebCore

Chromium

76

V8

Blink

Chromium

77

12

78

@page/* Обнулить поля */

@page {

margin: 0

}

01.

02.

03.

04.

79

@page/* Обнулить поля */

@page {

margin: 0

}

01.

02.

03.

04.

file://localhost/Users/makishvili/projects/print-and-go/page-zero.html

05.07.13

80

@page/* Обнулить поля */

@page {

margin: 0

}

Не работает?

01.

02.

03.

04.

12

81

@page/* Изменить поля */

@page {

margin: 1cm

}

Заработало!

01.

02.

03.

04.

12

82

@page/* Изменить поля */

@page {

margin: 1cm

}

Точка отсчёта -

дефолтные отступы,

а не край листа

01.

02.

03.

04.

12

83

@page size/* Принудительно задать ориентацию */

@page {

size: landscape

}

01.

02.

03.

04.

84

@page name/* Группировка свойств */

@page myName {

font-size: 18px

padding: 10px

}

div {

page: myName

}

01.

02.

03.

04.

05.

06.

07.

08.

85

@page name. Фильтрация браузеров?@page chromePage { margin: 0 }

body.chrome { page: chromePage }

@page operaPage { margin: 5mm }

body.opera { page: operaPage }

01.

02.

03.

04.

86

@page name. Увы :(@page { margin: 0 }

@page operaPage { margin: 5mm }

body.opera { page: operaPage }

01.

02.

03.

04.

12

87

@document: фильтруем Firefox@page { margin: 0 }

@-moz-document regexp('*') {

@page {

margin-top: 1cm;

margin-bottom: 1cm;

}

}

01.

02.

03.

04.

05.

06.

07.

08.

88

Media-queries

Ориентация листа

@media print and (orientation:portrait) {

/* стили только для портрета */

}

@media print and (orientation:landscape) {

/* стили только для альбома */

}

01.

02.

03.

04.

05.

06.

9+

12-

90

Раскладка 91

Карта

Шапка

Подвал

table, td.map {

height: 100%

}

1. Таблица01.

02.

03.

92

<td class='map'> Карта </td>

<td> Шапка </td>

<td> Подвал </td>

div {

display: table-cell

}

.map {

height: 100%

}

1. Таблица01.

02.

03.

04.

05.

06.

93

<div class='map'> Карта </div>

<div> Шапка </div>

<div> Подвал </div>

• нет min-height и max-height

CSS 2.1 не определяет поведение min-height и max-height в таблицах,

поэтому любая реалиция этих свойств (применительно к таблицам) -

CSS2.1-совместимая

MDN

• нет overflow:hidden внутри ячейки

1. Таблица

94

div {

position: absolute

left: 0

right: 0

}

.head {

top: 0

height: 100px

}

.map {

top: 100px

bottom: 100px

}

.foot {

bottom: 0

height: 100px

}

2. Позиционирование01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

95

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

• не работает page-break-before

User Agents must apply these properties to block-level elements in the

normal flow of the root element.

CSS2 specification

• нужна фиксированная высота подвала или javascript

2. Позиционирование

96

.map {

height: 100%

}

3. Поток01.

02.

03.

97

<div class='map'> Карта </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

98

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

99

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

Утвержд

ено

Как организовать

стили?

Как организовать стили так, чтобы:• разделить на экранные и принтерные

• разделить на портретные и альбомные

• ...

• и уметь это дебажить

101

Сначала бездумноbody {

width: 900px

}

@media print {

body {

width: auto /* переопределяю */

padding: 5mm

}

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

102

Потом с медиа-типами@media all {

body { font-size: 16px }

}

@media screen {

body { width: 900px }

}

@media print {

body { padding: 5mm }

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

103

Потом с медиа-выражениями@media screen {

body { width: 900px }

}

@media print {

body { padding: 5mm }

}

@media print and (orientation:landscape) {

body { height: 210mm }

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

104

Наконец, с умом

<meta http-equiv='X-UA-Compatible' content='IE=EmulateIE7'>

<!--[if gt IE 7]><!-->

<link href='page.css'>

<!--<![endif]-->

<!--[if lt IE 8]>

<link href='page.ie.css'>

<![endif]-->

<link rel='stylesheet' href=' page.screen.css ' media=' screen '>

<link rel='stylesheet' href=' page.print.css ' media=' print '>

<link rel='stylesheet' href=' page.print.portrait.css ' media='print and ( orientation:portrait )'>

<link rel='stylesheet' href=' page.print.landscape.css ' media='print and ( orientation:landscape )'>

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

105

Подождите, а что с IE?<meta ... content=' IE=EmulateIE7 '>

А почему не так?<meta ... content=' IE=EmulateIE7 , IE=edge '>

106

IE9 печатает

хуже, чем IE7

o_O

<div class='view'>

<img class='map' src='map.png'>

</div>

.view {

position: relative

overflow: hidden

width: 200px; height: 200px

}

.map {

position: absolute

top: 50%; left: 50%

width: 1000px; height: 1000px

margin: -500px 0 0 -500px

}

Большая картинкав маленьком окне01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

108

Большая картинкав маленьком окне

overflow: hidden

9на печати

109

Большая картинкав маленьком окне

+ display: inline-block

9на печати

110

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

111

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

9на печати

112

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

<div class='map'> Карта </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

9на печати

113

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

<div class='map'> Карта </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

12 on Mac

114

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

.map {

height: 100%

}

.head, .foot {

position: absolute

left: 0

right: 0

}

.head {

top: 0

}

.foot {

bottom: 0

}

3. Поток + «наляпки»01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

12 on Mac

115

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

3. Поток + «наляпки»

+ <div class='opacity-hack'></div>

.opacity-hack {

position: absolute

background: red

opacity: 0.3

}

01.

02.

03.

04.

05.

12 on Mac

116

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

3. Поток + «наляпки»

<div class='opacity-hack'></div>

.opacity-hack {

position: absolute

opacity: 0

}

01.

02.

03.

04.

12 on Mac

117

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

Фильтруем

браузеры

(function () {

var ua = navigator.userAgent;

var browser = jQuery.browser;

var browserName;

switch (true) {

case Boolean(browser.opera):

browserName = ' opera '; break;

case Boolean(ua.indexOf('Safari') !== -1):

browserName = ' safari '; break;

...

}

if (browserName) {

document. documentElement.className += (' ' + browserName);

}

}());

Фильтруем браузеры01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

119

<html class=' opera '>

...

</html>

01.

02.

03.

html, body {

height: 100%

}

.map {

width: 100%

height: 100%

}

100% листа01.

02.

03.

04.

05.

06.

07.

120

<div class='map'> Карта </div>

html, body {

height: 100%

}

.map {

width: 100%

height: 100%

}

100% листа01.

02.

03.

04.

05.

06.

07.

25 6

121<div class='map'> Карта </div>

html, body {

height: 100%

}

.map {

width: 100%

height: 100%

}

@media print {

@page { margin: 5mm }

html.chrome { height: 267mm }

html.safari { height: 247mm }

}

@media print and (orientation:landscape) {

html.chrome { height: 187mm }

html.safari { height: 167mm }

}

100% листа01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

16.

122

<div class='map'> Карта </div>

25 6

Предпросмотр

печативрёт

@page/* Обнулить поля */

@page {

margin: 0

}

01.

02.

03.

04.

124

@page/* Обнулить поля */

@page {

margin: 0

}

01.

02.

03.

04.

125

@page/* Обнулить поля */

@page {

margin: 0

}

Молодец!

01.

02.

03.

04.

12

126

@page/* Обнулить поля */

@page {

margin: 0

}

Молодец!

01.

02.

03.

04.

18+

127

Что-то здесьнеправильно

128

Линии?!

129

Линии?!• это точно не border

• точно не outline

• не зазор между блоками

• ...

• что это? o_O

130

Javascript

;)

События• onbeforeprint

• onafterprint

5+ 6+ не захотели

132

Match @mediaif (window.matchMedia(' (min-width: 400px) ').matches) {

// do something

}

01.

02.

03.

5.112 10 6+ 9+

133

Помните, мечтали о красоте...

if ( page.orientation === 'landscape' ) {

// do something

}

if (window.matchMedia(' print and (orientation: landscape) ').matches) {

// do something

}

Неужели, сбылось? :)

01.

02.

03.

01.

02.

03.

134

Match "@media print"if (window.matchMedia(' print ').matches) {

// do something

}

if (window.matchMedia(' print and (orientation: landscape) ').matches) {

// do something

}

Match "@media orientation"

01.

02.

03.

5.1

01.

02.

03.

135

http://clck.ru/8vbdS

TJ VanToll"Detecting Print Requests with JavaScript"

136

Адаптивный

комментарий

138

139

5 строк

140

.footer {

position: absolute

bottom: 0

}

.footer and (min-width: 86px) {

position: static

}

Хочется Element Queries:01.

02.

03.

04.

05.

06.

07.

141

if (footerHeight > 86) {

footer.addClass('on-next-page');

}

/* Больше 86px — отправляется на второй лист */

.foote.on-next-page {

position: static

}

Комментарий на второй лист:01.

02.

03.

01.

02.

03.

04.

143

15 строк

144

15 ?

145

10 строк

146

@media print and (orientation: landscape) {

.footer and (min-width: 160px) { position: static }

}

@media print and (orientation: portrait) {

.footer and (min-width: 240px) { position: static }

}

Хочется Media + Element Queries01.

02.

03.

04.

05.

06.

147

if (footerHeight > 160) {

footer.addClass('on-next-page_ for-landscape ');

}

if (footerHeight > 240) {

footer.addClass('on-next-page_ for-portrait ');

}

Наша красота:

01.

02.

03.

04.

05.

06.

148

<!-- Подвал меньше 160px -->

<div class="footer"></div>

<!-- Больше 160px -->

<div class="footer on-next-page_ for-landscape "></div>

<!-- Больше 240px -->

<div class="footer on-next-page_ for-landscape

on-next-page_ for-portrait "></div>

Наша красота:

01.

02.

03.

04.

05.

06.

149

@media print {

/* Подвал меньше 160px */

.footer { position: absolute; bottom: 0 }

}

@media print and (orientation: landscape ) {

/* Больше 160px */

.footer.on-next-page_ for-landscape { position: static }

}

@media print and (orientation: portrait ) {

/* Больше 240px */

.footer.on-next-page_ for-portrait { position: static }

}

Наша красота:

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

150

151

15 строк 10 строк

Масштабированиекарты

153

Неточный

центр карты

Неточный центр

карты

155Шапка

Подвал

Неточный центр

карты

156Шапка

Подвал

Неточный центр

карты

157Шапка

Панорама

Подвал

158Шапка

Панорама

Подвал

Шапка

Подвал

Переместить центркарты<style media="print and (orientation:portrait)">

.map { top: -35px }

</style>

01.

02.

03.

160Шапка

Подвал

Переместить центркарты<style media="print and (orientation:portrait)">

.map { top: 75px }

</style>

01.

02.

03.

161Шапка

Панорама

Подвал

http://clck.ru/8hvkH

jQuery.injectCSS 162

Фон

bgcolor, background

МЕНЮ

КонтактыНовостиАбиссинские котятаАбиссинская породаСтандарт CFAСтандарт TICAОкрасы абиссинскихкошекЗаводчики и судьи обабиссинахВыбор абиссинскогокотенкаГостевая книгаКаталог статей

ПлеменноеразведениеЗдоровьеГенетика

Контакты

телефон: 8-916-271-71-57

е-мейл:    abyssinka@list.ruabyssinka@list.ru

 

Россия, Москва. Iultina Veselyaeva

Здесь вы можете написать и отправить нам письмо, мы ответим на все Ваши вопросы: заполнитепредлагаемую форму обратной связи-укажите, пожалуйста, ваше имя и электронный адрес.

форма обратной связи

Имя отправителя*:

E-mail отправителя*: -

ГЛАВНАЯ КОТЫ  (MALE) КОШКИ  (FEMALE) КОТЯТА  (KITTENS) ЗАЯВКА  НА  КОТЕНКА КОНТАКТЫ ССЫЛКИ

165

О  питомнике

Новости

О  породе  Бобтейл

Начинающему  заводчику

Выставки

Чемпионы

Приглашаем  на  вязки

Фотогалерея

Наши  путешествия

Наши  услуги

Полезные  документы

Ссылки

Они  навсегда  в  нашейпамяти  ...

Контакты

Напишите  нам

ЩЕНКИ

Наши  собаки  снимаются  в

О ПИТОМНИКЕ

 

 

логотип

                   Мы  кушаем  корма  "  HAPPY    DOG  "  с  30  %  скидкой!        

                             

166

питомник  основан  в  1993  г.  Москва    ♥  порода:    БРИТАНСКАЯ    КОРОТКОШЕРСТНАЯ    ♥  

ПРОДАЖА  британских  котят  ГОЛУБОГО  КЛАССИЧЕСКОГО  ОКРАСА  

Заводчик,  инструктор-­фелинолог  Курофф  Юлия  Валерьевна  

тел.  +7(916)426-­18-­18    e-­mail:  silverysnow@list.ru  

 

♥  ГЛАВНАЯ

♥  Новости  питомника

♥  О  питомнике

♥  О  породе

♥  Кпродаже                          

♥  Наши  КОТЯТА(фотогалерея)

♥  Наши  кошки

♥  Вязки

♥  Наши  коты

БРИТАНСКИЕ  КОТЯТА  НА  ПРОДАЖУ

На  данной  страничке  вашему  вниманию  предлагаются  котята,  которые  продаются  в  питомникев  данный  момент    (возле  фото  указан  возраст  котят)  

Внимание.  На  данный  момент  в  питомнике  продаются  голубые  британские  котята,  а  также

ведется  предварительная  запись  на  ГОЛУБЫХ  БРИТАНСКИХ  котят  ЕСЛИ  ВЫ  желаете  записаться  заранее  на  котят  -­  присылайте  заявку  по  эл.почте

Вы желаете купить британского котенка? Спасибо, что выбрали

именно наш питомник!

167

http://clck.ru/8hLnN

CSSWG: «Как включить печать фона?» 168

CSSWG: «Как включить печать фона?».selector {

-webkit-print-color-adjust: exact

}

Одно из предложений

@page {

print-color-adjust: exact

}

01.

02.

03.

01.

02.

03.

169

Все браузеры

печатают...

171

<div class='map'> Карта </div>

<div class='head'> Шапка </div>

<div class='foot'> Подвал </div>

Больше белого!• Это красиво

• Это воздушно

• Берите пример с хорошего ;)

172

IE не печатает

белый

А так печатает.selector {

filter: progid:DXImageTransform.Microsoft. gradient (

startColorstr= '#ffffff' ,

endColorstr= '#ffffff' ,

GradientType=0 );

}

01.

02.

03.

8-

174

Фоновый цвет

1. Экстраразметка с картинкой <div class='view'>

<img class='map' src=' green.png '>

</div>

.view {

position: relative

}

.map {

position: absolute

top: 0; bottom: 0

left: 0; right: 0

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

176

1. Экстраразметка с картинкой <div class='view'>

<img class='map' src='green.png'>

</div>

.view {

position: relative

}

.map {

position: absolute

top: 0; bottom: 0

left: 0; right: 0

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

177

Старьё!

2. Псевдоэлемент + PNG<div class='view'></div>

.view {

position: relative

}

.view::before {

position: absolute

top: 0; bottom: 0

left: 0; right: 0

content : url( green.png )

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

178

2. Псевдоэлемент + PNG<div class='view'></div>

.view {

position: relative

}

.view::before {

position: absolute

top: 0; bottom: 0

left: 0; right: 0

content : url( green.png )

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

179

Неуспех!

2. Псевдоэлемент + SVG<div class='view'></div>

.view::before {

...

content: url(green. svg )

}

<svg width=' 100% ' height=' 100% '>

<rect fill=' #00ff00 ' width='100%' height='100%'/>

</svg>

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

180

2. Псевдоэлемент + SVG<div class='view'></div>

.view::before {

...

content: url( 'data:image/svg+xml;<svg>...</svg>' )

}

<svg width='100%' height='100%'>

<rect fill='#00ff00' width='100%' height='100%'/>

</svg>

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

181

2. Псевдоэлемент + SVG<div class='view'></div>

.view::before {

...

content: url('data:image/svg+xml; base64,[data] ')

}

<svg width='100%' height='100%'>

<rect fill='#00ff00' width='100%' height='100%'/>

</svg>

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

182

2. Псевдоэлемент + SVG<div class='view'></div>

.view::before {

...

content: url('data:image/svg+xml; base64,[data] ')

}

<svg width='100%' height='100%'>

<rect fill='#00ff00' width='100%' height='100%'/>

</svg>

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

183

12 на печати

content:url(SVG)

3. Border<div class='view'></div>

.view {

position: relative

overflow: hidden

}

.view ::before {

position: absolute; z-index:-1

top: 0; bottom: 0

left: 0; right: 0

content: ''

border: solid green

border-width: 1000px 0 0

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

184

3. Border - i-блок<div class='head i-bgcolor '></div>

<div class='foot i-bgcolor '></div>

.i-bgcolor {

position: relative

overflow: hidden

}

.i-bgcolor::before {

position: absolute; z-index:-1

top: 0; bottom: 0

left: 0; right: 0

content: ''

border-style: solid

border-width: 1000px 0 0

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

.head::before {

border-color: green

}

.foot::before {

border-color: red

}

15.

16.

17.

18.

19.

20.

185

3. Border - i-блок<div class='head i-bgcolor '></div>

<div class='foot i-bgcolor '></div>

.i-bgcolor {

position: relative

overflow: hidden

}

.i-bgcolor::before {

position: absolute; z-index:-1

top: 0; bottom: 0

left: 0; right: 0

content: ''

border-style: solid

border-width: 1000px 0 0

}

Фоновый цвет

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

.head:before {

border-color: green

filter: ...Microsoft.gradient(

startColorstr='#ff008000'

endColorstr='#ff008000'

GradientType=0)

}

.foot:before {

border-color: red

filter: ...Microsoft.gradient(

startColorstr='#ffff0000'

endColorstr='#ffff0000'

GradientType=0)

}

15.

16.

17.

18.

19.

20.

21.

22.

186

Утвержд

ено

Фоновое

изображение

188

189

190

191

1. Маркер списка.view {

width: 300px

height: 200px

background: url(fox.png) 0 0 no-repeat

list-style: url(fox.png) inside

}

@media print {

.view {

display: list-item

}

}

Одиночная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

192

2. Псевдоэлемент + PNG<div class='view'></div>

.view {

position: relative

width: 300px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(fox.png)

}

Одиночная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

193

2. Псевдоэлемент + PNG<div class='view'></div>

.view {

position: relative

width: 300px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(fox.png)

}

Одиночная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

194

Утвержд

ено

3. Псевдоэлемент + опять SVG<div class='view'></div>

.view {

position: relative

width: 300px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(fox. svg )

}

Одиночная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

<svg width='300' height='200' >

<image xlink:href='fox. png ' width='300' height='200' />

</svg>

12.

13.

14.

195

3. Псевдоэлемент + опять SVG<div class='view'></div>

.view {

position: relative

width: 300px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(fox. svg )

}

Одиночная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

<svg width='300' height='200' >

<image xlink:href='fox. png ' width='300' height='200' />

</svg>

12.

13.

14.

196

12

1. Псевдоэлемент + SVG<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(small.fox.svg)

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

<svg width=' 9999 ' height=' 80 '>

<defs>

<pattern id='myFox' width=' 9999 ' height=' 80 '>

<image xlink:href='small.fox.png'

width='100' height=' 80 '/>

</pattern>

</defs>

<rect fill='url(#myFox)' width=' 9999 ' height=' 80 '/>

</svg>

13.

14.

15.

16.

17.

18.

19.

20.

197

1. Псевдоэлемент + SVG<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(small.fox.svg)

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

<svg width=' 100 ' height=' 9999 '>

<defs>

<pattern id='myFox' width=' 100 ' height=' 9999 '>

<image xlink:href='small.fox.png'

width=' 100 ' height='80'/>

</pattern>

</defs>

<rect fill='url(#myFox)' width=' 100 ' height=' 9999 '/>

</svg>

13.

14.

15.

16.

17.

18.

19.

20.

198

1. Псевдоэлемент + SVG<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(small.fox.svg)

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

<svg width=' 9999 ' height=' 9999 '>

<defs>

<pattern id='myFox' width=' 9999 ' height=' 9999 '>

<image xlink:href='small.fox.png'

width='100' height='80'/>

</pattern>

</defs>

<rect fill='url(#myFox)' width=' 9999 ' height=' 9999 '/>

</svg>

13.

14.

15.

16.

17.

18.

19.

20.

199

1. Псевдоэлемент + SVG<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

.view::before {

position: absolute

z-index:-1

content: url(small.fox.svg)

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

<svg width='9999' height='9999'>

<defs>

<pattern id='myFox' width='9999' height='9999'>

<image xlink:href='small.fox.png'

width='100' height='80'/>

</pattern>

</defs>

<rect fill='url(#myFox)' width='9999' height='9999'/>

</svg>

13.

14.

15.

16.

17.

18.

19.

20.

200

12

2. Border-image...

border-image: url(box.png) 100 0 0 0 / auto repeat;

...

Размноженная фоновая картинка

01.

02.

03.

201

2. Border-image<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

.view::before {

position: absolute; z-index:-1

top: 0

left: 0

right: 0

content: ''

border-style: solid

border-width: 100px 0 0

border-image: url(fox.png) 100 0 0 0 / auto repeat

}

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

202

2. Border-image<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

Размноженная фоновая картинка

01.

02.

03.

04.

05.

06.

07.

.view::before {

position: absolute; z-index:-1

top: 0

left: 0

right: 0

content: ''

border-style: solid

border-width: 0 0 0 100px

border-image: url(fox.png) 0 0 0 100 / auto repeat

}

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

203

3. Бонус<div class='view'></div>

.view {

position: relative

overflow: hidden

width: 400px

height: 200px

}

Растянутая фоновая картинка

01.

02.

03.

04.

05.

06.

07.

.view::before {

position: absolute; z-index:-1

top: 0

left: 0

right: 0

content: ''

border-style: solid

border-width: 0 0 0 100px

border-image: url(fox.png) 0 0 0 100 / auto stretch

}

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

204

• Нужен фоновый цвет?

::before + border-color

• Нужна одинокая картинка в фоне?

::before + content: url(png)

• Хотите замостить картинку?

::before + border-image: url(pbg) + repeat

• Или растянуть?

::before + border-image: url(pbg) + stretch

205

207

Распечатай Яндекс.КартыВадим Макишвили

makishvili@yandex-team.ru

Презентация: makishvili.github.io/print-and-go/index.html

208

top related