WEBサイト制作の勉強

WEBサイト制作の勉強の為の解説ブログです。

フェリカテクニカルアカデミー

12月13日の作業データ

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>スマホ特化型サイトの作成</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Kanit:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=RocknRoll+One&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
</head>
<body id="top">
<header>
<h1>IKEBUKURO COFFEE FESTIVAL</h1>
<p class="tag-line">一杯のコーヒーから街のつながりを<br>
今年も池袋の街がコーヒーの香りで満たされます。</p>
<div class="banner-img">
<img src="https://placehold.jp/1000x400.png" alt="">
</div><!-- /.banner-img -->
<nav class="pc-nav">
<ul>
<li><a href="#top">Top</a></li>
<li><a href="#shop">Shop</a></li>
<li><a href="#access">Access</a></li>
<li><a href="#gallery">Gallery</a></li>
</ul>
</nav>
</header>

<button id="ham-btn"><span></span></button>
<nav id="sp-nav">
<ul>
<li><a href="#top">Top</a></li>
<li><a href="#shop">Shop</a></li>
<li><a href="#access">Access</a></li>
<li><a href="#gallery">Gallery</a></li>
</ul>
</nav>


<div class="logo-box">
<img src="img/logo.svg" alt="">
</div>


<div class="container">
<p class="ticker">
テレビ池袋「街ブラ天国」(12月7日土曜日 夕方6時放送予定)にて、イベント出店舗が紹介されます!
<span class="s2">テレビ池袋「街ブラ天国」(12月7日土曜日 夕方6時放送予定)にて、イベント出店舗が紹介されます!</span>
</p>

<div class="main-visual">
<img src="img/main.webp" alt="">
</div><!-- /.main-visual -->

<div class="main-copy">
<h2>池袋でコーヒーと<span>音楽を楽しむ</span></h2>
<p class="lead">全国の人気コーヒーショップが一堂に会し、こだわりの一杯を提供。コーヒー豆の販売や、バリスタによるデモンストレーションなど、コーヒー好きにはたまらないイベントが盛りだくさん。美味しいコーヒーを飲みながら、音楽ライブやワークショップも開催。ぜひご来場ください!</p>
</div><!-- /.main-copy -->

<main>
<section id="news" class="page-section">
<h3 data-ja="お知らせ">News</h3>
<dl class="news-list">
<dt>2024年12月13日</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quam, suscipit!</dd>
<dt>2024年12月12日</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quam, suscipit!</dd>
<dt>2024年12月11日</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quam, suscipit!</dd>
<dt>2024年12月10日</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quam, suscipit!</dd>
</dl>
</section>

<section id="shop" class="page-section">
<h3 data-ja="出店舗の紹介">Shop</h3>

<div class="scroll-wrapper">

<div class="scroll-box">
<h4>自家焙煎店:豆蔵</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>店主・山田太郎「自家焙煎の深煎りコーヒーは格別です。ぜひ、当店自慢のブレンドをご賞味ください。」</p>
</div><!-- /.scroll-box -->

<div class="scroll-box">
<h4>焙煎工房 薫風</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>スタッフ・鈴木花子「毎朝丁寧にハンドピックした生豆を、丁寧に焙煎しています。一杯ごとに異なる風味をお楽しみください。」</p>
</div><!-- /.scroll-box -->

<div class="scroll-box">
<h4>珈琲ロースター 星夜</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>店主・佐藤健「星の下で生まれたような、深みのある一杯を。特別な豆を、特別な方法で焙煎しました。」</p>
</div><!-- /.scroll-box -->

<div class="scroll-box">
<h4>カフェ・ド・ルナ</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>店長・田中美咲「月夜の下、ゆったりとコーヒータイムを。自家製スイーツとのペアリングもおすすめです。」</p>
</div><!-- /.scroll-box -->

<div class="scroll-box">
<h4>エスプレッソバー ビタースウィート</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>店長・藤田麻美「本格的なエスプレッソを、様々なアレンジで。あなただけのオリジナル一杯を創りましょう。」</p>
</div><!-- /.scroll-box -->

<div class="scroll-box">
<h4>モバイルコーヒー ワゴン</h4>
<div class="scroll-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.scroll-img -->
<p>店主・伊藤健一「街を飛び回るコーヒーワゴン。どこで出会えるかはお楽しみ。」</p>
</div><!-- /.scroll-box -->
</div><!-- /.scroll-wrapper -->

</section>

<section id="access" class="page-section">
<h3 data-ja="会場のご案内">Access</h3>
<div class="access-wrapper">
<div class="access-box">
<h4>東口会場:JR池袋駅東口徒歩5分</h4>
<div class="access-map">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3238.945289559118!2d139.7117402752527!3d35.72756402742839!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188d68f6cfe057%3A0xddd17dcd7ecaf745!2z6LGK5bO25Yy656uL5Y2X5rGg6KKL5YWs5ZyS!5e0!3m2!1sja!2sjp!4v1734057036396!5m2!1sja!2sjp" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
</div><!-- /.access-map -->
</div><!-- /.access-box -->

<div class="access-box">
<h4>西口会場:JR池袋駅西口徒歩1分</h4>
<div class="access-map">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3238.8400845926953!2d139.7063519752528!3d35.73015122728611!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188d5c4d489531%3A0x25d752954313d248!2z6LGK5bO25Yy656uL5rGg6KKL6KW_5Y-j5YWs5ZyS!5e0!3m2!1sja!2sjp!4v1734056996388!5m2!1sja!2sjp"  style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
</div><!-- /.access-map -->
</div><!-- /.access-box -->

</div><!-- /.access-wrapper -->
</section>




<section id="gallery" class="page-section">
<h3 data-ja="イベントの様子">Gallery</h3>

<div class="gallery-wrapper">
<div class="gallery-box">
<h4>投稿タイトル1</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet,</p>
<p class="date">2024/12/13</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル2</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, itaque.</p>
<p class="date">2024/12/12</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル3</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Cupiditate reiciendis impedit tempora id facilis magni nemo. Distinctio quae corrupti ipsum sed placeat qui necessitatibus voluptas? Amet tempore saepe eum esse?</p>
<p class="date">2024/12/11</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル4</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet, </p>
<p class="date">2024/12/10</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル5</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, itaque.</p>
<p class="date">2024/12/09</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル6</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, itaque.</p>
<p class="date">2024/12/08</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル7</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Incidunt praesentium impedit provident reiciendis est quam consequatur molestias, voluptatum quos magni veniam, iure iste officiis itaque eaque nam? Culpa, quisquam totam?</p>
<p class="date">2024/12/07</p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h4>投稿タイトル8</h4>
<div class="gallery-img">
<img src="https://placehold.jp/600x400.png" alt="">
</div><!-- /.gallery-img -->
<p class="gallery-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, itaque.</p>
<p class="date">2024/12/06</p>
</div><!-- /.gallery-box -->
</div><!-- /.gallery-wrapper -->

</section>


</main>
<footer>
<p><small>&copy; 2024 IKEBUKURO COFFEE FESTIVAL</small></p>
</footer>
</div><!-- /.container -->
</body>
</html>


style.css

@charset "utf-8";

/* 変数の指定 */
:root{
--base_color:#E8E3D8;
--main_color:#257C4D;
--color_2:#d6d1c4;
--txt-color:#444444;
--txt_color2:#f45454;
--font_en:"Kanit", sans-serif;
--font_ja:"RocknRoll One", sans-serif;
}

html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{background-repeat:no-repeat;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0;box-sizing:border-box;}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[role=button],[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search][type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted}[type=reset],[type=submit],button,html [type=button]button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]img{border-style:none;vertical-align: bottom}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul,ol{list-style:none;}a{text-decoration:none;}img{max-width: 100%;vertical-align: bottom;}

html{
scroll-behavior: smooth;
}

body{
background-color: var(--base_color);
color:var(--txt-color);
display: flex;
flex-direction: row-reverse;
@media (960px >= width){
justify-content: center;
}
}

header{
width: 45%;
border: 1px solid var(--txt-color);
position: fixed;
top: 120px;
left: 3%;
padding: 20px;
border-radius: 10px;
>h1{
color: var(--main_color);
font-family: var(--font_en);
font-size: 40px;
margin-bottom: 10px;
}
.tag-line{
font-family: var(--font_ja);
font-size: 18px;
margin-bottom: 10px;
}
.banner-img{
margin-bottom: 10px;
}
@media (960px >= width){
display: none;
}
}

/* pc用ナビ */
.pc-nav>ul{
display: flex;
justify-content: center;
gap: 0 20px;
a{
padding: 6px 14px;
color: var(--txt-color);
font-family: var(--font_en);
font-size: 18px;
&:hover{
color: var(--main_color);
text-decoration: underline 2px;
text-underline-offset: 4px;
}
}
}

.container{
width: 42%;
margin-right: 3%;
background-color: var(--color_2);
overflow: hidden;
@media (960px >= width){
margin-right: 0;
width: 80%;
}
@media (640px >= width){
width: 100%;
}
}


/* 共通部分 */
.page-section{
min-height: 100vh;
padding: 50px 0;
>h3{
text-align: center;
font-size: 28px;
margin-bottom: 40px;
color: var(--txt_color2);
font-family: var(--font_en);
&::after{
display: block;
content: attr(data-ja);
font-size: 22px;
color: var(--txt-color);
}
}
}


/* メインコピー */
.main-copy{
font-family: var(--font_ja);
position: relative;
>h2{
writing-mode: vertical-rl;
position: absolute;
right: 10px;
top: -360px;
background-color: #ffffff;
height: 14em;
padding: 8px;
letter-spacing: 0.2em;
>span{
display: block;
margin-top: 6em;
}
}
>.lead{
width: 66%;
margin: 100px auto;
line-height: 2.2;
}
}


/* ロゴボックス */
.logo-box{
width: 180px;
aspect-ratio: 1/1;
position: fixed;
top: 20px;
left: 42%;
animation: logo 5s linear infinite;
@media (960px >= width){
display: none;
}
}

@keyframes logo{
0%{rotate: 0deg;}
100%{rotate: 360deg;}
}

/* ティッカー部分 */
.ticker{
background-color: var(--txt-color);
color: #FFF;
font-family: var(--font_ja);
padding: 10px;
white-space: nowrap;
display: flex;
text-indent: 2em;
animation: txt 7s linear infinite;
font-size: 14px;
>span{
text-indent: 2em;
}
}
@keyframes txt{
0%{text-indent: 2em;}
100%{text-indent: -48em;}
}


/* お知らせ部分 */
.news-list{
padding: 0 20px;
>dt{
font-weight: bold;
margin-bottom: 5px;
}
>dd{
margin-bottom: 40px;
padding-bottom: 5px;
border-bottom: 1px solid var(--txt-color);
}
}

/* shop部分 */
.scroll-wrapper{
display: flex;
flex-wrap: nowrap;
overflow: auto;
scroll-snap-type: x mandatory;
gap: 0 40px;
padding: 0 20px;
scroll-padding: 0 20px;/* スナップで止まった時の余白 */
}
.scroll-box{
flex: 0 0 80%;
scroll-snap-align: start;
scroll-snap-stop: always;
padding: 20px;
background-color:#eeecec;
margin-bottom: 20px;
border-radius: 10px;
>h4{
font-size: 22px;
font-family: var(--font_ja);
color: var(--main_color);
margin-bottom: 8px;
}
>.scroll-img{
width: 100%;
aspect-ratio: 16/9;
margin-bottom: 8px;
>img{
object-fit: cover;
width: 100%;
height: 100%;
}
}
}


/* access部分 */
.access-wrapper{
padding: 0 20px;
display: grid;
gap: 50px 0;
margin-bottom: 100px;
h4{
font-size: 18px;
margin-bottom: 8px;
}
.access-map{
width: 100%;
aspect-ratio: 4/3;
>iframe{
width: 100%;
height: 100%;
}
}
}


/* gallery部分 */
.gallery-wrapper{
padding: 0 10px;
display: grid;
grid-template-columns: repeat(auto-fit,minmax(200px,1fr));
gap: 40px 20px;
}
.gallery-box{
display: grid;
grid-template-rows: subgrid;
grid-row: span 4;
row-gap: 10px;
>h4{
text-align: center;
font-size: 20px;
font-family: var(--font_ja);
}
>.gallery-img{
width: 100%;
aspect-ratio: 1/1;
border-radius: 10px;
overflow: hidden;
>img{
object-fit: cover;
width: 100%;
height: 100%;
}
}
>.gallery-text{
border-bottom: 1px solid var(--txt-color);
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;/* 指定した行数以上になったら省略される */
}
>.date{
text-align: right;
}
}

/* footer部分 */
footer{
background-color: var(--main_color);
padding: 20px;
text-align: center;
color: #FFF;
}


/* spナビゲーション部分 */

#ham-btn{
display: none;
@media (960px >= width){
display: block;
width: 50px;
height: 50px;
background-color: #ff0;
position: fixed;
right: 0;
top: 0;
}
}

#sp-nav{
display: none;
@media (960px >= width){
display: block;
}
}

subgridでカード型レイアウトを作成

通常のCSS Gridではカード型レイアウトなどのアイテム(子要素)の縦位置を揃える事がとても難しく、コンテンツによってタイトルの文字数が異なる場合など、高さを指定しないとズレてしまいます。
2024年9月現在、主要ブラウザはすべてsubgridに対応しているので、積極的に使っていきましょう。

caniuse.com

通常のdisplay:grid

grid-template-rows: subgrid の場合


subgridの使い方

subgridは小アイテムに指定する必要があります。この際にアイテム内にいくつの要素が必要が考えます。
今回は見出し、画像、説明文、カテゴリーの4つが必要です。

.box{
padding: 20px;
display: grid;
grid-template-rows: subgrid;
grid-row: span 4;/* .box内の要素が4行になる */
row-gap: 15px;/* subgrid内の要素の間隔 */
}

cssで3行以上の文字を省略

ブログなどで文字数が記事により大きく異なる場合、デザイン上、文字が3行以上になる場合、省略したい事があります。cssで文字を省略出来るので設定してみましょう。

overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;


zenn.dev

if文を使ったおみくじ

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>割合を設定したランダム</title>
<style>
img{
vertical-align: bottom;
max-width: 100%;
}
.box{
width: 240px;
margin: 50px auto 0;
}
#btn{
padding: 10px;
}
</style>
</head>
<body>
<div class="box">
<h1>今日の運勢占い</h1>
<p id="loto"><img src="img/kuji.png" alt=""></p>
<button id="btn" onclick="kuji();">おみくじを引く</button>
</div>

<script>

function kuji(){

//1~100までのランダムを作成
let num = Math.ceil(Math.random()*100);
console.log(num);

let daikichi = 40 //大吉の出る確率40%
let chukichi = 60 //中吉の出る確率は20%だけど、大吉の出る確率と合算する
let kichi = 95//吉の出る確率は35%だけど大吉、中吉と合算する
//凶の出る確率はそれ以外なので変数の登録は必要ない

if(num <= daikichi){
//1~15が出たら大吉
var raito = 0;
}else if(num <= chukichi){
//16~40が出たら中吉
var raito = 1;
}else if(num <= kichi){
//41~90が出たら吉
var raito = 2;
}else{
//それ以外が出たら凶
var raito = 3;
}
console.log(raito);

document.querySelector('#loto').innerHTML = '<img src="img/'+raito+'.png" alt="">'
}
</script>



</body>
</html>

css scroll-snap

以前はjavascript等で制御していたスクロールスナップも現在ではcssのみで簡単に実装出来ます。またflexやvw、vhを使う事でレスポンシブにも簡単に対応出来ます。

www.nike.com


スクロールの方向とスナップの種類(親要素に指定)

scroll-snap-type: y mandatory;

ある程度スナップしたら、次のコンテンツに自動でスナップさせる場合は「mandatory」
コンテンツ中間地点にいる場合はその位置で停止するのが「proximity」
親要素に指定します


子要素の停止位置(子要素に指定)

scroll-snap-align:start;

「start」 エリアの開始位置
「end 」エリアの終わりの位置
「center 」親要素の中央で位置します


子要素のスキップ(子要素に指定)

scroll-snap-stop:normal;

スクロール速度が早い場合にアイテムをいくつか飛ばしてしまう事があります。その時に、
「normal」いくつかスキップしてしまう(デフォルト)
「always」1つ1つ止まるようになる


scroll-padding(子要素に指定)

scroll-paddingはショートハンドのプロパティで、paddingと同様に上下左右にスクロールのパディングを親要素に定義します。

scroll-margin

子要素間の余白を使いたい時に指定します。


coliss.com

flexboxの設定

flex-grow:子要素の伸びる比率
flex-shrink:子要素の縮む比率
flex-basis:子要素のベースとなる幅の指定

ショートハンドの場合

flex-grow、flex-shrink、flex-basis の 3 つのプロパティーをflexプロパティ一行で指定できます。初期値は 0 1 auto。

 flex: 0 1 30%;

Y方向にスクロールスナップ


See the Pen
Y方向にスクロールスナップ
by yachin29 (@yachin29)
on CodePen.

X方向にスクロールスナップ


See the Pen
X方向にスクロールスナップ
by yachin29 (@yachin29)
on CodePen.



See the Pen
proximityでスクロールスナップ
by yachin29 (@yachin29)
on CodePen.

ファビコン・タッチアイコンの設定

ファビコンの設定

ブラウザーによって微妙に記述が異なりますが、IE11以上であれば、

.icoの場合

<link rel="icon" href="favicon.ico">


.pngの場合

<link rel="icon" href="favicon.png" type="image/png">

でOKです、


サイトのルートディレクトリに「favicon.ico」という名前でファイルを配置しておけば、下層ページでも上記の記述が無くてもファビコンを表示してくれます。



タッチアイコンの設定

スマートフォンの場合、PCのようにブラウザーから検索してWebサイトに行くよりも、ホーム画面に登録してあるアプリからワンタッチでWebサイトなりWebサービスを利用するケースがほとんどです。
なので、スマートフォンサイトを制作する場合には必ずスマートフォンのホーム画面に登録出来る「タッチアイコン」をPCサイトでのファビコンと同様に作っておく必要があります。
「タッチアイコン」を設定せずにスマホサイトをホーム画面に登録すると、サイト全体のキャプチャー画像が仮の「タッチアイコン」としてホーム画面に設置されてしまい、一見何のサイトか解らないので必ず「タッチアイコン」を設定しましょう。


ポイント

  • 画像に角丸等の処理はせず正方形で作る(ホーム画面に登録する際に自動で角丸等の処理が行われます)
  • 画像サイズは192px X 192px で書き出し出す(2019å¹´9月現在)
IOSサファリの場合

タッチアイコンは各デバイス毎に大きさが細かく指定されています。
各デバイスのタッチアイコンの大きさ


各デバイスに最適な大きなのタッチアイコンをそれぞれ用意する場合もありますが、

  • 各デバイスの推奨サイズに一致する大きさのアイコンがない場合は、推奨サイズよりも大きいアイコンの中で最小のアイコンが適用される。
  • 推奨サイズよりも大きいアイコンがない場合は記述してある最大のアイコンが適用される。

という仕様を踏まえると、IOSだけで考えるとタッチアイコンは1番大きい180px X 180pxサイズのみで問題ありません。

細かい仕様は以下の公式ガイドラインの通りです

developer.apple.com

Chrome for Android

Chrome for Androidの場合、公式ガイドラインでは192px X 192pxを推奨しています。

Chrome for Android公式ガイドライン
https://developer.chrome.com/multidevice/android/installtohomescreen#fallback

Android標準ブラウザ

Android標準ブラウザの場合、仕様が携帯端末によってバラバラで「これでOK」という物が無いので、なんとなくで対応。


それぞれのブラウザーの仕様を見比べた結果、
192px X 192pxサイズのタッチアイコンを1つだけ
用意するのがベストです。



タッチアイコンの設定方法

192px X 192pxで書き出したpng画像をHTMLファイルで設定します。
タッチアイコンはファビコンの時と同様、index.htmlファイルと同じ階層に裸で置いて下さい。
古いブラウザーへの対応も考えると記述はもっと多くなってしますが、現状では「iOS Safari and Chrome」と「 Android標準ブラウザ(一部)」の2つで十分です。

※全てのページでタッチアイコンを表示させたい場合、全てのページにタッチアイコンを表示させる為の記述が必要になります。また、一部のAndroidではタッチアイコン画像のパスを絶対パスにしなければ表示されない場合があります。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タッチアイコンを設定する</title>
<link rel="stylesheet" href="css/style.css">

<!-- iOS Safari and Chrome -->
<link rel="apple-touch-icon" sizes="192x192" href="touch-icon.png">

<!-- Android標準ブラウザ(一部) -->
<link rel="shortcut icon" href="http://〇〇〇〇.com/touch-icon.png">
</head>


参考ブログ
itexp.hateblo.jp




タッチアイコンに任意のタイトルを表示させる

「タッチアイコン」をホーム画面に登録すると、デフォルトの設定ではページタイトルの中身がタッチアイコンの下に表示されます。ただ文字数に制限(半角11文字{全角6文字}まで)があり場合によっては文字が見切れてしまうのでタッチアイコン用のタイトルをページタイトルとは別に設定しましょう。

<meta name="apple-mobile-web-app-title" content="タッチアイコン用のタイトル">

をタイトルタグの下に追加します。


<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タッチアイコンを設定する</title>
<meta name="apple-mobile-web-app-title" content="タッチアイコン用のタイトル">
<link rel="stylesheet" href="css/style.css">

<!-- iOS Safari and Chrome -->
<link rel="apple-touch-icon" sizes="192x192" href="touch-icon.png">

<!-- Android標準ブラウザ(一部) -->
<link rel="shortcut icon" href="touch-icon.png">
</head>

タッチアイコンをホーム画面に追加する

「IOS Safari」の場合

ブラウザーでWebサイトを表示し、「アクション」アイコンから「ホーム画面に追加」をタップします。


「アクション」アイコンをタップ



「ホーム画面に追加」をタップ


Androidの場合

Androidの場合、機種によって方法が全く違うので、以下のサイトを参考にして下さい。
http://promo.search.yahoo.co.jp/tips/2015/android_home_shortcut.htmlpromo.search.yahoo.co.jp

12月6日の作業データ(IKEBUKURO COFFEE FESTIVAL)

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>スマホ特化型サイトの作成</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Kanit:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=RocknRoll+One&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
</head>
<body id="top">
<header>
<h1>IKEBUKURO COFFEE FESTIVAL</h1>
<p class="tag-line">一杯のコーヒーから街のつながりを<br>
今年も池袋の街がコーヒーの香りで満たされます。</p>
<div class="banner-img">
<img src="https://placehold.jp/1000x400.png" alt="">
</div><!-- /.banner-img -->
<nav class="pc-nav">
<ul>
<li><a href="#top">Top</a></li>
<li><a href="#shop">Shop</a></li>
<li><a href="#access">Access</a></li>
<li><a href="#gallery">Gallery</a></li>
</ul>
</nav>
</header>

<div class="logo-box">
<img src="img/logo.svg" alt="">
</div>


<div class="container">
<p class="ticker">
テレビ池袋「街ブラ天国」(12月7日土曜日 夕方6時放送予定)にて、イベント出店舗が紹介されます!
<span class="s2">テレビ池袋「街ブラ天国」(12月7日土曜日 夕方6時放送予定)にて、イベント出店舗が紹介されます!</span>
</p>


<div class="main-visual">
<img src="https://placehold.jp/1000x800.png" alt="">
</div><!-- /.main-visual -->
<div class="main-copy">
<h2>池袋でコーヒーと音楽を楽しむ</h2>
<p class="lead">全国の人気コーヒーショップが一堂に会し、こだわりの一杯を提供。コーヒー豆の販売や、バリスタによるデモンストレーションなど、コーヒー好きにはたまらないイベントが盛りだくさん。美味しいコーヒーを飲みながら、音楽ライブやワークショップも開催。ぜひご来場ください!</p>
</div><!-- /.main-copy -->

<main>
<section id="news" class="page-section">
<h3 data-ja="お知らせ">News</h3>
</section>

<section id="shop" class="page-section">
<h3 data-ja="出店舗の紹介">Shop</h3>
</section>

<section id="access" class="page-section">
<h3 data-ja="会場のご案内">Access</h3>
</section>

<section id="gallery" class="page-section">
<h3 data-ja="イベントの様子">Gallery</h3>
</section>
</main>
<footer>
<p><small>&copy; 2024 IKEBUKURO COFFEE FESTIVAL</small></p>
</footer>
</div><!-- /.container -->
</body>
</html>


style.css

@charset "utf-8";

/* 変数の指定 */
:root{
--base_color:#E8E3D8;
--main_color:#257C4D;
--color_2:#d6d1c4;
--txt-color:#444444;
--font_en:"Kanit", sans-serif;
--font_ja:"RocknRoll One", sans-serif;
}

html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{background-repeat:no-repeat;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0;box-sizing:border-box;}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[role=button],[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search][type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted}[type=reset],[type=submit],button,html [type=button]button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]img{border-style:none;vertical-align: bottom}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul,ol{list-style:none;}a{text-decoration:none;}img{max-width: 100%;vertical-align: bottom;}

html{
scroll-behavior: smooth;
}

body{
background-color: var(--base_color);
color:var(--txt-color);
display: flex;
flex-direction: row-reverse;
}

header{
width: 45%;
border: 1px solid var(--txt-color);
position: fixed;
top: 120px;
left: 3%;
padding: 20px;
border-radius: 10px;
>h1{
color: var(--main_color);
font-family: var(--font_en);
font-size: 40px;
margin-bottom: 10px;
}
.tag-line{
font-family: var(--font_ja);
font-size: 18px;
margin-bottom: 10px;
}
.banner-img{
margin-bottom: 10px;
}
}

/* pc用ナビ */
.pc-nav>ul{
display: flex;
justify-content: center;
gap: 0 20px;
a{
padding: 6px 14px;
color: var(--txt-color);
font-family: var(--font_en);
font-size: 18px;
&:hover{
color: var(--main_color);
text-decoration: underline 2px;
text-underline-offset: 4px;
}
}
}

.container{
width: 42%;
margin-right: 3%;
background-color: var(--color_2);
overflow: hidden;
}


/* 共通部分 */
.page-section{
min-height: 100vh;
}

/* ロゴボックス */
.logo-box{
width: 180px;
aspect-ratio: 1/1;
position: fixed;
top: 20px;
left: 42%;
animation: logo 5s linear infinite;
}

@keyframes logo{
0%{rotate: 0deg;}
100%{rotate: 360deg;}
}

/* ティッカー部分 */
.ticker{
background-color: var(--txt-color);
color: #FFF;
font-family: var(--font_ja);
padding: 10px;
white-space: nowrap;
display: flex;
text-indent: 2em;
animation: txt 7s linear infinite;
font-size: 14px;
>span{
text-indent: 2em;
}
}
@keyframes txt{
0%{text-indent: 2em;}
100%{text-indent: -48em;}
}