WEBデザインの学習 | ナイアルラトホテップ

このブログは池袋にあるフェリカテクニカルアカデミーで学んだ学習過程を記録するためのものです。HTML+CSS及びJavaScript、jQueryなど。

CSS3によるanimation

bg-color部分はIDなので自由な文字を設定できる。
0%と50%を同じ色にしないと急に色が変わったようになってしまうので、注意すること!
rgbaによる透過指定もできる。

body{
  background: #C6F;
  -webkit-animation: bg-color 10s infinite;
/*  --moz-animation: bg-color 10s infinite;*/
  animation: bg-color 10s infinite;
/*bg^colorはIDなので自由に設定できる*/
}
@-webkit-keyframes bg-color{
  0%  {background-color: #C6F;}
  50%  {background-color: #FC3;}
  100%  {background-color: #C6F;}

@keyframes bg-color{
  0%  {background-color: #C6F;}
  50%  {background-color: #FC3;}
  100%  {background-color: #C6F;}
/*0%と100%は同じ色にする。そうしないと
急に色が切り替わる*/
}

午前中は昨日の.htaccsessを使用したスマホ対応の続きを作成した。
f:id:whitexblack:20150622133709p:plain

newsfeed作成

昨日より始まったSQL文とPHPにてnewsfeed作成が始まった。

<?php
//new PDO(PHP Data Object)オブジェクトを作っている
//これでデータベースに接続しに行っている
//new演算子 オブジェクトを作る演算子
$dbh = new PDO('mysql:host=localhost;dbname=newsfeed0220;charset=utf8;','root','root');
//var_dump($dbh);

$stmt=$dbh->query('SELECT * FROM news');
//var_dump($row)
//->アロー演算子
//queryという機能(メソッド)

//foreach($stmt as $row){
//echo $row['news_id'].'<br>';
//}

?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>NEWSFEED</title>
</head>

<body>
<table border=1>
<tr><th>見出し</th><th>日付</th></tr>
<?php foreach($stmt as $row){ ?>
<tr><td><a href="#"><?php echo $row['news_headline'] ?></a></td>
<td><?php echo $row['news_date'] ?></td></tr>
<?php } ?>
</table>
</body>
</html>

レスポンシブサイトの練習(全て固定値で列ごとにカラム落ち)

ポイントは2段表示になったとき3段目を横並びにする。
f:id:whitexblack:20150612135658j:plainf:id:whitexblack:20150612135705j:plainf:id:whitexblack:20150612135709j:plain

HTML

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>楽しいおかず</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="container">
<div class="content">
<header>
<h1><img src="img/logo01.png" alt="美味しいおかず"></h1>
<ul>
<li><img src="img/nav01_01.png" alt=""></li>
<li><img src="img/nav02_01.png" alt=""></li>
<li><img src="img/nav03_01.png" alt=""></li>
<li><img src="img/nav04_01.png" alt=""></li>
</ul>
</header>
<nav>
<ul>
<li><img src="img/ph01_l.jpg" alt=""></li>
<li><img src="img/ph02_mt.jpg" alt=""></li>
<li><img src="img/ph03_s.jpg" alt=""></li>
<li><img src="img/ph04_s.jpg" alt=""></li>
<li><img src="img/ph05_my.jpg" alt=""></li>
<li><img src="img/ph06_s.jpg" alt=""></li>
<li><img src="img/ph07_s.jpg" alt=""></li>
</ul>
</nav>
</div><!--/.content-->

<div class="content">
<ul>
<li><img src="img/ph08_my.jpg" alt=""></li>
<li><img src="img/ph09_s.jpg" alt=""></li>
<li><img src="img/ph10_s.jpg" alt=""></li>
<li><img src="img/ph11_l.jpg" alt=""></li>
<li><img src="img/ph12_s.jpg" alt=""></li>
<li class="right"><img src="img/ph13_mt.jpg" alt=""></li>
<li><img src="img/ph14_s.jpg" alt=""></li>
<li><img src="img/ph15_l.jpg" alt=""></li>
<li><img src="img/ph16_s.jpg" alt=""></li>
<li><img src="img/ph17_s.jpg" alt=""></li>
<li><img src="img/ph18_my.jpg" alt=""></li>
</ul>
</div><!--/.content-->

<div class="content3">
<ul>
<li><img src="img/ph19_l.jpg" alt=""></li>
<li><img src="img/ph20_s.jpg" alt=""></li>
<li class="right"><img src="img/ph21_mt.jpg" alt=""></li>
<li><img src="img/ph22_s.jpg" alt=""></li>
<li><img src="img/ph23_s.jpg" alt=""></li>
<li><img src="img/ph24_s.jpg" alt=""></li>
<li><img src="img/ph25_my.jpg" alt=""></li>
<li><img src="img/ph26_s.jpg" alt=""></li>
<li><img src="img/ph27_s.jpg" alt=""></li>
<li><img src="img/ph28_s.jpg" alt=""></li>
<li><img src="img/ph29_s.jpg" alt=""></li>
<li><img src="img/ph30_l.jpg" alt=""></li>
</ul>
</div><!--/.content3-->

</div><!--/#container-->
</body>
</html>

CSS

@charset "utf-8";
/* reset */
html, body, div, h1, h2, h3, h4, h5, h6,p, blockquote, pre, 
address,ul, ol, li, dl, dt, dd,table, th, td, form, fieldset {
margin: 0;
padding: 0;
line-height: 1.0;
font-family:
"Hiragino Kaku Gothic ProN",
Meiryo, 
sans-serif;
}
ul, ol {
list-style: none; }
a {
text-decoration: none; }
img {
border: 0;
vertical-align: bottom;
}
footer,header,nav{
  display: block;}

/*layout*/
body{
background: #fff;}
#container{
width:320px;
margin: 0 auto;
overflow: hidden;}
.content,.content3{
float: left;
width: 320px;}
.content h1{
padding: 10px;}
.content li,.content3 li{
float:left;
padding: 10px;}
.content li.right,.content3 li.right{
float: right;}
@media screen and (min-width:640px){ 
#container{width:640px;} 
.content3{
width: 640px;}
}
@media screen and (min-width:960px){ 
#container{width:960px;} 
.content3{
width: 320px;}}

メールフォーム完成

本日でメールフォーム制作が終了した。
午後は少しだけDBに入った。百人一首のデータをさわった。

index.php

<?php
//func.phpを呼び出し
//ファイルを読み込む命令 ↓パスを読む書き方
require_once dirname(__FILE__) . '/func.php';

//初期化:ここの部分で空文字を設定してあげている
$name='';
$email='';
$message='';
$error_name='';
$error_email='';
$error_message='';

//session_start(); この部分はfunc.phpにまとめた
if(isset($_SESSION['mail']['name'])){
$name=$_SESSION['mail']['name'];
}//sessionの値がセットされていたら$nemeに値を代入する
if(isset($_SESSION['mail']['email'])){
$email=$_SESSION['mail']['email'];
}
if(isset($_SESSION['mail']['message'])){
$message=$_SESSION['mail']['message'];
}

//エラー情報をセッションから取得
if(isset($_SESSION['mail']['error_name'])){
$error_name=$_SESSION['mail']['error_name'];
}
if(isset($_SESSION['mail']['error_email'])){
$error_email=$_SESSION['mail']['error_email'];
}
if(isset($_SESSION['mail']['error_message'])){
$error_message=$_SESSION['mail']['error_message'];
}
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>入力画面</title>
<style>
#container{
width: 800px;
margin: 0 auto;}
table{
border-collapse:collapse;
margin-bottom:10px;}
th{
background: pink;
white-space: nowrap;}
span{
font-size:12px;}
span.red{
color: red;
margin: 0 1em;}
</style>
</head>
<body>
<div id="container">

<form action="check.php" method="post">

<h1>入力画面</h1>
<p>必要項目を入力して「確認する」ボタンをクリックしてください。</p>
<table border="1">
<tr><th><label for="name">お名前<span>(30文字以内&nbsp;:必須)</span></label></th><td><input style="text" name="name" id="name" value="<?php echo h($name); ?>" maxlength="30" placeholder="例:猫山猫尾" required autofocus><?php if(!empty($error_name)){echo '<span class="red">'.h($error_name).'</span>';} ?></td></tr>

<tr><th><label for="email">Eメール<span>(50文字以内&nbsp;:必須)</span></label></th><td><input type="email" name="email" id="email" value="<?php echo h($email); ?>" maxlength="50"  placeholder="aaaa@aaaa.com" required><?php echo h($error_email); ?></td></tr>

<tr><th><label for="message" >お問い合わせ<span>(150文字以内&nbsp;:必須)</span></label></th><td><textarea name="message" id="message" maxlength="150" placeholder="お問い合わせ内容" required><?php echo h($message); ?></textarea><?php echo h($error_message); ?></td></tr>
</table>
<input type="submit" value="確認する">
</form>

</div><!--/#container-->
</body>
</html>

check.php

<?php
//func.phpを呼び出し
require_once dirname(__FILE__) . '/func.php';

if(!isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['message'])){
header('Location:index.php');//本来はここに相対パスではなくフルパスを入れる
exit;
}

$name=$_POST['name'];
$email=$_POST['email'];
$message=$_POST['message'];

//初期化
$error_name='';
$error_email='';
$error_message='';
$success_flg = true;

//空白を判定
//トリムで削除すると文字数が変わる              文字数をカウント
if(mb_strlen(trim(mb_convert_kana($name,"s",'utf-8')))!=mb_strlen($name,'utf-8')){
$error_name ='名前の前後、あるいは全てに空白が使われています';
$success_flg = false;
}

//@マークが入っているかチェック
if(strpos($email,'@')===false){
  $error_email = '@がありません';
  $success_flg = false;
}
//メールアドレスの半角全角チェック
if(mb_strlen($email,'utf-8')!=strlen($email)){//文字のバイト数をチェック
  $error_email = '全角文字が入っています';
  $success_flg = false;
}
//長さチェック
if(mb_strlen($name,'utf-8')>30){
  $error_name = 'お名前が長すぎます';
  $success_flg = false;
}
if(mb_strlen($email,'utf-8')>50){
  $error_email = 'アドレスが長すぎます';
  $success_flg = false;
}
if(mb_strlen($message,'utf-8')>150){
  $error_message = 'お問い合わせ内容が長すぎます';
  $success_flg = false;
}
//空のチェック
if(empty($name)){
  $error_name='お名前を入力してください'; 
  $success_flg = false;
}
if(empty($email)){
  $error_email='Eメールを入力してください'; 
  $success_flg = false;
}
if(empty($message)){
  $error_message='お問い合わせ内容を入力してください'; 
  $success_flg = false;
}

//session_start(); この部分はfunc.phpにまとめた
$_SESSION['mail']['name']=$_POST['name'];
$_SESSION['mail']['email']=$_POST['email'];
$_SESSION['mail']['message']=$_POST['message'];
$_SESSION['mail']['success_flg'] = $success_flg;
//エラー情報をindexに渡すためにセッション利用
$_SESSION['mail']['error_name'] = $error_name;
$_SESSION['mail']['error_email'] = $error_email;
$_SESSION['mail']['error_message'] = $error_message;
if(!$success_flg){
  header('Location:index.php');
  exit;
}

//メールの改ざんを防ぐため、セッションにもサクセスフラグ情報を埋め込む。
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>入力確認画面</title>

<style>
#container{
width: 800px;
margin: 0 auto;}
table{
border-collapse:collapse;
margin-bottom:10px;}
th{
background: pink;
white-space: nowrap;}
</style>

</head>

<body>
<div id="container">
<h1>入力確認画面</h1>
<table border="1">
<tr><th>お名前:</th><td><?php echo h($name); ?></td></tr>
<tr><th>Eメール:</th><td><?php echo h($email); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr>
</table>

<p><a href="index.php">フォームに戻る</a></p>
<p><a href="send.php">メールを送信する</a></p>

</div><!--/#container-->
</body>
</html>

send.php

<?php
//func.phpを呼び出し
require_once dirname(__FILE__) . '/func.php';

//session_start(); この部分はfunc.phpにまとめた
//   ↓直接打ち込んでセッションデータがないとき    ↓値がfalseの時
if(!isset($_SESSION['mail']['success_flg']) || !$_SESSION['mail']['success_flg']){
  header('Location:index.php');
  exit;
}
$name=$_SESSION['mail']['name'];
$email=$_SESSION['mail']['email'];
$message=$_SESSION['mail']['message'];
//var_dump($_SESSION);

$_SESSION=array();//sessionファイルの中身を空にする
unset($_SESSION['mail']);//sessionの小部屋を破棄するイメージ
//cookieの削除 session_destoroyの前に書くにはそうしないとセッションネームが削除されているから。
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-200000,'/');
}
session_destroy();//接続する設定を破壊しているイメージ

//ヒアドキュメント
$body=<<<EOF
{$name}さんからメールが送信されました。
メールアドレスは{$email}です。
内容は、以下の通りです。
{$message}
EOF;
//var_dump($body);

mb_send_mail('thouarttheman5@gmail.com','お問い合わせがありました',$body);

?>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>メール送信画面</title>
</head>
<body>

<h1>メール送信画面</h1>
<p>以下内容でメールが送信されました</p>
<table>
<tr><th>お名前:</th><td><?php echo h($name); ?></td></tr>
<tr><th>Eメール:</th><td><?php echo h($email); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr>
</table>
<p><a href="index.php">入力画面に戻る</a></p>
</body>
</html>

fanc.php

<?php
//htmlspecialcharsが長いので関数化
function h($str){
return htmlspecialchars($str,ENT_QUOTES,'utf-8');
}

session_start();

sessionとヒアドキュメントについて

先週までの続きでメールフォームを作成した。

session

check.php

<?php
session_start();
$_SESSION['name']=$_POST['name'];
$_SESSION['email']=$_POST['email'];
$_SESSION['message']=$_POST['message'];
?>

ヒアドキュメント

send.php

<?php
session_start();
$name=$_SESSION['name'];
$email=$_SESSION['email'];
$message=$_SESSION['message'];
?>

send.php

<?php
$body=<<<EOF
{$name}さんからメールが送信されました。
メールアドレスは{$email}です。
内容は、以下の通りです。
{$message}
EOF;
?>

これで概ね基本的な設定は出来たが、このままでは細かいところがいろいろいけない。
check.phpでチェックしたとき修正したい場合はどうするか?ボタンを書き足す

<p><a href="index.php">フォームに戻る</a></p>
<p><a href="send.php">メールを送信する</a></p>

index.php内に書き足す

ただ、これでフォームに戻った場合入力内容が消えてしまう。

index.php内上部に書き足し

<?php
session_start();
$name=$_SESSION['name'];
$email=$_SESSION['email'];
$message=$_SESSION['message'];
?>
<table border="1">
<tr><th><label for="name">お名前</label></th>
<td><input style="text" name="name" id="name" value="<?php echo htmlspecialchars($name,ENT_QUOTES,'utf-8'); ?>"></td></tr>
<tr><th><label for="email">メールアドレス</label></th>
<td><input type="text" name="email" id="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES,'utf-8'); ?>"></td></tr>
<tr><th><label for="message" >メッセージ</label></th>
<td><textarea name="message" id="message"><?php echo htmlspecialchars($message,ENT_QUOTES,'utf-8'); ?></textarea></td></tr>
</table>
<input type="submit" value="確認する">
</form>

※注意
textareaはvalueが使えない!
なので
間にコードを書く。

PHP01

echo,print:ブラウザに表示する

$_POST['name']
$_GET['name']

getは情報をurlに加えて送る。機密性が低い。履歴に残る。
postは不可視で送る。完全に見えないわけではない。

明日までに本日の内容は覚える。

企業サイト制作プレゼンテーション3日目

本日がサイト制作プレゼンテーション最終日となった。

photoshopについて

CS5と6で大分違う。
カンプを作る際は左上を原点0,0で、余白を作らずぴったりで作る。(例:960px)
新規ガイドで数値入力してラインを引いていく。

長方形ツールと矩形ツールの違いは?
使い慣れない場合はシェイプがいいが、SC5はシェイプに難がある。
 →余計なアンチエイリアスがでる。
なので長方形ツールで固定で1px*Xpxで書く。

ラインツールは信用しないこと。斜めは使用してよい。

デザインについて

奥行きと不透明感をどうやって出すか?

フラットデザインは平べったいものを置いてあるのではなく、平べったいけれども奥行きをどうやってみせるのか。



参考サイト:動画マニュアル.com
いろいろな学習動画がある。

タイトルについて

h1はキーワード出現率の1,2,3位を組み合わせる。
h1→p pの内容が大切であり、meta descriptionが拾われずpが拾われることもある。

企業サイト制作【完成】

後から追記予定。

知人のソフビフィギュア会社の一ブランドのサイトを制作した。

仕様:モバイル対応(レスポンシブ) IE9以上より対応

構想:約1週間
画像加工:約1日
コーディング:1週間

wordpressでのテーマ制作は初めてでもろもろの仕様について理解していなかったため、時間がかかった。実際にコードを打った時間よりはほぼ調べていた時間である。
一からwordpressでサイトを作るのは難しかったため、Bonesというカスタマイズ前提のスターターテーマを使用した。


bonesの落とし穴(修正点)
・そのままではアウトラインを見たときにUntitled BODYになるのとsectionの後に見出しが入らないためUntitled SECTIONになってしまう。
・管理ページより入力するサイトのタイトルとキャッチコピーがタイトルの後ろにキャッチコピーがくっついて表示される。タイトルはタイトルのみでmeta descriptionが空なのでキャッチコピーを入れるようにした。
wp-titleがfunction.phpでフックされており、その内容がテーマ固有のbones.php

■苦労した点
index.phpはあくまでブログ画面のインデックスでトップページをサイト風の好きな見た目にするには固定ページのテンプレートを追加して実装する。

テンプレートはデフォルト以外に3つ制作した。

  • トップページ
  • 作品紹介のトップ画面
  • 作品紹介の作品の個別ページ

固定ページのデフォルトは古紙風の背景画像を表示するようにした。
トップページはヘッダー画像とその下に投稿記事とサイドバーを表示した。
作品紹介のトップはモンスターを画面の横幅いっぱいに可変するように表示した。課題としてポジションで上に載せているサイドバー部分の見た目の問題が残る。
作品の個別ページは黒く透過するようにし作品をよりすっきり見せるように心がけた。

カスタマイズ元テーマ:Bones
参考書籍:「基礎からのWordPress 改訂版」高橋のり著
     「WordPressレッスンブック HTML5&CSS準拠」エビスコム著

パンくずリスト作成については基礎からのWordPressを参考にした。

企業サイト制作プレゼンテーション2日目

本日は制作した企業サイトのプレゼンテーションの2日目となった。
私も本日発表した。

先生よりの指摘

記事が増えた時にサイドバーに人気記事などを出したほうが良いとのこと。

プラグインにより実装予定

あとは記事の下部に関連記事を出したり、rssリーダーなどに対応したい。
サイトマップも追加したい。

企業サイト制作プレゼンテーション1日目

いよいよ本日より5月初めより取り掛かっていた企業サイト制作の発表が行われた。

メモ

  • 黒字に赤文字は視認性が悪いのやってはいけない
  • デザインとして行間の空きより外枠の空きが少ないのはダメ
  • フォントについて太いフォントを使うと途端に素人っぽくなる
  • 格好良いのは細い文字。繊細さ。細部に気を使えているか。