【js】【css】資格対策サイトができた!!

肝心な問題部分はかなり少ないですが!
Ruby技術者認定Gold
f:id:waterlow2013:20140612231828p:plain
はじめはRubyの対策サイトということでメタプロごりごり使って問題文から動的に選択肢を作って、「これがRubyだ!」というものを作ろうとしていました。
しかし最終的には「振る舞いや効果が同じであれば、なるべく早く書けるものがいい!」と思うようになりました。結果jsとcssの勉強オンリーになってしまいましたが、とても楽しかったので良かったです。(リファクタリングしっかりしよう)

Rubyの道はまだまだ長いですが頑張ります!
以下ソース

html、js
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "//www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="body.css">

<title>Ruby技術者認定Gold</title>
<script src="questions.json.js" ></script>
</head>
<body>

<!-- コンテンツ開始 -->
<div id="content">
<div class="heading8">Ruby技術者認定Gold練習問題</div>
<br>
<div id="text_q"></div>
<br>
<div id="text_s"></div>
<br>
<div id="button"></div><br>
<hr>
<div id="text_c"></div>

<script>

q_size = Object.keys(qestions).length;
$("text_q").innerHTML = '<a class="button2" onclick="setReady()">START!</a>'
//初期設定
function setReady() {
	count = 0; //問題番号
	choice_size = 0;
	text_c_is_not_null = false;
	//最初の問題
	quiz();
	var prev_btn = '<a class="button" onclick="prevQ()">前の問題</a> '
	var next_btn = '<a class="button" onclick="nextQ()">次の問題</a> '
	var view_ans = '<a class="button" onclick="viewAnswer()">正解</a> '
	$("button").innerHTML = prev_btn + next_btn + view_ans;
}

//問題表示
function quiz() {
	//問題
	$("text_q").innerHTML = (count + 1) + "問目:" + qestions[count].statement;
	//選択肢
	choice_size = qestions[count].choice.sentence.length;
	var s = '<form name="myForm">';
	for (var i = 0; i < choice_size; i++) {
		tmp_sts = qestions[count].choice.sentence[i];
		s += '<input type="checkbox" name=' + tmp_sts
		s += 'id=' + tmp_sts
		s += 'value=' + tmp_sts + '>'
		s += tmp_sts + "<br>"
	}
	s += '</form>';
	$("text_s").innerHTML = s;
}

function viewAnswer(){
	if (text_c_is_not_null) {
		$("text_c").innerHTML = null;
		text_c_is_not_null = false;
		quiz();
		return;
	}
	//問題
	$("text_q").innerHTML = (count + 1) + "問目:" + qestions[count].statement;
	//選択肢
	choice_size = qestions[count].choice.sentence.length;
	var s = '';
	for (var i = 0; i < choice_size; i++) {
		if (qestions[count].choice.answer[i]){
			s += '<font color="#CF355D"> ◯ ' + qestions[count].choice.sentence[i] + "</font>";
		}else{
			s +=  "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + qestions[count].choice.sentence[i];
		}
		s += '<br>'
	}
	$("text_s").innerHTML = s;
	s = qestions[count].comment;
	$("text_c").innerHTML = s;
	text_c_is_not_null = true;
}

function nextQ(){
	$("text_c").innerHTML = "";
	count++;
	if (count < q_size) {
		quiz();
	} else {
		$("text_q").innerHTML = "";
		var s = "【<a href='javascript:setReady()'>同じ問題を最初から</a>】";
		$("text_s").innerHTML = s;
	}
}

function prevQ(){
	$("text_c").innerHTML = "";
	if (count == 0) return;
	count--;
	quiz();
}

function $(id){
	return document.getElementById(id);
}

</script>
<br>
</form>
</div>
<!-- コンテンツ終了 -->

</body>
</html>
css
@charset "utf-8";

/* --- 全体の背景・テキスト --- */
body {
  margin: 0;
  padding: 0;
  background-color: #f9f9f9; /* 全体の背景色 */
  color: #000; /* 全体の文字色 */
  font-size: 100%; /* 全体の文字サイズ */
}

/* --- 全体のリンクテキスト --- */
a:visited { color: #800080; }
a:active { color: #f00; }

/* --- コンテンツ --- */
#content {
  padding: 20px 50px 20px 30px;
  background-color: #ffd; /* コンテンツの背景色 */
}

p.sample { color: #CF355D; }

hr {
  border-top: 1px dotted #bbb;
  border-bottom: 1px dotted #fff;
  width: 700px;
  text-align: left;
  margin-left: 0px;
}

.heading8 {
  position:relative;
  width:300px;
  padding:9px;
  padding-left:15px;
  font-weight: bold;
  font-size: 18px;
  background-color: #fc6;
  color: #fff;
  border-radius:3px;
  -webkit-border-radius:3px;
  -moz-border-radius:3px;
}

.button {
  display: inline-block;
  width: 100px;
  height: 30px;
  text-align: center;
  text-decoration: none;
  line-height: 27px;
  outline: none;
}
.button::before,
.button::after {
  position: absolute;
  z-index: -1;
  display: block;
  content: '';
}
.button,
.button::before,
.button::after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  -webkit-transition: all .3s;
  transition: all .3s;
}
.button {
  background-color: #fc6;
  color: #fff;
}
.button:hover {
  background-color: #FF1A6F;
}


.button2 {
  display: inline-block;
  width: 100px;
  height: 30px;
  text-align: center;
  text-decoration: none;
  line-height: 27px;
  outline: none;
}
.button2::before,
.button2::after {
  position: absolute;
  z-index: -1;
  display: block;
  content: '';
}
.button2,
.button2::before,
.button2::after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  -webkit-transition: all .3s;
  transition: all .3s;
}
.button2 {
  background-color: #FF1A6F;
  color: #fff;
}
.button2:hover {
  background-color: #fc6;
}