Web 開発者向けの Flutter
このページは HTML に精通したユーザー向けです アプリケーションの UI のコンポーネントを配置するための CSS 構文。 HTML/CSS コード スニペットを、同等の Flutter/Dart コードにマップします。
Flutter はクロスプラットフォーム アプリケーションを構築するためのフレームワークです Dart プログラミング言語を使用します。 Dart を使用したプログラミングのいくつかの違いを理解するには そしてJavaScriptを使ったプログラミング、 見るJavaScript 開発者として Dart を学ぶ。
両者の基本的な違いの 1 つは、 Web レイアウトと Flutter レイアウトを設計する、 制約がどのように機能するかを学んでいます。 ウィジェットのサイズと配置の方法についても説明します。 詳細については、を参照してください。制約を理解する。
例では次のことを前提としています。
-
HTML ドキュメントは次で始まります
<!DOCTYPE html>
、CSS ボックス モデル すべての HTML 要素に対して次のように設定されますborder-box
、 Flutter モデルとの一貫性を保つため。{ box-sizing: border-box; }
-
Flutter における「Lorem ipsum」テキストのデフォルトのスタイル によって定義されます
bold24Roboto
次のような変数、 構文を単純にするために、次のようにします。TextStyle bold24Roboto = const TextStyle( color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold, );
基本的なレイアウト操作の実行
次の例は、最も一般的な UI レイアウト タスクを実行する方法を示しています。
テキストのスタイルと配置
CSS のフォント スタイル、サイズ、その他のテキスト属性
フォントと色のプロパティを持つハンドルは個別です
のプロパティTextStyle
の子Text
ウィジェット。
テキストを整列させるために使用される CSS の text-align プロパティの場合、
textAlign プロパティがありますText
ウィジェット。
HTML と Flutter の両方で、子要素またはウィジェット デフォルトでは、左上に固定されています。
<div class="grey-box">
Lorem ipsum
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Georgia;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: const Text(
'Lorem ipsum',
style: TextStyle(
fontFamily: 'Georgia',
fontSize: 24,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
);
背景色の設定
Flutter では、背景色を設定します。color
財産
またはdecoration
の財産Container
。
ただし、両方を指定することはできません。
その結果、背景色の上に装飾が描画されます。
のcolor
プロパティを優先する必要があります
背景が単色の場合。
グラデーションや画像などのその他の場合は、
使用decoration
財産。
CSS の例では、マテリアル カラー パレットに相当する 16 進カラーを使用しています。
<div class="grey-box">
Lorem ipsum
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
);
final container = Container(
// grey box
width: 320,
height: 240,
decoration: BoxDecoration(
color: Colors.grey[300],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
);
コンポーネントのセンタリング
あCenter
ウィジェットはその子を水平方向に中央に配置します
そして縦方向に。
CSS で同様の効果を実現するには、親要素でフレックスのいずれかを使用します。 またはテーブルセルの表示動作。このページの例では、フレックスを示しています。 行動。
<div class="grey-box">
Lorem ipsum
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
);
コンテナの幅の設定
幅を指定するにはContainer
ウィジェット、それを使用してくださいwidth
財産。
これは、CSS の max-width プロパティとは異なり、固定幅です。
コンテナの幅を最大値まで調整します。
Flutter でそのエフェクトを模倣するには、
使用constraints
コンテナのプロパティ。
新しいを作成しますBoxConstraints
ウィジェット付きminWidth
またmaxWidth
。
ネストされたコンテナの場合、親の幅が子の幅より小さい場合、 子コンテナは親コンテナに合わせてサイズを調整します。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
width: 100%;
max-width: 240px;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
width: 240,
// max-width is 240
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
);
位置とサイズを操作する
次の例は、より複雑な操作を実行する方法を示しています。 ウィジェットの位置、サイズ、背景。
絶対位置の設定
デフォルトでは、ウィジェットは親に対して相対的に配置されます。
ウィジェットの絶対位置を X-Y 座標として指定するには、
にネストしますPositioned
ウィジェット、つまり、
順番に、Stack
ウィジェット。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
position: relative;
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
position: absolute;
top: 24px;
left: 24px;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Stack(
children: [
Positioned(
// red box
left: 24,
top: 24,
child: Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
],
),
);
回転部品
ウィジェットを回転するには、ウィジェットをネストします。Transform
ウィジェット。
使用Transform
ウィジェットのalignment
とorigin
プロパティ
変換の原点 (支点) を相対的および絶対的に指定するには、
それぞれ。
ウィジェットが Z 軸上で回転する単純な 2D 回転の場合、
新しいを作成しますMatrix4
アイデンティティオブジェクト
そしてそれを使用してくださいrotateZ()
回転係数を指定する方法
ラジアン (度 × π / 180) を使用します。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
transform: rotate(15deg);
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Transform(
alignment: Alignment.center,
transform: Matrix4.identity()..rotateZ(15 * 3.1415927 / 180),
child: Container(
// red box
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
textAlign: TextAlign.center,
),
),
),
),
);
コンポーネントのスケーリング
ウィジェットを拡大または縮小するには、ウィジェットをTransform
ウィジェット。
Transform ウィジェットを使用するalignment
とorigin
プロパティ
変換の原点 (支点) を相対的または絶対的に指定するには、
それぞれ。
X 軸に沿った単純なスケーリング操作の場合、
新しいを作成しますMatrix4
アイデンティティオブジェクト
そしてそれを使用してくださいscale()
倍率を指定するメソッドです。
親ウィジェットを拡大縮小すると、 その子ウィジェットはそれに応じてスケーリングされます。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
transform: scale(1.5);
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Transform(
alignment: Alignment.center,
transform: Matrix4.identity()..scale(1.5),
child: Container(
// red box
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
textAlign: TextAlign.center,
),
),
),
),
);
線形グラデーションの適用
ウィジェットの背景に線形グラデーションを適用するには、
にネストしますContainer
ウィジェット。
次に、Container
ウィジェットのdecoration
を作成するプロパティBoxDecoration
対象にして使用するBoxDecoration
のgradient
背景の塗りつぶしを変換するプロパティ。
グラデーションの「角度」は、Alignment (x, y) の値に基づいています。
- 開始と終了の x 値が等しい場合、 勾配は垂直 (0° | 180°) です。
- 開始と終了の y 値が等しい場合、 勾配は水平 (90° | 270°) です。
縦方向のグラデーション
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
padding: 16px;
color: #ffffff;
background: linear-gradient(180deg, #ef5350, rgba(0, 0, 0, 0) 80%);
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment(0.0, 0.6),
colors: <Color>[
Color(0xffef5350),
Color(0x00ef5350),
],
),
),
padding: const EdgeInsets.all(16),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
);
水平方向のグラデーション
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
padding: 16px;
color: #ffffff;
background: linear-gradient(90deg, #ef5350, rgba(0, 0, 0, 0) 80%);
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
padding: const EdgeInsets.all(16),
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment(-1.0, 0.0),
end: Alignment(0.6, 0.0),
colors: <Color>[
Color(0xffef5350),
Color(0x00ef5350),
],
),
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
);
形状の操作
次の例は、形状を作成およびカスタマイズする方法を示しています。
角を丸くする
長方形の角を丸くするには、
使用borderRadius
の財産BoxDecoration
物体。
新しいを作成しますBorderRadius
各角を丸める半径を指定するオブジェクト。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
border-radius: 8px;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red circle
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
borderRadius: const BorderRadius.all(
Radius.circular(8),
),
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
);
ボックスの影を追加する
CSS では影のオフセットとぼかしを省略形で指定できます。 box-shadow プロパティを使用します。この例では 2 つのボックス シャドウを示しています。 プロパティ付き:
xOffset: 0px, yOffset: 2px, blur: 4px, color: black @80% alpha
xOffset: 0px, yOffset: 06x, blur: 20px, color: black @50% alpha
Flutter では、各プロパティと値は個別に指定されます。
使用boxShadow
の財産BoxDecoration
のリストを作成するにはBoxShadow
ウィジェット。 1 つまたは複数を定義できますBoxShadow
積み重ねることができるウィジェット
影の深さ、色などをカスタマイズします。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.8),
0 6px 20px rgba(0, 0, 0, 0.5);
}
final container = Container(
// grey box
width: 320,
height: 240,
margin: const EdgeInsets.only(bottom: 16),
decoration: BoxDecoration(
color: Colors.grey[300],
),
child: Center(
child: Container(
// red box
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
boxShadow: const <BoxShadow>[
BoxShadow(
color: Color(0xcc000000),
offset: Offset(0, 2),
blurRadius: 4,
),
BoxShadow(
color: Color(0x80000000),
offset: Offset(0, 6),
blurRadius: 20,
),
],
),
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
),
);
円と楕円を作る
CSS で円を作成するには、 長方形の 4 つの辺すべてに対して 50% の境界半径、 あるのに基本的な形。
このアプローチはサポートされていますが、
とともにborderRadius
の財産BoxDecoration
、
Flutter が提供するのは、shape
財産
とBoxShape
列挙型この目的のために。
<div class="grey-box">
<div class="red-circle">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-circle {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
text-align: center;
width: 160px;
height: 160px;
border-radius: 50%;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red circle
decoration: BoxDecoration(
color: Colors.red[400],
shape: BoxShape.circle,
),
padding: const EdgeInsets.all(16),
width: 160,
height: 160,
child: Text(
'Lorem ipsum',
style: bold24Roboto,
textAlign: TextAlign.center,
),
),
),
);
テキストの操作
次の例は、フォントなどを指定する方法を示しています。 テキスト属性。テキスト文字列を変換する方法も示します。 間隔をカスタマイズし、抜粋を作成します。
テキストの間隔を調整する
CSSでは空白の量を指定します。 長さの値を指定して各文字または単語の間を区切る それぞれ、letter-spacing プロパティと word-spacing プロパティです。 スペースの量は、px、pt、cm、em などで指定できます。
Flutter では、空白を論理ピクセルとして指定します。
(負の値も許可されます)
のためにletterSpacing
とwordSpacing
プロパティ
のTextStyle
の子Text
ウィジェット。
<div class="grey-box">
<div class="red-box">
Lorem ipsum
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
letter-spacing: 4px;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.red[400],
),
child: const Text(
'Lorem ipsum',
style: TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.w900,
letterSpacing: 4,
),
),
),
),
);
インライン書式設定の変更
あText
ウィジェットでテキストを表示できます
いくつかの書式特性を備えています。
複数のスタイルを使用するテキストを表示するには
(この例では、強調された単一の単語)、
使うRichText
代わりにウィジェット。
これはtext
プロパティでは 1 つ以上を指定できますTextSpan
個別にスタイル設定できるオブジェクト。
次の例では、「Lorem」はTextSpan
デフォルトの(継承された)テキストスタイルを使用して、
「イプサム」は別冊にありますTextSpan
カスタムスタイルで。
<div class="grey-box">
<div class="red-box">
Lorem <em>ipsum</em>
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
}
.red-box em {
font: 300 48px Roboto;
font-style: italic;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
decoration: BoxDecoration(
color: Colors.red[400],
),
padding: const EdgeInsets.all(16),
child: RichText(
text: TextSpan(
style: bold24Roboto,
children: const <TextSpan>[
TextSpan(text: 'Lorem '),
TextSpan(
text: 'ipsum',
style: TextStyle(
fontWeight: FontWeight.w300,
fontStyle: FontStyle.italic,
fontSize: 48,
),
),
],
),
),
),
),
);
テキストの抜粋を作成する
抜粋では、段落内のテキストの最初の行が表示されます。 多くの場合省略記号を使用して、オーバーフロー テキストを処理します。
Flutter では、maxLines
の財産Text
ウィジェット
抜粋に含める行数を指定するには、
そしてそのoverflow
オーバーフローテキストを処理するためのプロパティ。
<div class="grey-box">
<div class="red-box">
Lorem ipsum dolor sit amet, consec etur
</div>
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
.red-box {
background-color: #ef5350; /* red 400 */
padding: 16px;
color: #ffffff;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300],
child: Center(
child: Container(
// red box
decoration: BoxDecoration(
color: Colors.red[400],
),
padding: const EdgeInsets.all(16),
child: Text(
'Lorem ipsum dolor sit amet, consec etur',
style: bold24Roboto,
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
),
),
);