Attributes
属性
タグの属性はHTMLと似ていますが、単なるJavaScriptです。
(このページではスペース管理に|(パイプ)
を使います。)
a(href='google.com') Google
|
|
a(class='button' href='google.com') Google
|
|
a(class='button', href='google.com') Google
<a href="google.com">Google</a>
<a class="button" href="google.com">Google</a>
<a class="button" href="google.com">Google</a>
JavaScriptも動きます。
- var authenticated = true
body(class=authenticated ? 'authed' : 'anon')
<body class="authed"></body>
複数行指定
複数の属性を指定する場合、行を分けて指定することができます。
input(
type='checkbox'
name='agreement'
checked
)
<input type="checkbox" name="agreement" checked="checked" />
もしES2015のテンプレート文字列(Node.js/io.js 1.0.0以上)が使えるならば、その構文を使うことができます。 長い属性値を持つ場合はとても便利です。
input(data-json=`
{
"very-long": "piece of ",
"data": true
}
`)
<input data-json="
{
"very-long": "piece of ",
"data": true
}
">
特殊な属性名の指定
属性名にJavaScriptで指定出来ない名称を指定する場合、 ""(ダブルクォート)
または''(シングルクォート)
で囲むか、 属性を,(カンマ)
で区切ってください。 JavaScriptで指定できない名称は、例えば[]
や、()
で囲まれた名称が考えられます。 (Angular 2でよく使われます。)
//- この例では属性名に"(click)"を
//- 関数呼び出しとして指定しています。
//- このままではエラーが発生します。
div(class='div-class' (click)='play()')
index.pug:4:11
2| //- 関数呼び出しとして指定しています。
3| //- このままではエラーが発生します。
> 4| div(class='div-class' (click)='play()')
-----------------^
Syntax Error: Assigning to rvalue
div(class='div-class', (click)='play()')
div(class='div-class' '(click)'='play()')
<div class="div-class" (click)="play()"></div>
<div class="div-class" (click)="play()"></div>
変数挿入
注意
以前のPug/Jadeでは以下のような構文が利用できました。
a(href="/#{url}") Link
この構文は廃止されました。代わりに以下のように指定します。
(以前のバージョンとの違いや互換性、移行方法についてはMigrating to Pug v2を参照して下さい。)
属性に変数を指定する方法はいくつかあります。
- 単にJavaScriptを書く方法
- var url = 'pug-test.html'; a(href='/' + url) Link | | - url = 'https://example.com/' a(href=url) Another link
<a href="/pug-test.html">Link</a> <a href="https://example.com/">Another link</a>
- もしES2015のテンプレート文字列(Node.js/io.js 1.0.0以上)が使えるならば、その構文を使うことができます。
- var btnType = 'info' - var btnSize = 'lg' button(type='button' class='btn btn-' + btnType + ' btn-' + btnSize) | | button(type='button' class=`btn btn-${btnType} btn-${btnSize}`)
<button class="btn btn-info btn-lg" type="button"></button> <button class="btn btn-info btn-lg" type="button"></button>
属性値のエスケープ
デフォルトではXSS等の攻撃を防ぐために、属性値は全てエスケープされます。 もしエスケープさせたくない場合は=
の代わりに!=
を使います。
div(escaped="<code>")
div(unescaped!="<code>")
<div escaped="<code>"></div>
<div unescaped="<code>"></div>
注意
エスケープされていないコードは危険です。XSSを防ぐには、ユーザーの入力情報を全て適切にサニタイズする必要があります。
boolean属性
Pugはboolean属性をミラーリングします。 値はtrue
、false
が指定可能です。 値を指定しない場合はtrue
が適用されます。
input(type='checkbox' checked)
|
|
input(type='checkbox' checked=true)
|
|
input(type='checkbox' checked=false)
|
|
input(type='checkbox' checked=true.toString())
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="checked" />
<input type="checkbox" />
<input type="checkbox" checked="true" />
もしdoctypeがhtml
なら、Pugはミラーリングする必要が無いと判断し、 代わりに簡潔な方法で記述します。
doctype html
|
|
input(type='checkbox' checked)
|
|
input(type='checkbox' checked=true)
|
|
input(type='checkbox' checked=false)
|
|
input(type='checkbox' checked=true && 'checked')
<!DOCTYPE html>
<input type="checkbox" checked>
<input type="checkbox" checked>
<input type="checkbox">
<input type="checkbox" checked="checked">
スタイル属性
style
属性は、他の属性と同様に文字列を指定することができますが、 スタイルのオブジェクトを指定することもできます。 これはJavaScriptによって生成されたスタイルを指定する時に便利です。
a(style={color: 'red', background: 'green'})
<a style="color:red;background:green;"></a>
クラス属性
class
属性は、他の属性と同様に文字列を指定することができますが、 クラス名の配列を指定することもできます。 これはJavaScriptによって生成されたクラス配列を指定する時に便利です。
- var classes = ['foo', 'bar', 'baz']
a(class=classes)
|
|
//- 繰り返し処理したクラス属性にマージすることもできます。
a.bang(class=classes class=['bing'])
<a class="foo bar baz"></a>
<a class="bang foo bar baz bing"></a>
クラス名をtrue
またはfalse
にマップするオブジェクトを指定することもできます。 条件付きクラスを指定する場合に便利です。
- var currentUrl = '/about'
a(class={active: currentUrl === '/'} href='/') Home
|
|
a(class={active: currentUrl === '/about'} href='/about') About
<a href="/">Home</a>
<a class="active" href="/about">About</a>
classリテラル
クラス名は.classname
構文を使って指定することができます。
a.button
<a class="button"></a>
div
は一番使うタグなので、div
を省略することもできます。
.content
<div class="content"></div>
idリテラル
idは#idname
構文を使って指定することができます。
a#main-link
<a id="main-link"></a>
div
は一番使うタグなので、div
を省略することもできます。
#content
<div id="content"></div>
&attributes
"アンド アトリビュート"と読みます。 &attributes
は、要素に対してオブジェクトを分割して挿入することができます。
div#foo(data-bar="foo")&attributes({'data-foo': 'bar'})
<div id="foo" data-bar="foo" data-foo="bar"></div>
上記ではオブジェクトを指定していますが、オブジェクト変数でも可能です。 属性ミックスインを参照してください。
- var attributes = {};
- attributes.class = 'baz';
div#foo(data-bar="foo")&attributes(attributes)
<div class="baz" id="foo" data-bar="foo"></div>
注意
&attributes
で適用された属性は自動エスケープされません。XSSを防ぐには、ユーザーの入力情報を全て適切にサニタイズする必要があります。 mixinからattributes
が呼び出された場合は自動エスケープします。
© 2017 pugjs.org Released under the MIT license
このコンテンツはpugドキュメントを翻訳/改変したものです。