回答編集履歴

1

コメント質問への回答を追記:flexにしたp要素のテキスト位置について

2020/09/09 15:48

投稿

arenomarb
arenomarb

スコア53

test CHANGED
@@ -84,6 +84,12 @@
84
84
 
85
85
  flex-grow: 1;
86
86
 
87
+ flex-shrink: 1;
88
+
89
+ min-width: calc(50% + 1px);
90
+
91
+ max-width: calc(50% + 1px);
92
+
87
93
  margin: 0;
88
94
 
89
95
  padding: 0 1px 0 0;
@@ -104,13 +110,15 @@
104
110
 
105
111
  flex-grow: 1;
106
112
 
113
+ flex-shrink: 1;
114
+
107
- }
115
+ }
108
-
116
+
109
- ```
117
+ ```
110
-
111
-
112
-
118
+
119
+
120
+
113
- これですと、仮にユーザーがブラウザのウィンドウサイズを変更し、`info`クラス`div`要素の幅が変わったとしても、区切り線は中央位置のままです。
121
+ これですと、仮にユーザーがブラウザのウィンドウサイズを変更し、`info`クラス`div`要素の幅が変わったとしても、区切り線は(ほぼ)中央位置のままです。
114
122
 
115
123
 
116
124
 
@@ -122,6 +130,10 @@
122
130
 
123
131
 
124
132
 
133
+ とはいえ、今回は`width`関連の値に`%`を用いたため、描画時に値が算出される際に小数点以下がどう処理されるかによって、若干中央からズレる可能性はあります。
134
+
135
+
136
+
125
137
  ---
126
138
 
127
139
 
@@ -157,3 +169,93 @@
157
169
  }
158
170
 
159
171
  ```
172
+
173
+
174
+
175
+ ---
176
+
177
+
178
+
179
+ #####追記:flexにしたp要素のテキスト位置について
180
+
181
+
182
+
183
+ `p`要素の内容物であるテキストは、それ自体は要素ではありませんが、独自の表示範囲を持っています。`p`要素を`flex`にすると、`p`要素のテキストと(存在する場合は)擬似要素の`before`と`after`の内容が、`flex`設定通りに表示されます。
184
+
185
+
186
+
187
+ 上のコードの一部を、以下のように変更して、どう表示されるか試してみてください。
188
+
189
+
190
+
191
+ ```HTML
192
+
193
+ <p class="name">データ<br>デー<br>デ</p>
194
+
195
+ ```
196
+
197
+
198
+
199
+ ```CSS
200
+
201
+ /* 既存の.nameに追加で */
202
+
203
+ .name {
204
+
205
+ text-align: left;
206
+
207
+ }
208
+
209
+
210
+
211
+ .name::before {
212
+
213
+ content: 'before';
214
+
215
+ background-color: gold;
216
+
217
+ }
218
+
219
+
220
+
221
+ .name::after {
222
+
223
+ content: 'after';
224
+
225
+ background-color: lightskyblue;
226
+
227
+ }
228
+
229
+ ```
230
+
231
+
232
+
233
+ `p`要素の`before`、テキスト、`after`が、`flex`設定により`center`に`row`並びで表示され、テキスト自体はテキスト範囲内で左揃えに表示されているのが確認できるかと思います。
234
+
235
+
236
+
237
+ ![display:flexのp要素内にあるbefore、テキスト、afterの例](925e1ed60b143bf033d7a40320f86095.png)
238
+
239
+
240
+
241
+ `.name`の`text-align`を`right`や`center`に変更してみると、テキスト枠内で文字が整列されるのがより明確に分かるでしょう。
242
+
243
+
244
+
245
+ なおテキストは、このように要素の設定で位置を制御することも可能ですが、テキスト自体は要素ではないため直接制御することはできません。
246
+
247
+
248
+
249
+ テキストを個別に装飾したい場合は、`span`タグ等で囲み、要素化する必要があります。
250
+
251
+
252
+
253
+ 一度、以下のようなシンプルなテストコードを使って、デフォルトの`p`要素とテキストの背景に色を付けて`text-align`が`left`、`center`、`right`の時の各位置を見ておくと、flex設定時との違いがよく分かるかもしれません。
254
+
255
+
256
+
257
+ ```HTML
258
+
259
+ <p style="background-color: mistyrose; text-align: center;"><span style="background-color: lightskyblue;">テキスト</span></p>
260
+
261
+ ```