Sass API

概述

漢字標準格式提供Sass選擇器擴展 @extend代碼混用 @mixin函數 @function及變數等接口用以簡化樣式表的複雜度並避免重覆的樣式宣告

模組

一般情況下直接在Sass樣式表中匯入han-css/index.scss即可使用漢字標準格式的所有功能然而亦可依據網站需求載入需要的Sass模組

直接匯入漢字標準格式所有模組

@import '[node_modules]/han-css/index';

匯入需要的Sass模組

// 「漢字標準格式」必要檔案
@import '[node_modules]/han-css/src/sass/var';
@import '[node_modules]/han-css/src/sass/api';

// Normalize.css
@import '[node_modules]/han-css/src/sass/locale/normalize';

// 本地樣式標準化模組
@import '[node_modules]/han-css/src/sass/locale';

// 文字設計模組
@import '[node_modules]/han-css/src/sass/typography';

// 高級排版功能模組(章節的編排、行的組成)
@import '[node_modules]/han-css/src/sass/typeset';

字體基型 @extend

字體基型 @extend以精良的字體回退機制處理字體的套用文字設計模組多數元素及情境的字體樣式由字體基型 @extend提供相關調用的字體亦請見該頁各小節的說明

CSS3標準字體基型typeface generics共分為無襯線襯線手寫等寬裝飾五種目前漢字標準格式提供前述四種字體基型及相應意大利體的選擇器擴展為選擇器加入所需的字體基型 @extend選擇器便可套用相應的字體樣式避免樣式的重覆宣告

文字設計中generics一詞應作通用字體本使用手冊為明顯區分字體通用字體遂將後者統一稱作基型字體基型以為差異

一般字體基型 @extend的調用形式為

@extend %han-[基型]-[語言文字變體];

搭配西文意大利體的字體基型 @extend調用形式為

@extend %han-[基型]-italic-[語言文字變體];

西文等寬基型 @extend不提供意大利體

或參見以下二表

漢字字體基型

基型 繁體中文 簡體中文 日文
黑體 %han-sans-hant %han-sans-hans %han-sans-ja
黑體
意大利體
%han-sans-italic-hant %han-sans-italic-hans %han-sans-italic-ja
宋體 %han-serif-hant %han-serif-hans %han-serif-ja
宋體
意大利體
%han-serif-italic-hant %han-serif-italic-hans %han-serif-italic-ja
楷體 %han-cursive-hant %han-cursive-hans %han-cursive-ja
楷體
意大利體
%han-cursive-italic-hant %han-cursive-italic-hans %han-cursive-italic-ja
西文等寬
黑體
%han-mono-hant %han-mono-hans %han-mono-ja

Firefox 36起更改了 @font-face選用策略在部分情況下無法處理回退字體為正確顯示西文等寬字體漢字標準格式自v3.2.1暫時去除等寬漢字字體基型下的漢字標點字體

西文字體基型

基型 西文字體
無襯線 %han-sans
無襯線意大利體 %han-sans-italic
襯線 %han-serif
襯線意大利體 %han-serif-italic
手寫 %han-cursive
手寫意大利體 %han-cursive-italic
等寬 %han-mono

代碼示例

.box {
  @extend %han-mono-hans;
}

上方的Sass代碼會將選擇器.box擴展至佔用符%han-mono-hans樣式表輸出結果將類似於

[%han-mono-hans],
code:lang(zh-Hans),
[……],
.box {
  font-family: "Biaodian Pro Sans GB", Menlo, Courier, "Han Heiti GB", monospace, monospace, sans-serif
}

覆蓋順序

在擁有相同繼承權重的同一選擇器上套用二個以上的字體基型 @extend字體樣式不為基型 @extend宣告順序所決定相關覆蓋順序規則見下表

基型覆蓋優先級
西文等寬黑體
楷體意大利體
楷體
宋體意大利體
宋體
黑體意大利體
黑體

代碼示例

.some-container {
  @extend %han-cursive-italic-hant;
  @extend %han-sans-hant;
}

.some-container-2 {
  @extend %han-sans-hant;
  @extend %han-cursive-italic-hant;
}

上述代碼中容器.some-container.some-container-2的最終字體樣式皆應為楷體繁體西文意大利體而非黑體繁體意即覆蓋規則與宣告順序無關

相應的 @mixin

使用字體基型 @mixin han-typeface-by-lang可為選擇器加入所有地區變體之字體樣式的擴展其調用形式為

@include han-typeface-by-lang( $typeface: [基型] );
// 意大利體
@include han-typeface-by-lang( $typeface: [基型]-italic );

代碼示例

.entry {
  @include han-typeface-by-lang( $typeface: cursive );
}

上方代碼同等於

.entry {
  &:lang(zh),
  &:lang(zh-Hant) {
    @extend %han-cursive-hant;
  }

  &:lang(zh-Hans),
  &:lang(zh-CN) {
    @extend %han-cursive-hans;
  }

  &:lang(ja) {
    @extend %han-cursive-ja;
  }

  &:lang(zh-Latn),
  &:lang(ja-Latn),
  &:not(:lang(zh)):not(:lang(ja)),
  *:lang(zh-Latn),
  *:lang(ja-Latn),
  *:not(:lang(zh)):not(:lang(ja)) {
    @extend %han-cursive;
  }
}

章節的編排

章節的計數

若欲在非文章區塊容器預設為文章article元素中使用章節的計數功能直接混用han-section-counter即可套用後容器內二至四級標題將自動納入計數二級標題使用漢字數字一二三……標示四級標題則使用1.11.2.1數字形式適合用於技術文獻或長篇文章

@include han-section-counter( $toc: false );

參數說明

$toc

使用目錄清單與否預設關閉開啓後容器下類別為.toc的有序清單ol元素即作為該容器的目錄其後每增加一子清單元素即為下一級的標題名稱容器可置於長篇文章頂部方便跳轉及査閱

示例請見測試範例頁·章節與目錄的計數

行的組成

着重號

強調em元素預設使用着重號樣式漢字標準格式提供接口方便其他選擇器使用相同的CSS3 text-emphasis屬性的polyfill包含SassJavaScript二部分後者可依需求選用

Sass

@include han-text-emphasis( 
  $posi: under,
  $mark: circle,
  $shape: filled,
  $color: inherit,
  $skip: true,
  $extend: true
);

參數說明

$posi

着重號的位置可為字下under或字上over

$mark

着重號符號選項有圈circledot雙圈double-circle三角形triangle芝麻點sesame或其他字符<string>

$shape

着重號形狀填滿filled空心open、無none`

$color

着重號顏色

$skip

規避標點符號與否需配合JavaScript腳本

$extend

使用選擇器 @extend與否可減縮生成的CSS代碼大小

JavaScript選用

Han( context ).renderEm( selector )

參數說明

context

套用着重號選擇器的範圍預設為文件內容body元素

selector

套用着重號的目標選擇器支援CSS選擇器語法

示例請見測試範例頁·強調元素着重號

啓用web font合字功能

在需要啓用web font合字ligature功能的選擇器上引用如下 @extend

@extend %han-ligature;

行尾點號懸掛

Sass變數彙整下的相應小節

直式注音符號

非行間注元素下符合han.js渲染的注音符號格式之容器可以引用直式注音符號樣式 @extend

@extend %han-zhuyin;

Sass變數彙整

以下是漢字標準格式Sass樣式表下所有可調控的變數及其預設値最佳實踐方式係在引用_han.sass為需要更動的變數賦値

檔案路徑

Web fonts所在路徑

$han-font-path: './font/';

元素容器的選用

根元素依需求可改用:root

$han-root: html;

文章區塊容器其他的可能値有.article.entry#post……

$han-article: article;

行動裝置模式的啓用寬度裝置或瀏覽器視窗

$han-mobile-device-width: 480px;

文字樣式

行高全域行高文章行高

$han-line-height:         1.3;  // 全域行高(設置於根元素)
$han-article-line-height: 1.7;  // 文章行高(設置於文章區塊容器)

文章區塊是否使用齊頭尾文字對齊

$han-article-justify:     true;

文章區塊是否啓用章節與目錄的計數功能

$han-section-counter:     false;  // 章節標題計數
$han-section-counter-toc: false;  // 目錄計數

縮進字數

$han-indent:    2em;
$han-indent-md: 1em;  // 行動裝置上的縮進

着重號相關設定

// 遇標點回避與否
$han-text-emphasis-skip: true;

// 着重號形狀
// `none` || `filled` || `open`
$han-text-emphasis-shape: filled;

// 着重號符號
// `dot` || `circle` || `double-circle` || `triangle` || `sesame` || <string>
$han-text-emphasis-mark: circle;

// 着重號位置
// `over` || `under`
$han-text-emphasis-posi: under;

// 着重號顏色
// `inherit` || <color>
$han-text-emphasis-color: inherit;

// 日文着重號樣式設定(同上)
$han-text-emphasis-shape-ja: filled;
$han-text-emphasis-mark-ja:  sesame;
$han-text-emphasis-posi-ja:  over;
$han-text-emphasis-color-ja: inherit;

行間注元素中注音符號的字體大小單位em

$han-zhuyin-size: .5;

文字設計

字集相關設定漢字標點

// 繁體中文字體變體
// `default` || `CNS` || `GB`
$han-glyph-set-hant: default;

// 繁體中文標點字體
// `Pro` || `CNS` || `GB` || `simp`
$han-biaodian-hant: Pro;

// 簡體中文字體變體
// `default` || `GB`
$han-glyph-set-hans: GB;

// 簡體中文標點字體
// `Pro` || `CNS` || `GB` || `simp`
$han-biaodian-hans: GB;

西文預設字體

// 無襯線
$han-sans:  'Helvetica Neue', Helvetica, Arial;
// 襯線
$han-serif: Georgia, 'Times New Roman';
// 等寬
$han-mono:  Menlo, Courier;

中文預設字體

$han-sans-zh:    '';
$han-serif-zh:   '';
$han-cursive-zh: '';
$han-mono-zh:    $han-sans-zh;

行的組成

各語言文字的行尾點號懸掛啓用與否

// 繁體中文
$han-hanging-hant: false;
// 簡體中文
$han-hanging-hans: true;
// 日語
$han-hanging-ja:   true;