レスポンシブレイアウトは、レスポンシブ web デザインを実現するためのメカニズムです。レスポンシブレイアウトを使用すると、ユーザーが使用するデバイスのレイアウトとサイズに応じて web ページを作成できます。
これは、アダプティブ web デザイン(主にクラシック UI 用)を使用するモバイル web メカニズムと比較できます。
AEM は、次のメカニズムを組み合わせて使用することにより、ページのレスポンシブレイアウトを実現します。
レイアウトコンテナコンポーネント
このコンポーネントは、レスポンシブグリッド内にコンポーネントを追加および配置できるグリッド段落システムを提供します。ページのデフォルトの parsys として使用したり、コンポーネントブラウザーで作成者が使用できるようにしたりできます。
デフォルトのレイアウトコンテナコンポーネントは以下の場所で定義します。
/libs/wcm/foundation/components/responsivegrid
レイアウトコンテナは次のように定義できます。
ユーザーがページに追加できるコンポーネントとして。
ページのデフォルトの parsys として。
両方として。
レイアウトコンテナをページの標準とし、この中でユーザーがレイアウトコンテナをさらに追加できるようにすることができます。例えば、列を制御する場合などです。
レイアウトモード
レイアウトコンテナをページに配置したら、
レイアウトモードを使用してレスポンシブグリッド内にコンテンツを配置することができます。
エミュレーター
コンポーネントをインタラクティブにサイズ変更することによって、デバイスやウィンドウのサイズに従ってレイアウトを再編成する、レスポンシブ web サイトを作成および編集できます。その後、エミュレーターを使用して、コンテンツのレンダリング方法を確認できます。
レイアウトコンテナコンポーネントはクラシック UI でも使用できますが、完全な機能を利用できるのはタッチ対応 UI のみです。
これらのレスポンシブグリッドメカニズムを使用すると、次のことが可能になります。
標準インストールでは、レスポンシブレイアウトは We.Retail リファレンスサイト用に設定されています。他のページのレイアウトコンテナコンポーネントをアクティベートする必要があります。
このタスクをおこなうと、自分のサイトにレスポンシブエミュレーターを表示できます。
エミュレーターでページをサポートできるようにするには、ページコンポーネントを登録する必要があります。シミュレーション用のページコンポーネントの登録を参照してください。
エミュレーターの「デバイス」リストに表示されるデバイスグループを指定するには、デバイスグループの指定を参照してください。
エミュレーターを含めるには、サイトをデバイスグループにリンクする必要があります。「デバイス」リストの追加(クラシック UI とタッチ操作向け UI の両方)を参照してください。
この手順は、サイトでレイアウトモードを有効にするために使用します。
ブレークポイントには次の特徴があります。
レスポンシブデザインで使用します。
定義可能です。
タイトルと幅を定義します。
エミュレーターを使用しているときに、ページエディターの上部にマーカーとして表示されます。
親ノード階層から継承され、任意に上書きできます。
最後に設定されたブレークポイントより上のすべてに対応するデフォルト(標準)のブレークポイントがあります。
CRXDE Lite または XML を使用して定義できます。
新しいプロジェクトを設定する場合:
既存のプロジェクト(既存のコンテンツを含む)を移行する場合:
CRXDE Lite(または同等のツール)を使用して、以下のいずれかに移動します。
jcr:content
ノード。jcr:content
の下に、以下のノードを作成します。
cq:responsive
nt:unstructured
この下に、次のノードを作成します。
breakpoints
nt:unstructured
breakpoints ノードの下に、任意の数のブレークポイントを作成できます。それぞれ、以下のプロパティを持つ単一のノードとして定義してください。
<descriptive name>
nt:unstructured
String
* <descriptive title seen in Emulator>
*Decimal
* <value of breakpoint>
*ブレークポイントは、該当するテンプレート(またはコンテンツ)フォルダーの下で .context.html
の <jcr:content>
セクション内に配置されます。
定義の例は以下のとおりです。
<cq:responsive jcr:primaryType="nt:unstructured">
<breakpoints jcr:primaryType="nt:unstructured">
<phone jcr:primaryType="nt:unstructured" title="{String}Phone" width="{Decimal}768"/>
<tablet jcr:primaryType="nt:unstructured" title="{String}Tablet" width="{Decimal}1200"/>
</breakpoints>
</cq:responsive>
これは、ページコンポーネントが基盤ページコンポーネントに基づいていない場合にのみ必要です。
以下の cq:infoProviders
ノード構造を、親ページコンポーネントにコピーします。
/libs/foundation/components/page/cq:infoProviders/responsive
この手順は、レイアウトモードでコンポーネントのサイズ変更を可能にするために必要です。
ページのメイン parsys をレイアウトコンテナになるように設定するには、parsys を次のように定義する必要があります。
wcm/foundation/components/responsivegrid
以下の場所で定義します。
以下に、定義を説明する 2 つの例を示します。
HTL:
<sly data-sly-resource="${'par' @ resourceType='wcm/foundation/components/responsivegrid'}/>
JSP:
<cq:include path="par" resourceType="wcm/foundation/components/responsivegrid" />
AEM では、LESS を使用して、必要な CSS の一部を生成します。これらをプロジェクトに含める必要があります。
さらに、クライアントライブラリを使用して、設定および関数呼び出しを追加する必要があります。以下の LESS の抜粋は、プロジェクトに最低限追加する必要のあるものの例です。
@import (once) "/libs/wcm/foundation/clientlibs/grid/grid_base.less";
/* maximum amount of grid cells to be provided */
@max_col: 12;
/* default breakpoint */
.aem-Grid {
.generate-grid(default, @max_col);
}
/* phone breakpoint */
@media (max-width: 768px) {
.aem-Grid {
.generate-grid(phone, @max_col);
}
}
/* tablet breakpoint */
@media (min-width: 769px) and (max-width: 1200px) {
.aem-Grid {
.generate-grid(tablet, @max_col);
}
}
基本のグリッド定義は以下の場所にあります。
/libs/wcm/foundation/clientlibs/grid/grid_base.less
レスポンシブコンテナ内に格納されているコンポーネントは、レスポンシブグリッドサイズに従って(それぞれの HTML DOM 要素と共に)サイズ変更されます。したがって、このような状況では、固定幅の(制限された)DOM 要素の定義を回避(または更新)することをお勧めします。
次に例を示します。
前:
width=100px
後:
max-width=100px
グリッド内でコンポーネントをサイズ変更すると、以下のリスナーが適宜トリガーされます。
beforeedit
beforechildedit
afteredit
afterchildedit
レスポンシブグリッドに含まれているアダプティブ画像のコンテンツを適切にサイズ変更および更新するには、REFRESH_PAGE
リスナーに設定されている afterEdit
を、含まれているすべてのコンポーネントの EditConfig
ファイルに追加する必要があります。
次に例を示します。
<cq:listeners jcr:primaryType="cq:EditListenersConfig" afteredit="REFRESH_PAGE" />
アダプティブ画像のメカニズムは、現在のウィンドウサイズに適した画像の選択を制御するスクリプトを介して使用可能になります。DOM の準備が整った後、または専用のイベントを受信するとアクティベートされます。現時点のところ、ユーザーのアクションの結果を適切に反映するには、ページを更新する必要があります。
カスタムスタイルシートの clientlibs を作成時と公開時に適切に機能させるには、これをヘッダーの一部として読み込む必要があります。
このタスクにより、作成者は、レイアウトコンテナコンポーネントのインスタンスをページにドラッグできます。
作成者がさらに多くのレスポンシブグリッドをコンテンツページに追加できるようにするには、ページのレイアウトコンテナコンポーネントを有効にする必要があります。これは、次のいずれかを使用して行います。
オーサー環境
デザインモードを使用して、ページのレイヤーコンテナコンポーネントをアクティベートします。
コンポーネント定義
コンポーネントを定義するときに、allowedComponent
または静的インクルードを使用します。
レイアウトコンテナの特定のインスタンスごとに、使用可能な列の数を設定できます。
オーサー環境
レイアウトコンテナの特定のインスタンスごとに、使用可能な列の数を設定できます。
これを行うには、デザインモードを使用して、必要なコンテナのデザインダイアログを開きます。ここで、配置やサイズ設定に使用できる列の数を指定できます。デフォルトは 12 です。
XML
レスポンシブグリッドの定義は次の場所で指定します。
etc/design/<*your-project-name*>/.content.xml
以下のパラメーターを定義できます。
使用可能な列の数:
columns="{String}8"
現在のコンポーネントに追加できるコンポーネント:
components="[/libs/wcm/foundation/components/responsivegrid, ...