0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【HTML CSS】CSSとたたかう 空文字編

Posted at

帳票系を触っていると、空欄の対応に苦戦することがあるので、メモ。
マスタッシュ構文はPHP想定だが、他の言語も雰囲気は同じ。

デフォルト

{{ $value = "変動する値" }}

<div style="padding: 8px;">
    <div>ヘッダ要素</div>
    <div>{{ $value }}</div>
    <div>フッダ要素</div>
</div>

image.png

このようなレイアウトの場合、変動する値が空欄だと、高さが0になり潰れてしまう。
潰れる=レイアウトが崩れる=:scream:

{{ $value = "" }}

<div style="padding: 8px;">
    <div>ヘッダ要素</div>
    <div>{{ $value }}</div>
    <div>フッダ要素</div>
</div>

image.png

対策(1) CSS の height を使用する

BOXの高さを固定してしまう作戦。
line-height では、文字が無いときに高さが0となってしまうので注意。

{{ $value = "" }}

<div style="padding: 8px;">
    <div>ヘッダ要素</div>
    <div style="height: 1rem;">
        {{ $value }}
    </div>
    <div>フッダ要素</div>
</div>

image.png

rem など相対単位を使用すると、良い感じに一文字分にできる。
複数行の場合は min-height でも良いかもしれない。

対策(2) if で全角スペースを挿入する

HTML 的にはレビュー指摘が来るような内容だが、一番簡単に実現できる。
文字が無くなるから高さが0になるので、見えない文字を追加する。
&emsp; など、エスケープ文字を使うのも良い。

PHP なら mb_strlen()、 JS なら String: length を使うと良い。

{{ $value = ""; }}

<div style="padding: 8px;">
    <div>ヘッダ要素</div>
    <div>{{ mb_str($value) ? $value : " " }}</div>
    <div>フッダ要素</div>
</div>

image.png

文字サイズの変動にも耐えうるので、意外と賢いやり方な気がする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?