くろひょうのwebデザインのお勉強帳

フェリカテクニカルアカデミー web制作科の受講生です。授業の要点、復習でつまづいた点などを記録し、レベルアップに励みます。

クリエイターになるための、お勉強の記録帳

[スマートフォンサイト]スマートフォンサイト制作の前提の知識

スマートフォン用サイトのサイズについて

2つのサイズがある

  • CSSピクセル(csspx)  :ディスプレイのサイズ 
  • デバイスピクセル(dpx):解像度のサイズ

Retinaディスプレイ登場以前はこの2つは同じだった。

<iPhone3と、Retinaディスプレイ搭載iPhone4の比較>

      
iPhone3  ディスプレイサイズ:3.5インチ 解像度:320×480
iPhone4 ディスプレイサイズ:3.5インチ 解像度:640×960

⇒ ディスプレイサイズは同じだが、画像解像度が2倍になった ⇒ 2倍の大きさが必要


Retinaディスプレイ対応のためには、デバイスピクセル基準で画像を用意すること

ベンダープレフィクス

「プレフィクス」とは?  ⇒ 接頭辞

CSS3をブラウザで動作させる為に属性につける接頭辞のこと。
ブラウザごとに異なる。

-webkit- Google Chrome、Safari
-moz-     Firefox
-o-       Opera
-ms-      IE 

スマートフォンのシェアで言えばiPhoneSafari)とAndroidChrome)で90%以上を占めるため、-webkit-でほぼカバーできる。
ベンダープレフィクスあり・なしの両方の表記をする。

www.htmq.com

CSS3のプロパティのブラウザ対応状況を調べるには、以下のサイトが便利
Can I use... Support tables for HTML5, CSS3, etc

background-sizeについて

スマートフォン用サイトで特に重要。背景画像のサイズを指定する場合に使うCSSのプロパティ
background-imageまたはbackgroundプロパティと一緒に指定する必要がある

主に使われる値

background-size: contain;
縦横比を保持しつつ領域内に収まる最大サイズになる


background-size: cover;
縦横比を保持しつつ、背景を全て覆う大きさになる(拡大する)画像が切れる場合がある


background-size: auto;
初期値

その他、パーセント指定・ピクセル指定も可能

スマートフォンサイトに必須・viewportの設定

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  • width=device-width :ディスプレイ幅を自動感知し、その幅を最大幅とする機能
  • initial-scale  :ディスプレイの方向を変えた場合の拡大倍率の設定。

向きを変えるとディスプレイ幅に合わせて拡大するのが初期設定。
変えたくない場合は initial-scale=1.0 とする。
値を2.0とすると2倍拡大になる。

  • user-scalable=no :指で拡大縮小(ピンチイン・ピンチアウト)できるようにするかどうかの設定

値を1(yes)か0(no)とする場合もある  

[スマートフォンサイト]

6月19日 今日のWORK

スマートフォン専用サイト

HTML

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="format description" content="telephone=no, email=no">
<link rel="apple-toch-icon.png" href="apple-touch-icon.png">
<link rel="stylesheet" href="style.css">
<title>スマートフォン専用サイト</title>
</head>

<body>
<header class="global-header">
<h1 class="page-heading">エモトカホリ</h1>
</header>

<img src="img/logo.png" class="img-illust">
<p class="introduction">エモトカホリのポートフォリオサイトです。<br>動物や植物を中心にしたイラストを書いています。</p>

<section class="block">
<h1 class="block-heading">イラスト集</h1>
<p class="comment">エモトカホリの作品集です。絵をクリックするとイラストのページに移動します。</p>
<nav class="nav-portfolio">
<ul>
<li><a href="flying-penguin.html" title="ペンギン"><img src="img/thumbnail_flying-penguin.png" alt="群れをなして空を飛ぶペンギンたちのイラスト"></a></li>
<li><a href="#" title="コトリ"><img src="img/thumbnail_love-bluebird.png" alt="恋する二人を見守る小鳥がハート型に赤い糸を咥えているイラスト"></a></li>
<li><a href="#" title="ゾウ"><img src="img/thumbnail_dreaming-elephant.png" alt="クジャクの上に乗って空を飛ぶことを夢見るゾウのイラスト"></a></li>
<li><a href="#" title="クマ"><img src="img/thumbnail_star-bear.png" alt="星を虫取り網でたくさん捕まえているイラスト"></a></li>
<li><a href="#" title="イヌ"><img src="img/thumbnail_present-dog.png" alt="プレゼントの箱をカラダにつけたイヌのイラスト"></a></li>
<li><a href="#" title="ネコ"><img src="img/thumbnail_flying-cat.png" alt="色とりどりの風船を持って空を飛ぶネコのイラスト"></a></li>
<li><a href="#" title="ウサギ"><img src="img/thumbnail_rabbit.png" alt="花に恋するウサギのイラスト"></a></li>
<li><a href="#" title="カメ"><img src="img/thumbnail_tortoise.png" alt="杜で長生きしているカメのイラスト"></a></li>
</ul>
</nav>
<p class="comment">コチラで紹介している作品以外の作品もありますので、ご覧になりたい方は<a href="mailto:mail@example.com?subject=【エモトカホリの他の作品について】">メールでお問い合わせ下さい。</a></p>
</section>

<footer>
<nav class="nav-about">
<ul>
<li><a href="#">エモトカホリの紹介</a></li>
<li><a href="#">イラストの販売について</a></li>
<li><a href="#">仕事の依頼・お問い合わせ</a></li>
</ul>
</nav>
<p class="copyright"><small>Copyright&copy;2014 Emoto Kahori</small></p>
</footer>
<script src="js/iphone.js"></script>
</body>
</html>


CSS

@charset "UTF-8";

/* reset*/
html, body, h1,p, nav, ul, li, a, img,header, footer, small, section, div {
 margin: 0;
 padding: 0;
 font-size: 100%;
 }
body {
   line-height: 1.0;
   -webkit-text-size-adjust: none;  /*テキストのサイズを自動調整する機能*/
   }
 
article, aside, canvas, details, figcaption. figure, footer, header, menu, nav,section,summary {
      display: block;
}
  
img {
  border: none;
  vertical-align: bottom;
}
ul {
  list-style: none;
}


body {
  background-color: #D9F5F3;
   line-height: 1.6;
  font-family: "Hiragino Kaku Gothic ProN", Helvetica, sans-serif;
}

/* サイトのレイアウト */
.global-header {
  height: 44px;
  line-height: 44px;
  background-image: -webkit-linear-gradient(top, #cfe1ed, #7faaca);/*グラデーション*/
  background-image: linear-gradient(to top, #cfe1ed, #7faaca);
  border: solid 1px #5a83a1;
}
.page-heading {
  margin: 0 auto;
  color: #333;
  font-size: 16px; 
  text-align: center;  
  width: 140px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  text-shadow: 1px 1px 1px #FFF;
}
.img-illust{
  margin: 0 auto;
  display: block;
  border: 10px solid #F5F5f0;
}
.introduction {
  margin: 15px 10px;
  padding: 5px 10px;
  background: #75D9D0;
  font-size: 12px;
  border-radius: 8px;
}
.block{
 margin-bottom: 20px;
}
.block-heading {
  margin:10px;
  padding: 5px;
  border-left: 5px solid #75D0D0;
  font-size: 14px;
}
.comment {
  margin: 0 10px;
  font-size: 12px;
}
.nav-portfolio {
  margin-top: 10px;
}
.nav-portfolio img {
  margin: 5px 0;
  width: 60px;
  height: 60px;
  border-radius: 30px; /*元の画像がサイズが60pxなので、半分のサイズを半径とする*/
  box-shadow: 0 0 3px #333333; /*boxshadowにベンダープレフィクスは不要*/
}
.nav-portfolio ul {
  display: block;
  overflow: hidden;
}
.nav-portfolio li {
  margin: 0 0 10px 16px;
  float: left;
  text-align: center;
}
.nav-portfolio a {
  display: block;
  text-decoration: none;
}

/*navのタイトルについての指定*/
.nav-portfolio a:after {
  display: block;
  content: attr(title);
  font-size: 12px;
  text-align: center;
  width: 60px;  /*タイトルが60px以上の内容は省略する*/
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
footer {
  background: #75D9D0;
  padding: 10px;
}
/*footer .nav-about {
  margin: 10px;
}
*/
footer nav ul {
  background: #FFF;
  border-radius: 15px;
}
footer nav ul li {
  font-size: 12px;
  line-height: 44px;
  padding: 0 10px;
}
footer nav ul li {
  border-bottom: 2px solid #75D9D0;
}
footer nav ul li:first-child {
  border-top-left-radius: 15px;
  border-top-right-radius: 15px;
}
footer nav ul li:last-child {
  border-bottom-left-radius: 15px;
  border-bottom-right-radius: 15px;
}
footer nav ul li a {
  text-decoration: none;
  display: block;
}
footer p.copyright {
  font-size: 12px;
  text-align: center;
  color: #FFF;
}

[サイト制作]2件目webサイト制作開始しました

2件目のクライアントが決まり、制作を開始した

昨日はサイト構成案に了承して頂いたところである。

 

今日からワイヤーフレーム制作に入る。

目安として1ヶ月(7月20日までに)で完成させたい。

 

[PHP]入力フォーム⑦

フォームを送信後に入力フォームをクリアにする

以下のコードによって、送信完了すると、セッションファイルに保存されていたデータが破棄されるようになる。

【send.php

$_SESSION = array();
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['msg']);
session_destroy();

 

初めてページを開くと、画面にエラーがでる。それを回避する方法

f:id:pleasure10501:20150613214950p:plain

セッションファイルが作成されていないのが原因。

回避する方法は2つ

 ①エラー制御演算子「@」を使う

 ②isset関数を使う

 

①エラー制御演算子を使う場合

【index.php】  既に記述した以下のコードを変更

session_start();
$name = $_SESSION['name']; 
$email = $_SESSION['email'];
$msg = $_SESSION['msg']; 

   ↓

$name = $_SESSION['name'];  
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];  

 ②isset関数を使う場合

 

1)まず次のコードを削除する
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];

 

2)isset関数  
  $_SESSION['○○']の値がある場合、変数○○にその値を代入するようにする

if(isset($_SESSION['name'])){
  $name = $_SESSION['name'];
}
if(isset($_SESSION['email'])){
  $email = $_SESSION['email'];
}
if(isset($_SESSION['msg'])){
  $msg = $_SESSION['msg'];
}

 3)変数$name、$email、$msgの初期値を空にする

$name = '';
$email = '';
$msg = '';

※ ’’・・・シングルクォーテーション2つで「空文字列」。
     値は空だが、中身は空ではない。
     echoで出力した場合空に見える。 

 

テキストエリアに入力したメッセージに改行が入らない

 

f:id:pleasure10501:20150613215730p:plain

お問い合わせ欄に入力した文章が、入力確認ページでは改行されずに出力される。

これを成形する為の方法。

f:id:pleasure10501:20150613215753p:plain

 

 

 

nl2br( )を使用

( )内の文字列に含まれる改行を反映して返す

 

【check.phpとsend.php

お問い合わせ内容:<td><?php echo nl2br(htmlspecialchars($msg, ENT_QUOTES,'UTF-8')); ?>

※htmlspecialchars()をnl2br()で囲む。

 

結果

f:id:pleasure10501:20150613220734p:plain

 

f:id:pleasure10501:20150613220745p:plain

 

 

ここまでのファイルの内容

【index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
<?php
$name = '';
$email = '';
$msg = '';

session_start();
if(isset($_SESSION['name'])){
  $name = $_SESSION['name'];
}
if(isset($_SESSION['email'])){
  $email = $_SESSION['email'];
}
if(isset($_SESSION['msg'])){
  $msg = $_SESSION['msg'];
}
?>
</head>

<body>
<h1>お問い合わせフォーム</h1>
<p>必要事項を入力して「確認する」ボタンをクリックしてください。</p>
<form action="check.php" method="post">
<table>
<tr><th><label for="name">お名前:</label></th><td><input type="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="msg">お問い合わせ内容:</label></th><td><textarea name="msg" id="msg"><?php echo htmlspecialchars($msg, ENT_QUOTES,'UTF-8'); ?></textarea></td></tr>
</table>
<p><input type="submit" value="確認する"></p>
</form>
</body>
</html>

【check.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力確認画面</title>
<?php
if( !isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['msg']) ){
  header('Location:./index.php');
  exit;
}

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

session_start();                
$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['msg'] = $_POST['msg'];
?>
</head>
<body>
<h1>入力内容確認画面</h1>
<table>
<tr><th>お名前:</th><td><?php echo htmlspecialchars($name, ENT_QUOTES,'UTF-8'); ?></td></tr>
<tr><th>メールアドレス:</th><td><?php echo htmlspecialchars($email, ENT_QUOTES,'UTF-8'); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(htmlspecialchars($msg, ENT_QUOTES,'UTF-8')); ?></td></tr>
</table>
<p><a href="send.php">送信する</a></p>
<p><a href="index.php">入力画面に戻る</a></p>
</body>
</html>

【send.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メール送信画面</title>
<?php
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];
 
$_SESSION = array();
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['msg']);
session_destroy();

//ヒアドキュメント
$body=<<<EOF
お問い合わせが送信されました。
送信者のお名前:{$name}
メールアドレス:{$email}
内容は以下の通りです。
{$msg}
EOF;
mb_send_mail('xxx@xxxxx.com','お問い合わせがありました','$body');
?>
</head>

<body>
<h1>メール送信画面</h1>
<p>以下の内容で送信しました。</p>
<table>
<tr><th>お名前:</th><td><?php echo htmlspecialchars($name,ENT_QUOTES, 'UTF-8');?> </td></tr>
<tr><th>メールアドレス:</th><td><?php echo htmlspecialchars($email,ENT_QUOTES, 'UTF-8');?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(htmlspecialchars($msg,ENT_QUOTES, 'UTF-8'));?></td></tr>
</table>
<p><a href="index.php">入力画面へ戻る</a></p>
</body>
</html>

 

[PHP]php.iniファイルの初期設定(XAMPP、MAMP)

XAMPP、MAMPPHPを始める前にやっておくべきなのですが、php.iniファイルのデフォルトの設定変更があります。

主に、文字コード設定とタイムゾーンの設定です。

 

設定を変更する際にはXAMPP、MAMPを一旦停止しておきましょう

 

Windows・XAMPP編 (v3.2.1)

○XAMPPのphp.iniファイルの場所はこちら
  C:¥¥xampp¥php¥php.ini をテキストエディタで開く

 

タイムゾーン設定変更  

1045行目あたり  
;date.timezone = Europe /Berlin

      ↓
これをコピーして次の行にペーストし、打ち変える
date.timezone = Asia /Tokyo ※先頭のセミコロンは外す

 

文字コード設定変更

814行目あたり
;default_charset = "UTF-8"

      ↓

先頭のセミコロンを外す
default_charset = "UTF-8"

 

ファイルを保存しXAMPPを起動

 

MAMP

MAMPのデフォルトではSESSIONの設定も変更しなければならない(セッション)ので
文字コードタイムゾーン、sessionの3つを変更します

 

①使っているPHPのバージョンを確認

MAMPをインストールすると複数PHPのバージョンが同時にインストールされ、それぞれにファイルが存在する。使っているバージョン以外のファイルを変更しても意味がないため、バージョン確認は必須。

確認方法は、

f:id:pleasure10501:20150613182109p:plain

1) MAMPをアプリケーションで立ち上げる
ApacheMySQLを起動する必要はない)

2) 「設定」を押し

3) PHPのタブの「標準バージョン」でラジオボタンがついている方

右の場合は「5.6.7」と判明。

 

php.iniファイルの場所

アプリケーション> MAMP> bin > php > 使用するphpのバージョン名 > conf > php.ini

テキストエディタで開く

タイムゾーン設定変更

552行目あたり date.timezone = "Europe/Berlin"
      ↓

date.timezone = "Asia/Tokyo"

 

文字コード設定変更

; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"


 Always populate the $HTTP_RAW_POST_DATA variable.
;always_populate_raw_post_data = On

 

セミコロンを外してUTF-8に変える
default_charset = "UTF-8"

 

1016行目あたり

[mbstring]
; language for internal character representation.
;mbstring.language = Japanese

   ⇒セミコロンを削除


; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
;mbstring.internal_encoding = EUC-JP

 ⇒セミコロンを削除しUTF-8へ書き換え


; http input encoding.
;mbstring.http_input = auto

   ⇒セミコロンを削除

; http output encoding. mb_output_handler must be
; registered as output buffer to function
;mbstring.http_output = SJIS

; enable automatic encoding translation accoding to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
;mbstring.encoding_translation = Off

; automatic encoding detection order.
; auto means
;mbstring.detect_order = auto

 ⇒セミコロンを削除し「UTF-8, SJIS, EUR-JP, JIS, ASCII」に書き換え

 

●セッション設定変更

810行目あたり
session.auto_start = 0

     ↓

session.auto_start = 1

 ファイルを保存して、MAMPを再起動