Навигация:  Справочная информация > Динамические стили >

О наследовании в стилях

Печать этого раздела Предыдущая страницаВернуться к краткому обзору главыСледующая страница

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

Что является динамическим наследованием?

Говоря кратко, динамическое наследование означает, что стили, основанные на других стилях, наследуют признаки их родительских стилей, и унаследованные признаки динамически связаны с теми же признаками в родительских стилях. Если признак изменен в родителе, изменение автоматически (и немедленно) унаследовано всеми дочерними стилями. Точно так же, эти изменения автоматически и немедленно отражены во всех текстах, с которыми связаны дочерние стили.

Например, если Вы изменяете шрифт стиля Normal , который является обычно стилем "Дедушки", на котором базируются почти все стили в любом проекте, это автоматически и немедленно изменяет шрифт в (почти) всех стилях в вашем проекте. Единственные исключения - стили, которые не основаны на Normal, и стили, которым уже установили другие шрифты.

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

Дерево наследования

Стили не должны быть основанными на других стилях, но обычно это так. Когда Вы создаете новый стиль на основе другого стиля (см. Определение стилей), он первоначально точная копия его родительского стиля, так, чтобы это совместно использовать все атрибуты родителя. Мы говорим, что дочерний стиль "наследует" все признаки родительского стиля.

Два идентичных стиля не были бы полезны, таким образом Вы потом редактируете некоторые из атрибутов вашего нового стиля и оставляете другие неизменными. Ключ к пониманию динамического наследования - понимание отношений измененных и неизменных атрибутов в дочерних стилях.

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

Рис. 1: Упрощенный пример дерева стиля

Рис. 1: Упрощенный пример дерева стиля

Измененные и неизменные атрибуты:

Измененные атрибуты этого примера показаны синим, неизменные атрибуты - черным.

Неизмененные атрибуты динамически связаны с соответствующими атрибутами в их родительских стилях - изменения, сделанные в этих атрибутах в родителе, автоматически унаследованы дочерними. К тому же, наследование от родителя останавливается в измененных атрибутах.

Как это работает в примере:

В примере прежде всего дочерние стили кроме Callout наследуют шрифт Arial от Normal, потому что этот шрифт не было изменен ни в одном из этих стилей. Если Вы потом редактируете Normal и измените Arial на Times Roman, то шрифт всех дочерних стилей кроме Callout автоматически изменится с Arial на Times Roman.

Стили Normal Indent и Normal Indent 2 также наследуют размер шрифта от Normal. Если Вы редактируете Normal и измените его размер шрифта с 11 пунктов на 12 пунктов, то это изменение будет унаследовано этими двумя стилями, но не двумя стилями Heading.

Другой хороший пример - атрибут Пространство после. В Normal этот атрибут установлен 0.1", и это значение унаследовано всеми дочерними стилями кроме Heading2. Если Вы редактируете Normal и устанавливаете его атрибут Пространство после, как 0.0", эти изменения будет унаследованы всеми дочерними стилями кроме Heading2.

Измененные атрибуты запускают новую последовательность наследования:

Измененный атрибут в дочернем стиле запускает новую последовательность наследования:

В Callout оригинальный шрифт был изменен на Verdana 10. Callout 2 наследует шрифт, но размер был изменен на 12. Это означает, что, если Вы редактируете Callout и изменяете его шрифт на Tahoma, это изменение будет унаследовано Callout 2. Однако, изменение размера шрифта в Callout не будет отражено в Callout 2, потому что размер шрифта там был изменен, таким образом останавливая наследование для того атрибута.

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

Это иллюстрирует самую важную характеристику наследования для измененных атрибутов: Изменение атрибута выключает наследование от родителя для этого атрибута. В то же самое время, однако, это запускает новое дерево наследования для этого же атрибута: когда Вы создаете новые стили, основанные на измененном стиле, новая установка унаследована новыми стилями.

Параллельное наследование и последовательное наследование:

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

Рис. 2: Параллельное и последовательное наследование

Рис. 2: Параллельное и последовательное наследование

В деревьях параллельного наследования все подстили - прямые дочерние родительского стиля. Эта опция используется, когда Вы создаете прямые варианты родительского стиля. Например, Вы могли бы использовать это, чтобы создать три разных варианта вашего стиля основного текста, которые имеют разные отступы, но в остальном идентичны.

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

Как показано на рис. 1 выше в этом разделе, большинство деревьев стиля использует комбинацию параллельного и последовательного наследования.

Почему динамическое наследование полезно:

Так же, как динамические стили позволяют переформатировать ваш весь проект, редактируя несколько определений стиля, динамическое наследование позволяет сделать основные изменения на все семьи стилей, редактируя единственное определение стиля. Например, Вы можете обычно изменять основной шрифт для всего вашего проекта, изменяя шрифт в Normal. Для большего количества деталей относительно использования этих особенностей, чтобы планировать ваши стили см. Cтратегии организации cтиля.

Остановка наследования:

Именно потому, что динамическое наследование настолько мощно, могут быть моменты, когда Вы хотите остановить это. Есть ситуации, когда Вы хотите быть абсолютно уверены, что стиль никогда не будет изменяться, когда Вы делаете изменения в другом стиле.

Выполнение этого очень просто: просто не базируйте ваш новый стиль на другом стиле: Когда Вы создаете новый стиль, выберите (None) в области Основан на стиле: для определения стиля. Вы можете также изменить это позже, если хотите. См. Правка стилей для деталей.

Стандартный стиль Code Example, используемый для того, чтобы форматировать код программы с подсветкой синтаксиса - пример этого. Этот стиль не имеет родителя, потому что его формат должен всегда быть тем же - Вы не хотите, чтобы никакие другие стили были в состоянии изменить его шрифт, размер или форматирование параграфа.

Стиль без родителя запускает новое дерево наследования

Стиль без родителя не наследует никаких признаков от любых других стилей. Это означает, что он "защищен" от неожиданных изменений, вызванных изменениями в родительских стилях.

В то же самое время, стиль без родителя - также "первый родитель" в новом дереве наследования: Если Вы будете базировать новые стили на этом стиле, то они унаследуют свойства стиля. Вы можете использовать эти возможности, чтобы создать новые и отдельные семьи стилей. См. Стратегии организации стиля еще для некоторых идей относительно этого.

Выключайте наследование с осторожностью!

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

См. также:

Стратегии организации стиля

Форматирование текста и стили (инструкции с практическими рекомендациями)