アフィリエイト広告を利用しています

広告

posted by fanblog

2021年05月19日

計算フォームの見た目を整える/ブログでJavaScriptで計算

前回記事までで、思いつく機能はすべて盛り込めました。
  ↓
 数値入力ボックスでIMEを半角入力モードにする/ブログでJavaScriptで計算
SC20210521101748.png


今回は、計算フォームの見た目を整えます。
具体的には、ボタンや計算結果の表示スペースのデザインを変えて、ボタンを横に並べたりといった感じです。
ただし、スマホで見ると画面からはみ出したりして酷い状態です。
このブログでは、スマホ版ではCSSが使えないためです。

このブログ(ファンブログ)でスマホ版のCSSが使えることが分かったので、パソコン版と同じCSSを設定しました。



見た目を整えた計算フォーム


A:
B:

A+B=
A×B=

↑ ここに計算のためのフォームのコードと、JavaScript のコードを入れています。
JavaScript は表示されず、計算のためのフォームだけが表示されています。


前回の計算フォームと比べていただけると、違いが分かると思いますが、以下の点を変えています。
・入力ボックスの幅
・計算結果表示ボックスの幅と色
・各ボタンのデザイン
・計算ボタンとクリアボタンの配置
・計算結果のラベル・数値・コピーボタンの配置
・3桁区切りのない計算結果を非表示に



変更したコードの解説(フォーム)


今回の計算フォームのコードは、↓ このようになっています。

<form action="#" name="calformTasuKakeruV6">
A:<input class="inputbox1" type="tel" name="a" value="">
B:<input class="inputbox1" type="tel" name="b" value="">

<table>
<tr>
<td><input class="keisanbutton" type="button" name="keisan" value="計算" onClick="calTasuKakeruV6();"></td>
<td><input class="keisanbutton" type="reset" name="reset" value="クリア"></td>
</tr>
</table>

<table>
<tr>
<td align="right">A+B=</td>
<td><input class="inputbox2" type="text" id="ans1" value=""></td>
<td><input class="keisanbutton" type="button" value="答えをコピー" onClick="AnsCopy1V6();"></td>
<td><input class="inputbox3" type="text" id="ans1a" value=""></td>
</tr>
<tr>
<td align="right">A×B=</td>
<td><input class="inputbox2" type="text" id="ans2" value=""></td>
<td><input class="keisanbutton" type="button" value="答えをコピー" onClick="AnsCopy2V6();"></td>
<td><input class="inputbox3" type="text" id="ans2a" value=""></td>
</tr>
</table>

</form>

赤色・青色・緑色部分が、今回主に変わった部分です。
「V6」部分は、前回までと同様にブログ内でのコードの重複をさけるための変更なので、色は付けていません。


1)[計算]ボタンと[クリア]ボタンを横に並べる
ラベル・入力ボックス・ボタンといった各要素を横に整った状態で並べたいときは、<table> タグを使います。
上の例では青色にした部分が <table> タグで、2つの <table> を使っています。
1つ目の <table> で、[計算]ボタンと[クリア]ボタンを横に並べています。
分かりやすくするため、この <table> をシンプルに表すと下のような構造になり、実際のコードでは、@部分に[計算]ボタンのコード、A部分に[クリア]ボタンのコードが入っています。

<table>
<tr>
<td> @ </td>
<td> A </td>
</tr>
</table>

2)計算結果部分を横に並べる
2つ目の <table> で、計算結果部分(ラベル・計算結果・コピーボタン・コピー用計算結果)を、2行に分けて横に並べています。
この <table> を簡単に表すと下のようになります。

<table>
<tr>
<td> @ </td><td> A </td><td> B </td><td> C </td>
</tr>
<tr>
<td> D </td><td> E </td><td> F </td><td> G </td>
</tr>
</table>

@〜CはA+Bの計算結果部分が、それぞれ次のように入っています。
 @:ラベル(A+B)
 A:計算結果(3桁区切りあり)
 B:計算結果コピーボタン
 C:計算結果(3桁区切りなし)※ただし非表示
A×Bの計算結果も同じように、D〜Gに入っています。
@とDのラベルは、右寄せにした方が上下で揃って見えるので、align="right" を入れて右寄せにしています。


3)ボタンのデザイン
ボタンのデザインは、CSSで下のように書いて、計算フォームの中の各ボタンのコードで
class="keisanbutton" で呼び出しています。

/* ▼ 計算ボタン ▼ */
.keisanbutton {
width: auto;
text-align: center;
display: block;
padding: 2px 5px 2px 5px;
background: #F3F2F2;
border: 1px solid;
border-radius: 5px
}
/* ▲ 計算ボタン ▲ */

ボタンのデザインを設定するCSSは、「ボタン CSS」みたいな言葉でネット検索すると、いろいろなデザインのボタンのCSSが見つかるので、この中から気に入ったものをコピーして使うのがいいと思います。
私もどこかで見つけて、色を変えるなど少し編集して使っています。
ちゃんと理解しきれていない部分もありますが、簡単に説明しておきます。


a) 最初と最後の /* と */ で挟んだ部分はコメントで、CSSとして機能しないメモとして使います。
/* と */ が逆になっているのを間違えないように。


b) .keisanbutton { と } の間にデザインの設定を書きます。
計算フォーム側でそのデザインを呼び出す class="keisanbutton" と同じ名前にします。


c) width: auto; は、ボタンの幅を、ボタンに表示する名称に合わせて自動で設定するものです。


d) text-align: center; は、ボタンに表示する名称をボタンの中心に配置します。


e) display: block; は、ブロックレベル要素にするというもので、意味が分かりづらいですが、ブロックレベル要素にすることで、要素同士が改行されて縦に配置され、余白などを設定できるようになります。


f) padding: 2px 5px 2px 5px; でボタンの文字の周囲の余白を設定しています。
左から順に、上・右・下・左の余白です。


g) background: #F3F2F2; でボタンの色を設定しています。


h) border: 1px solid; でボタンの枠線の太さと種類を設定しています。


i) border-radius: 5px は、ボタンの4隅の面取りです。
5pxを大きくすると面取りが大きくなり、小さくすると面取りが小さくなります。
ちなみに、各行の最後のセミコロン( ; )は、複数の設定をするときの区切りなので、最後の行には不要です。
(付いていても、機能しますが)


それぞれの設定値を調べたいときは、「CSS padding」みたいにネット検索すると、情報が見つかると思います。


4)入力ボックスのデザイン
入力ボックスのデザインは、CSSで下のように書いて、計算フォームの中の各入力ボックスのコードで
class="inputbox1" で呼び出しています。

/* ▼ inputbox(数値入力) ▼ */
.inputbox1 {
width: 100px;
padding: 0 5px 0 0;
font-size:16px;
color:#000000;
text-align:right;
background:#FFFFFF;
border: 1px solid
}
/* ▲ inputbox(数値入力) ▲ */

デザインとして設定している内容は、ボタンと大して変わらないので説明を省きますが、text-align: で数字を右寄せで表示して、padding: で右の余白を 5px にして、数字が右の枠から少し離れるようにしています。
また、標準のままだと文字が少し小さいので、font-size:16px; で少し大きくしています。


5)計算結果ボックス(3桁区切りカンマあり)のデザイン
計算結果ボックス(3桁区切りカンマあり)のデザインは、CSSで下のように書いて、計算フォームの中の各計算結果ボックスのコードで class="inputbox2" で呼び出しています。

/* ▼ inputbox(計算結果) ▼ */
.inputbox2 {
width: 100px;
padding: 0 5px 0 0;
font-size:16px;
color:#000000;
text-align:right;
background:#F0F0F0;
border: 1px solid
}
/* ▲ inputbox(計算結果) ▲ */

こちらも、設定している内容は入力ボックスとあまり違わないので、説明を省略しますが、ボックス内の色を background:#F0F0F0; にして、入力する部分と違う色にしています。


6)計算結果ボックス(3桁区切りカンマなし)のデザイン
計算結果ボックス(3桁区切りカンマなし)のデザインは、CSSで下のように書いて、計算フォームの中の各計算結果ボックス(3桁区切りカンマなし)のコードで class="inputbox3" で呼び出しています。

/* ▼ inputbox(計算結果非表示) ▼ */
.inputbox3 {
width: 100px;
color: #FFFFFF;
background: #FFFFFF;
border: 0px none
}
/* ▲ inputbox(計算結果非表示) ▲ */

こちらは、画面上に表示されないようにするため、文字とボックス内の色を、ブログの背景色と同じ白(#FFFFFF)で表示するようにしています。
背景色と同じ色にして何もないように見せているわけで、その部分をマウスでドラッグして範囲選択すると、色が反転するので、計算結果が見えます。
なお、スマホ版では表示幅が足りなくなるため、ここの width: 100px; を width: 10px;にして幅が収まるようにしています。
それ以外は、スマホ版のCSSもパソコン版と同じにしています。



変更したコードの解説(JavaScript)


今回の JavaScript のコードは、↓ このようになっています。


<script language="javascript">
function calTasuKakeruV6()
{
// フォームで入力したデータABを変数に代入
inputValueA = document.calformTasuKakeruV6.a.value - 0;
inputValueB = document.calformTasuKakeruV6.b.value - 0;
// 変数を使って計算
ans1 = inputValueA + inputValueB;
ans2 = inputValueA * inputValueB;
// 計算結果をフォームに出力
document.calformTasuKakeruV6.ans1.value = ans1.toLocaleString();
document.calformTasuKakeruV6.ans2.value = ans2.toLocaleString();
document.calformTasuKakeruV6.ans1a.value = ans1;
document.calformTasuKakeruV6.ans2a.value = ans2;
}
// 計算結果をコピー
function AnsCopy1V6() {
var copyTarget = document.getElementById("ans1a");
copyTarget.select();
document.execCommand("Copy");
copyTarget.blur();
}
function AnsCopy2V6() {
var copyTarget = document.getElementById("ans2a");
copyTarget.select();
document.execCommand("Copy");
copyTarget.blur();
}
</script>

赤色部分が、今回変わった部分です。
「V6」部分は、前回までと同様にブログ内でのコードの重複をさけるための変更なので、色は付けていません。


また、計算結果コピー用の3桁区切りカンマなしの数値は見えないようにしたため、最後の行の copyTarget.remove(); でその数値を削除するのをやめて、代わりに copyTarget.blur(); として、コピーのためにその数値を選択した状態を解除しています。
remove(); で数値を削除すると、コピー対象がなくなるので、選択した状態も解除できて、画面上ではその部分に何も表示されないのでいいのですが、コピーしたあとで、もう一度その数値をコピーしたい場合もあるので、できれば数値は削除しない方がいいです。
そこで、コピー対象を削除しないで、単にフォーカスを外す blur(); に変更したというわけです。



その他


今回 CSS を使ってデザインを変えた部分は、計算フォームの HTML コードに直接書いて設定することもできますが、CSS を使っておけば、後で少しデザインを変えたいといったときに、同じデザインを使った部分は CSS の変更だけで済みます。
できるだけ CSSで設定しておいた方がいいです。


JavaScript で計算ページ関連記事の一覧

にほんブログ村 IT技術ブログ フリーソフトへ
この記事へのコメント
コメントを書く

お名前: 必須項目

メールアドレス:


ホームページアドレス:

コメント: 必須項目

この記事へのトラックバックURL
https://fanblogs.jp/tb/10726448

※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
ブログ内を検索
ファン

最新記事
カテゴリー
最新コメント
ツイッター
広告設置のお知らせ

当ブログは、Amazonアソシエイト・プログラムの参加者です。
(Amazonアソシエイト・プログラムは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムです)
記事内で使用している画像の一部は、Amazonの商品画像を使用しており、その商品へのリンクになっています。

また、その他のアフィリエイト・サービス・プロバイダなどの広告も表示しています。
当ブログをご覧の際は、cookie を有効にし、Webブラウザの広告ブロック機能を使用しないで、ご覧いただきますようにお願いいたします。

プロフィール
ぽん太親父さんの画像
ぽん太親父
建築関係の小さな事務所で、他に適当な人間がいないことから、コンピューター関連の担当をさせられています。 趣味でけっこう長い間パソコンを使っていますが、ちゃんと勉強していないので、うまくいかなくて冷や汗をかくこともしばしば。
プロフィール
×

この広告は30日以上新しい記事の更新がないブログに表示されております。