WEBサイト制作の勉強

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

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

スマホでよくある横スクロールのUIを実装

最近はスマホ時のUIで横スクロールのを採用するアプリやWebサイトをよく見かけます。ある程度のコンテンツ数がある場合に横スクロールを採用する事でスマホの様な小さい画面でも1つ1つの画像をある程度大きく見せる事が出来るというメリットがあります。また、シンプルな横スクロールのUIであれば、CSSのみで実装出来るので覚えましょう。


f:id:yachin29:20181127125323p:plain

www.tripadvisor.jp

-webkit-overflow-scrolling: touch

本来、はみ出た要素をスクロールで動かすには「overflow: scroll」で良いのですが、「overflow: scroll」ではIOS系のデバイスでスクロールの動きがぎこちなくなるので、代わりに「-webkit-overflow-scrolling: touch」を指定します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>cssのみで横スクロール</title>
<meta name="viewport" content="width=device-width">
<style>
html,body,h1,ul,li {
  margin:0;
  padding:0;
  line-height:1.0;
}
img {
max-width: 100%;
}
h1 {
  text-align:center;
  padding: 10px 0;
}
.content {
  max-width:960px;
	margin: 50px auto 0;
}
.mask {
  width:100%;
}
ul {
  list-style:none;
  display:flex;
	flex-wrap: wrap;
	justify-content: space-between;
}
li {
width:calc((100% - 30px) / 4);
margin-bottom: 10px;
}
@media screen and (max-width:768px){
.content {
  max-width:960px;
  margin: 50px auto 0;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
}
ul {
  display:flex;
	flex-wrap: wrap;
	justify-content:space-around;
	width: 800%;
}
li {
width:calc((100% - 90px) / 8);
margin-bottom: 10px;
}
}
</style>
</head>
<body>
<header>
<h1>タイトル</h1>
<div class="content">
<div class="mask">
<ul>
<li><img src="img/01.jpg" alt=""></li>
<li><img src="img/02.jpg" alt=""></li>
<li><img src="img/03.jpg" alt=""></li>
<li><img src="img/04.jpg" alt=""></li>
<li><img src="img/01.jpg" alt=""></li>
<li><img src="img/02.jpg" alt=""></li>
<li><img src="img/03.jpg" alt=""></li>
<li><img src="img/04.jpg" alt=""></li>
</ul>
</div>
</div>
</header>
</body>
</html>


index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Splitレイアウト</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container">
<div class="contents">
<h1>北海道</h1>
<p class="main-copy">
北海道(ほっかいどう)は、日本の北部に位置する島。また、日本の行政区画及び同島とそれに付随する島を管轄する地方公共団体である。島としての北海道は日本列島を構成する主要4島の一つである。</p>
<p class="main-copy">
地方公共団体としての北海道は47都道府県中唯一の「道」である。ブランド総合研究所による「都道府県の魅力度ランキング」で2019年現在、11年連続で1位に選ばれ、観光意欲度、産品購入意欲度も1位、居住意欲度でも3位となっており、各意欲の面で高い評価を得ている。道庁所在地及び最大の都市は札幌市。
</p>
<div class="gallery-wrapper">
<ul class="gallery">
<li><img src="https://placehold.jp/3d4070/ffffff/800x600.jpg" alt=""></li>
<li><img src="https://placehold.jp/3d4070/ffffff/800x600.jpg" alt=""></li>
<li><img src="https://placehold.jp/3d4070/ffffff/800x600.jpg" alt=""></li>
</ul>
</div><!--/.gallery-wrapper-->

<a href="#" id="to-top"><p class="top-btn">Topに戻る</p></a>

<footer>
<p><small>&copy; Felica</small></p>
</footer>
</div><!--/.contents-->
<div class="key-visual">
<img src="img/main.jpg" alt="">
</div><!--/.key-visual-->
</div>
</body>
</html>

スタイルシート

 /*pcレイアウト*/
.container{
display: flex;
flex-direction: row-reverse;
}
.key-visual{
width: 50%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
}
.key-visual>img{
width: 100%;
height: 100%;
object-fit: cover;
}
.contents{
width: 50%;
}
.main{
padding: 0 100px;
}
h1{
padding: 160px 0;
font-size: 60px;
text-align: center;
font-family: serif;
}
.main-copy{
line-height: 2;
}
.main-copy:nth-of-type(2){
margin-bottom: 200px;
}
.gallery>li{
margin-bottom: 100px;
}
footer{
height: 100px;
background-color: darkslategrey;
color: #FFF;
text-align: center;
}
footer>p{
line-height: 100px;
}

/*トップに戻るボタン*/
.top-btn{
width: 50px;
height: 50px;
white-space: nowrap;
text-indent: 100%;
overflow: hidden;
background-color:darkslategrey;
border-radius: 50%;
position:fixed;
right: 20px;
bottom: 120px;
}
.top-btn::after{
content:"";
display: block;
width: 24px;
height: 24px;
border-top: 1px solid #FFF;
border-right: 1px solid #FFF;
position: absolute;
top: 10px;
right: 0;
bottom: 0;
left: 0;
margin: auto;
transform: rotate(-45deg);
}


@media (max-width:959px){
.main{
padding: 0 20px;
}
}

@media (max-width:767px){
/*スマホのレイアウト*/

.container{
display: flex;
flex-direction:column-reverse;
}
.key-visual{
width: 100%;
height: 40vh;
position:static;
}
.contents{
width: 100%;
}
h1{
padding: 40px 0;
font-size: 48px;
}
.main-copy:nth-of-type(2){
margin-bottom: 100px;
}

/*横スクロール*/
.gallery-wrapper{
width: 300px;
margin: 0 auto;
overflow-x:auto;
-webkit-overflow-scrolling:touch;
}
.gallery{
display: flex;
width: 860px;
justify-content: space-between;
}
.gallery>li{
width:calc((100% - 40px) / 3);
}

}

アウトライン構造について

HTMLで1番大事なのは正しい文章構造にマークアップ出来るか、です。
まずは文章をしっかりと読み、理解してからマークアップをし始めましょう。

アウトライン構造

アウトラインとは階層構造のことで、HTMLでのマークアップでは、このアウトラインを意識することが非常に重要になってきます。
webサイトを作る上でアウトライン構造は最も重要なポイントの1つです。自身の伝えたい内容が正しくアウトライン構造化されているか、外部ツールなどを使い必ず確認しましょう。


f:id:yachin29:20160601140359p:plain

HTML5 Outliner

https://gsnedders.html5.org/outliner/



以下の文章を使って正しいアウトライン構造を作ってみましょう。

HTMLについて
HTML(HyperText Markup Language)とは、ウェブ上の文書を記述するためのマークアップ言語である。

HTML5
HTML5は、HTML4に代わる次世代のHTMLとして2008年1月に草案が発表され、2014年10月に勧告された新しいHTML仕様。

HTML5の新要素
header、nav、footerなどが新しい要素として加わりました。

header要素
header要素には文書全体に対するイントロダクションやナビゲーションなどを配置します。

nav要素
nav要素には、ナビゲーションを表します。そのサイト、またはページ内の移動で必要となる主要なリンクメニューのセクションで使用します。

XHTML
HTML 4.01をXMLにて再定義したもので、その仕様はHTMLと同じくW3Cによって勧告されている。

XHTMLで使われていた要素
div要素やp要素などが使われていました。

h1要素
h1要素とはサイト内で1番ランクの高い見出しを表します。

p要素
p要素とは文章中の1つの段落を表すことができます。

CSSの新しい便利な機能を使う

Windows OSのサポートには期限があり、各OSの期限は、Windows 7は2020年1月14日で終了済みで、Windows 8.1は2023年1月10日に終了となります。
Windows 7のサポート期限が過ぎた事で、今後IE11のサポートを切るという選択が一層増えてきます。
HTML5やCSS3にはIE11がサポートしていない為、使えない便利な機能が多くあります。そういった便利な機能が今後は使えるようになって来るので、知っておきましょう。



  • background-clip
  • text-fill-color
  • font-face
  • position:sticky
  • inputを使ったドロワーメニュー

background-clip

background-clipプロパティは、背景の適用範囲を指定する際に使用します。テキスト部分に背景画像を適応させたい場合、

-webkit-background-clip: text;

と指定します。
※注意 2017月12月現在、-webkit-のベンダープレフィックスが記述が必要です。



-webkit-text-fill-color: transparent;

さらに「text-fill-color」を transparentに指定する事で文字色を透過にする事が出来ます。transparentの代わりに「color: rgba(0,0,0,0);」でもOKです。



webフォントには大きく分けて2種類の使い方があります。
1つはGoogleFontのようにネット上にあるCDNを使うパターンです。
今回は、もう1つの、「自身でフォントデータをサーバーにアップする」方法をやってみましょう。こちらの方法を使えば、GoogleFontには無いような珍しい個性的なフォントを表示させる事も可能になります。


1、使いたいフォントデータを自身のサーバーにアップロードする。

2、CSSに「@font-face」でフォントの指定をする。

@font-face {
   font-family: MyFont; /*任意の名前を付ける*/
   src: url('fonts/againts.otf') format("opentype");
}

3、適用させたい要素に上で付けたfont-familyを指定する

h1 {
  font-family: MyFont;
  font-size: 40px;
}

fontfree.me



photoshopvip.net

使用するテキスト

日本の四季
日本の気候は温暖でおだやかで、しかも春夏秋冬という四季にめぐまれています。
春には三寒四温、三日間寒さが続くと四日間暖かい日が続き、
そうしているうちに桜が咲き、夏が来る。
そして秋になり、また冬を迎える。
このように、日本の気候は少しづつ微妙に季節の顔を変えながら、こまやかに移り変わっていくのです。
春夏秋冬という四季に彩られた日本は、その恩恵ともいうべき、ゆたかな自然にもめぐまれ、その季節に応じたさまざまな文化を育んできたのです。


日本の春
「サクラ」の名称の由来は、一説に「咲く」に複数を意味する「ら」を加えたものとされ、元来は花の密生する植物全体を指したと言われている。また他説として、春に里にやってくる稲(サ)の神が憑依する座(クラ)だからサクラであるとも考えられている。
富士の頂から、花の種をまいて花を咲かせたとされる、「コノハナノサクヤビメ(木花之開耶姫)」の「さくや」をとって「桜」になった、とも言われている。



日本の夏
夏は、四季のひとつで、春と秋にはさまれた季節。天文学的には夏至から秋分まで。太陽暦では6月から8月を指し、陰暦では4月から6月となる。 四季の区分のある土地では最も気温の高い、3ヶ月程度の期間である。北半球ではグレゴリオ暦の6月 - 8月ごろ、南半球では12月 - 2月ごろである。
日本で炎天下に咲く花としてはヒマワリやサルスベリが有名。夏の風物詩としてはアサガオも代表格。


日本の秋
普段、葉が緑色に見えるのはクロロフィルが含まれるからであるが、寒くなり日照時間が短くなるとクロロフィルが分解される。また、葉柄の付け根に離層という特殊な水分を通しにくい組織ができ、葉で作られた水溶性のブドウ糖や蔗糖などの糖類やアミノ酸類が葉に蓄積し、その糖から光合成を利用して新たな色素が作られたりする。その過程で葉の色が赤や黄色に変化し、紅葉が起こる。


日本の冬
黒姫山斑尾山妙高山戸隠山飯綱山とともに北信五岳のひとつに数えられている山で、今から約17万年前ごろから火山活動を初め、4万年前ごろに現在の中央火口丘である小黒姫山(2,046m)を形成した。外輪山と中央火口丘の間には火口原が広がり七ツ池がある。南東方向より見た整った姿から信濃富士とも呼ばれている。
古くから信仰の対象とされ、黒姫というお姫様の悲話伝説(黒姫伝説)があり、山名の由来になったと言われている。冬季には黒姫高原スノーパークでスキーやスノーボードが楽しめる。

IE11のサポートが切れれば使用出来るHTMLやCSSの便利な機能

Windows 7のサポート期限が過ぎた事で、今後IE11のサポートを切るという選択が一層増えてきます。
HTML5やCSS3にはIE11がサポートしていない為、使えない便利な機能が多くあります。そういった便利な機能が今後は使えるようになって来るので、知っておきましょう。


HTML

rel=“noopener"

target="_blank"を使用するとリンク先を別のタブで開く事が出来ますが、セキュリティ上の脆弱性があり、リンク先のページで負荷の高い JavaScript が実行されていると、リンク元のページのパフォーマンスが低下するおそれがあります。それを避ける事が出来るのがこの「rel=“noopener"」属性です。

<a href="http://example.com" rel=“noopener" target="_blank">アンカー</a>

rel=“noreferrer"

rel属性にnoreferrerを付けることで、参照先に対して参照元のリンクを渡さないようにすることができます。(電話で例えると非通知電話みたいなものです。)

<a href="http://example.com" rel=“noreferrer" target="_blank">アンカー</a>

input type="color"

16進数表記のテキストフィールド。カラーピッカーのUIが用意されている。

<input type="color" value="#f6b73c">

meter要素

<p>オーブンの温度: <meter min="200" max="500"
  value="350">350 degrees</meter></p>

details, summary要素

CSSJavaScriptを使用せずにアコーディオンが実装できる。

<details>
    <summary>Details</summary>
    Something small enough to escape casual notice.
</details>

button form Attribute

送信ボタン(button submit)をform要素の外からでも利用できるようになる。

<form action="outout.php" method="post" id="form1">
  <input type="text" id="name" name="name">
</form>

<button type="submit" form="form1" value="Submit">Submit</button>

picture要素

srcset属性

CSS

flow-root

clearfixを利用しなくてもfloatを解除できる。overflow:hiddenも必要ありません。

div {
  display: flow-root;
}

all

すべてのプロパティを一括して指定する。

button {
  all: unset;
}

unset

プロパティをリセットし、親からの継承された場合は継承値、そうでなければ初期値を設定します。

<style>
.box{
color: green;
}
p {
color: red;
font-size: 20px;
}
.bar{
all: unset;
}
</style>
</head>
<body>
<div class="box">
<p>このテキストは赤です。</p>
<p>このテキストも赤です。</p>
<p class="bar">このテキストです。</p>
</div>
</body>

それ以外にも便利なものがたくさんあります


qiita.com

IE11のサポートが切れれば使用出来るHTMLやCSSの便利な機能

Windows 7のサポート期限が過ぎた事で、今後IE11のサポートを切るという選択が一層増えてきます。
HTML5やCSS3にはIE11がサポートしていない為、使えない便利な機能が多くあります。そういった便利な機能が今後は使えるようになって来るので、知っておきましょう。


HTML

rel=“noopener"

target="_blank"を使用するとリンク先を別のタブで開く事が出来ますが、セキュリティ上の脆弱性があり、リンク先のページで負荷の高い JavaScript が実行されていると、リンク元のページのパフォーマンスが低下するおそれがあります。それを避ける事が出来るのがこの「rel=“noopener"」属性です。

<a href="http://example.com" rel=“noopener" target="_blank">アンカー</a>

rel=“noreferrer"

rel属性にnoreferrerを付けることで、参照先に対して参照元のリンクを渡さないようにすることができます。(電話で例えると非通知電話みたいなものです。)

<a href="http://example.com" rel=“noreferrer" target="_blank">アンカー</a>

input type="color"

16進数表記のテキストフィールド。カラーピッカーのUIが用意されている。

<input type="color" value="#f6b73c">

meter要素

<p>オーブンの温度: <meter min="200" max="500"
  value="350">350 degrees</meter></p>

details, summary要素

CSSJavaScriptを使用せずにアコーディオンが実装できる。

<details>
    <summary>Details</summary>
    Something small enough to escape casual notice.
</details>

button form Attribute

送信ボタン(button submit)をform要素の外からでも利用できるようになる。

<form action="outout.php" method="post" id="form1">
  <input type="text" id="name" name="name">
</form>

<button type="submit" form="form1" value="Submit">Submit</button>

picture要素

srcset属性

CSS

flow-root

clearfixを利用しなくてもfloatを解除できる。overflow:hiddenも必要ありません。

div {
  display: flow-root;
}

all

すべてのプロパティを一括して指定する。

button {
  all: unset;
}

unset

プロパティをリセットし、親からの継承された場合は継承値、そうでなければ初期値を設定します。

<style>
.box{
color: green;
}
p {
color: red;
font-size: 20px;
}
.bar{
all: unset;
}
</style>
</head>
<body>
<div class="box">
<p>このテキストは赤です。</p>
<p>このテキストも赤です。</p>
<p class="bar">このテキストです。</p>
</div>
</body>

それ以外にも便利なものがたくさんあります


qiita.com

スクロールに合わせてアニメーションが付けられるjqueryプラグイン「AOS」

スクロールに合わせて「Fade」「Flip」「slide」「Zoom」の4種類のアニメーションを簡単に実装出来、「duration」などの細かい設定も行えるスクロールアニメーションのプラグインAOSを実装してみましょう。

michalsnik.github.io



f:id:yachin29:20200118113542j:plain


AOSの特徴

  • 「Fade」「Flip」「slide」「Zoom」の4種類のアニメーションが設定出来る
  • アニメーションの開始位置と方向(上から下、左から右など)が指定出来る
  • 多くのイージングが指定可能
  • 他にも「offset」「delay」「duration」「once」などのオプション設定が可能

まずは基本形を作成してみましょう。

index.html

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>AOSを実装してみる</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/aos.css">
</head>
<body>
<div class="container">
<header>
</header>

<div class="box-inner" data-aos="fade-up">
コンテンツ
</div><!--/.box-inner-->

<div class="box-inner" data-aos="flip-left">
コンテンツ
</div><!--/.box-inner-->

<div class="box-inner"  data-aos="slide-up">
コンテンツ
</div><!--/.box-inner-->


<div class="box-inner"  data-aos="zoom-in-down">
コンテンツ
</div><!--/.box-inner-->



</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="js/aos.js"></script>
<script>
 AOS.init();
</script>
</body>
</html>
オプションの設定

オプションの設定も個別の場合は各要素に各data-aos属性を指定、全て同じであればjsの方で一括で指定出来ます。

<div
    data-aos="fade-up"
    data-aos-delay="50"
    data-aos-duration="1000"
    data-aos-easing="ease-in-out"
    data-aos-once="false"
    data-aos-anchor-placement="top-center"
  >
  </div>
jsで一括指定の場合
<script>
 AOS.init({
once: true
 });
</script>


サンプル
https://codepen.io/yachin29/full/VweZYNz






さらにclip-pathプロパティを使って斜線の要素を作ってみましょう。

plusgraph-ca.jp


www.taguchi.co.jp


スクロールダウンボタン

スクロールボタンとはファーストビューで大きめのイメージやムービーなどを配置しているサイトで設置されていることが多い、次のコンテンツがあることを示したりスクロールするよう促すアイコンやボタンの事です。


https://www.nxworld.net/tips/css-scroll-down-button.html