Quantcast
Channel: Coding_team –ウェブラボ(株)スタッフブログ
Viewing all 87 articles
Browse latest View live

HTMLで組んだテーブルをエクスポートできるjQueryプラグイン「TableExport.js」

$
0
0

tecmemo1905
こんにちは、ウェブラボクリエイターズメモです。

 

今回はHTMLで組んだテーブルをエクスポートできるjQueryプラグイン「TableExport.js」を紹介したいと思います。
xlsx、csv、txtなどの形式にエクスポートできる非常に優れモノです。

 

まずは以下から一式ダウンロードしましょう。

 

→GitHub

 

GitHubの説明にも書いてありますが必要なライブラリがいくつかあり、「FileSaver.js」、xlsx形式でエクスポートしたい場合は「xlsx.core.js」もダウンロードします。
一応こちらもGitHubへのリンクを記載しときます。

 

→GitHub(FileSaver.js)
→GitHub(xlsx.core.js)

 

必要なものは揃いましたので実装していきます。

 

まずは任意の場所に各種ファイルを配置し、HTML内で読み込みます。
また、Bootstrap3にも対応しているのでそちらも同時に読み込みます。

 

■HTML<head>内

<link rel="stylesheet" href="css/tableexport.min.css">//tableexport用CSS、画像を読み込んでいるので任意の場所に設置
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css" integrity="sha384-PmY9l28YgO4JwMKbTvgaS7XNZJ30MK9FAZjjzXtlqyZCqBY6X6bXIkM++IkyinN+" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap-theme.min.css" integrity="sha384-jzngWsPS6op3fgRCDTESqrEJwRKck+CILhJVO5VvaAZCq8JYf8HsR/HPpBOOPZfR" crossorigin="anonymous">

 

■HTML</body>上

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="js/FileSaver.min.js"></script>
<script src="js/xlsx.core.min.js"></script>
<script src="js/tableexport.min.js"></script>
<script>
$(function(){
	$("#table").tableExport({
		formats: ["xlsx",  "csv",  "txt"], //エクスポートする形式
		bootstrap: true //Bootstrapを利用するかどうか
	});
});
</script>

 

HTMLのテーブルは以下のように書いてみました。

 

■HTMLテーブル部分

<table id="table">
	<thead>
		<tr>
			<th>見出し1</th>
			<th>見出し2</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>あ</td>
			<td>い</td>
		</tr>
		<tr>
			<td>う</td>
			<td>え</td>
		</tr>
		<tr>
			<td>お</td>
			<td>か</td>
		</tr>
	</tbody>
</table>

 

必要な記述は以上です。作成したDEMOは以下になります。

 

→DEMO

 

いかがでしょう、各種形式でエクスポートできるようになりましたね。
GitHubに利用できるオプションやメソッドが多数記載されてるので気になる方は見てみると良いでしょう。
jQueryプラグインで簡単に各種形式にエクスポートできる方法があるというのは知っていて損はないと思います。いずれ活躍する機会がありそうです。

 

では今回はこの辺で、以上ウェブラボクリエイターズメモでした。


スマートフォンのブラウザでもPDFを閲覧できる「PDF.js」

$
0
0

スマートフォンのブラウザでもPDFを閲覧できる「PDF.js」こんにちは、ウェブラボクリエイターズメモです。

 

皆さんはスマートフォン上でWebサイトからPDFファイルを閲覧するとき、操作が手間に感じたことはありませんか?

 

 

当たり前のように使用しているPDFですが、PDFの閲覧には専用のビューアが必要なため、一部の環境では閲覧に手間取ってしまうことがあります。

 

特にAndroidなどの一部のスマートフォンではビューアを起動して閲覧するために、一度PDFをダウンロードする必要があります。
サイズの大きいPDFをダウンロードする手間は、利用者のストレスになることも考えられますよね。

 

そこで今回は、ブラウザ上でPDFビューアを起動してスマートフォンでも快適にPDFを閲覧できるjsスクリプトをご紹介します。

 

DEMOはこちらです。
DEMOの動作はスマートフォンでも確認してみてください。

 

実装方法

1.jsのダウンロード

「PDF.js」配布サイトのダウンロードページにある「Stable」をクリックし、zipファイルをダウンロードします。

 

次にダウンロードした「pdfjs-(バージョン)-dist.zip※」を解凍します。

※(バージョン)の部分はダウンロードしたjsのバージョンが記載されております。

例)pdfjs-2.0.943-dist.zip

 

実装では解凍して生成される「pdfjs-(バージョン)-dist」を使用します。

そのまま使用しても問題ありませんが、「pdfjs-(バージョン)-dist」というディレクトリのみリネーム可能ですので、使いやすいディレクトリ名に変更しても構いません。
ここでは便宜上「pdfjs」ディレクトリとさせていただきます。

 

2.jsとPDFの設置

ここからjsとPDFを設置していきますが、必ずサーバ上にアップロードして設置する必要があります。PC上にあるファイルを直接開いても、Ajaxのセキュリティ制約によるエラーで表示されないのでご注意ください。

 

まず、「pdfjs」ディレクトリを任意の箇所に設置します。
今回は「js」ディレクトリ内に設置します。

 

次に、表示させたいPDFを任意の箇所に設置します。
今回は管理のしやすさを考慮し「pdf」ディレクトリ内に「document.pdf」設置します。

 

以上の通りに設置すると、下記のような構造になります。

 
root/
 ├ index.html
 ├ js/
 │ └ pdfjs/
 │   ├ build/
 │   ├ web/
 │   └ LICENSE
 └ pdf/
   └ document.pdf
 

3.HTMLにリンクを記述

ビューアを表示するためのページ「/js/pdfjs/web/viewer.html」へのリンクをHTMLに記述します。

 

■HTML

<p class="pdf"><a href="/js/pdfjs/web/viewer.html?file=●●●.pdf" target="_blank">クリックするとPDFが立ち上がります</a></p>

 

「viewer.html」でPDFを表示するには、URLパスの末尾に「?file=●●●.pdf」を記載する必要があります。

そして「●●●.pdf」の部分には表示させたいPDFへのリンクパスを記述します。

 

リンクパスの記述方法は下記の3種です。

 

相対パス ../../../pdf/document.pdf
絶対パス /pdf/document.pdf
https://〇〇〇.co.jp/pdf/document.pdf

 

※相対パスは「viewer.html」から参照します。
※絶対パスをURLで記述する場合は、自サーバ内のURLである必要があります。

 

絶対パスの「/pdf/document.pdf」で記述した場合、下記のように書くことができます。

 

■HTML

<p class="pdf"><a href="/js/pdfjs/web/viewer.html?file=/pdf/document.pdf" target="_blank">クリックするとPDFが立ち上がります</a></p>

 

実装は以上になります。

 

jsなどの読込は「viewer.html」内で完結しているため、必須の記述はありません。
aタグのリンクパスに記述を書き加えるだけで実装できてしまうので、とても便利ですね!

 

参考Webサイト

また、今回の実装において、下記の記事を参考にさせていただきました。
もう少し技術的な実装をしてみたい場合は、是非ご参照ください。

 

PDF.jsを設置する – Qiita
Android端末でPDFを表示するには「PDF.js」 – 株式会社ネディア │ネットワークの明日を創る。

【脱jQuery】.load()で別ページから共通パーツを読み込むのをネイティブに書き換え

$
0
0

d7d460796bf7d41a40f47c8cf29b708e_sこんにちは。なかなか梅雨が明けずバイク乗り、自転車乗りの方はロードバイクに跨がれない季節を迎えていますが、今回はroadではなく、loadです。ウェブラボクリエイターズメモです。

 

過去の記事で「jQueryで外部にあるHTMLを読み込む」について書きましたが、
今回はそれをもっと簡単に記述できるjQueryの「.load()」メソッドと、ネイティブJavascriptにこだわりを持つマニアの方々へ書き換えJavascriptを紹介します。

 

先にデモページをどうぞ
DEMO

 

  1. jQuery「.load()」メソッド
  2. 「.load()」をネイティブJavascriptに書き換え
  3. jQuery「.load()」メソッドでパーツのみを読み込み
  4. パーツのみ読み込みの書き換えJavascript

 

1.jQuery「.load()」メソッド

jQueryの.loadメソッドを使えば、他ファイルからHTMLパーツを指定した位置に挿入してくれます。ヘッダーやフッターなどの共通パーツを別のファイルにまとめることができるので管理が楽になります。

 

・以下、読み込んで表示する方を「読み込むHTML」、パーツのみ記述されている方を「読み込まれるHTML」と判別します。

 

img01

 

準備① 読み込まれるHTML「common.html」

<header>
	<ul>
		<li>menu1</li>
		<li>menu2</li>
		<li>menu3</li>
		<li>menu4</li>
		<li>menu5</li>
	</ul>
</header>

<footer>
	<ul>
		<li>fot1</li>
		<li>fot2</li>
		<li>fot3</li>
		<li>fot4</li>
		<li>fot5</li>
	</ul>
</footer>

 

準備② 読み込むHTML「index.html」

<html>
<head>
	<title>技術メモ</title>
</head>
<body>
	<div id="box"></div>
	
	<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
	<script>
		$(function(){
			$("#box").load("common.html");
		});
	</script>
</body>
</html>

 

そうするとこうなります。

読み込み後①

<html>
<head>
	<title>技術メモ</title>
</head>
<body>
	<div id="box">
		<header>
			<ul>
				<li>menu1</li>
				<li>menu2</li>
				<li>menu3</li>
				<li>menu4</li>
				<li>menu5</li>
			</ul>
		</header>


		<footer>
			<ul>
				<li>fot1</li>
				<li>fot2</li>
				<li>fot3</li>
				<li>fot4</li>
				<li>fot5</li>
			</ul>
		</footer>
	</div>
	
	<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
	<script>
		$(function(){
			$("#box").load("common.html");
		});
	</script>
</body>
</html>

 

読み込まれるHTMLには、headタグなどは不要。読み込みたいタグのみ記述しておけば大丈夫です。

 

2.「.load()」をネイティブJavascriptに書き換え

こんな感じです。

Javascript

<script>
	var xhr = new XMLHttpRequest(),
		method = "GET",
		url = "common.html";//読み込まれるHTMLを指定
	var box=document.getElementById("box");//読み込みたい位置を指定

	xhr.open(method, url, true);
	xhr.onreadystatechange = function () {
		if(xhr.readyState === 4 && xhr.status === 200) {
			var restxt=xhr.responseText;//String型で取得
			box.innerHTML=restxt;//完了
		}
	};
	xhr.send();
</script>

 

この書き換えは調べれば結構出てきます。よくあるajaxの例文って感じです。

 

3.「.load()」メソッドでパーツのみ読み込み

.loadで読み込まれるHTMLの特定要素のみ読み込みたい場合このように書きます。

jQuery

<script>
$(function(){
	$("#box").load("common.html header");
});
</script>

 

読み込み後②

<html>
<head>
	<title>技術メモ</title>
</head>
<body>
	<div id="box">
		<header>
			<ul>
				<li>menu1</li>
				<li>menu2</li>
				<li>menu3</li>
				<li>menu4</li>
				<li>menu5</li>
			</ul>
		</header>
	</div>

	<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
	<script>
		$(function(){
			$("#box").load("common.html header");
		});
	</script>
</body>
</html>

 

↓こんな書き方でもちゃんと動きます。セレクタみたいですね。

jQuery

$("#header").load("common.html header ul li:nth-child(1)");

 

読み込み後③

<html>
<head>
	<title>技術メモ</title>
</head>
<body>
	<div id="box">
		<header>
			<ul>
				<li>menu1</li>
			</ul>
		</header>
	</div>
	
	<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
	<script>
		$(function(){
			$("#box").load("common.html header ul li:nth-child(1)");
		});
	</script>
</body>
</html>

読み込まれるHTMLに、headerやfooterなどの共通パーツをいくつか記述しておけば管理がもっと楽になります。

 

4.書き換えJavascript

ではパーツのみ読み込む場合の書き換えはどうすればいいか?
こうしたら動きました。

Javascript

<script>
	var xhr = new XMLHttpRequest(),
		method = "GET",
		url = "common.html";//読み込まれるHTMLを指定
	var box=document.getElementById("box");//読み込みたい位置を指定

	xhr.responseType="document";//XMLとして扱いたいので一応記述
	xhr.open(method, url, true);
	xhr.onreadystatechange = function () {
		if(xhr.readyState === 4 && xhr.status === 200) {
			var restxt=xhr.responseXML;//重要
			var int=restxt.getElementsByTagName("header")[0].getElementsByTagName("ul")[0];//読み込まれるセレクタを指定
			box.innerHTML=int.outerHTML;//完了
		}
	};
	xhr.send();
</script>

 

ドキュメント丸ごと入れるのであればresponseTextでもいいですが、
取得したドキュメントからオブジェクトを取得するのであれば11行目のように、XML型で扱う必要があります。

 

また、13行目の
「box.innerHTML=int.outerHTML;」

「box.innerHTML=int.innerHTML;」
に変えれば、

 

例えば読み込み後①のように

<div id="box">
	<header>
		<h1>ウェブラボブログ</h1>
		<ul>
			<li>menu1</li>
			<li>menu2</li>
			<li>menu3</li>
			<li>menu4</li>
			<li>menu5</li>
		</ul>
	</header>
</div>

div#boxの中にheaderが入ってしまっているところも

 

読み込み後④(innerHTMLにして適宜調整)

<div id="box">
	<h1>ウェブラボブログ</h1>
	<ul>
		<li>menu1</li>
		<li>menu2</li>
		<li>menu3</li>
		<li>menu4</li>
		<li>menu5</li>
	</ul>
</div>

 

このように中身だけ挿入し、すっきり仕上げることもできるようになるので、適宜調整してみてください。
スタイルを既に書いている場合はセレクタが変わるかもしれないので注意が必要です。

 

再度、デモページです
DEMO

 

以上、.load()と、書き換えJavascriptでした。

テキストをポップアップで表示できるプラグイン「Featherlight.js」

$
0
0

ポップアップこんにちは、ウェブラボクリエイターズメモです。
今回は、テキストもポップアップで表示できるlightboxを実装するプラグイン「Featherlight.js」を紹介します。
画像だけではなく、テキストやリンクなど、幅広いコンテンツをポップアップとして表示したい場合に活躍してくれるプラグインです。

 

デモページはこちら。
→DEMO

 

今回はテキストをポップアップとして表示させる実装方法をご紹介いたします。

実装方法

実装方法について、こちらのサイトを参考にしました。
https://webkaru.net/jquery-plugin/featherlight/

 

1.プラグインをダウンロードする

Githubからダウンロードします。
https://noelboss.github.io/featherlight/

使用するファイルはsrcフォルダ内の以下になります。

 

【js】featherlight.js
【css】featherlight.css

 

初期設定から手を加える予定がない場合は、releaseフォルダの中に「.min」の付いたファイルがあるのでそちらをご利用ください。
※「.min」の付いたファイルとは、機能自体はそのままにファイルサイズを最小化したファイルを指します。

 

2.jquery本体、featherlight.js、featherlight.cssを読み込ませる

■HTML <head>タグ内

<link rel="stylesheet" href="css/featherlight.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="js/featherlight.js"></script>

※任意のパスに変更してください。

 

3.HTMLにリンクとポップアップさせたいコンテンツを記述する

■HTML <body>タグ内

・ポップアップにつなげるリンク部分

<a href="javascript:void(0)" data-featherlight="#inner">ポップアップリンク</a>

・ポップアップで表示する部分

<div class="featherlight-sample" id="inner">
<p>ここに表示したいコンテンツ(文章、テキスト、リンクなど)を記載してください。</p>
</div>

※href=”javascript:void(0)”とはリンクを無効化するための指定です。
他にもいろいろな指定方法があるので、環境やユーザーに合わせて変更してください。

 

4.「ポップアップで表示する部分」がクリック前に表示されないようCSSで指定する

■CSS内

.featherlight-sample {
	display: none;
}

※この記述がないと、ポップアップリンクを押す前のページにもポップアップのコンテンツが表示されてしまいまうのでご注意ください。

 
 

以上で実装が完了です。

 

class名やid名は任意の名前に変更しても動作するので、いくつかポップアップを使用したい場合はid名をinner01~などの連番にしても便利だと思います。

 

とても簡単に実装できるので、是非試してみてください。
以上、ウェブラボクリエイターズメモでした。

【jQuery】数字入力をアップダウンボタンで複数制御

$
0
0

tecmemo1909
こんにちは、ウェブラボクリエイターズメモです。

 

ここ最近、数字入力をアップダウンボタンで複数制御する機会があったので備忘録として残しておきたいと思います。

 

具体的な例を挙げてみると、ECサイトなどで商品の選択画面で

 

  • 商品の種類は複数選択可
  • 商品を全種類あわせて5個まで選択可能
  • 個数をアップダウンボタンで制御

といったものを想定しています。

 

これだけではイメージが湧きづらいと思うので、まずはDEMOをご覧ください。

 

→【jQuery】数字入力をアップダウンボタンで複数制御のDEMO

 

なんとなくイメージできたでしょうか?

 

細かい制御内容としては

 

  • 個別の商品の数が0以下にはならないように
  • 商品が種類あわせて6以上にならないように

といった処理をしています。

 

ソースは以下のように書いてみました。

 

■HTML

<h2>5個まで商品を選択可能</h2>
<table id="count">
	<tr>
		<th>林檎</th>
		<td><button class="minus">-</button><input type="text" name="input01" value="0" readonly class="number"><button class="plus">+</button>(個)</td>
	</tr>
	<tr>
		<th>蜜柑</th>
		<td><button class="minus">-</button><input type="text" name="input02" value="0" readonly class="number"><button class="plus">+</button>(個)</td>
	</tr>
	<tr>
		<th>桃</th>
		<td><button class="minus">-</button><input type="text" name="input03" value="0" readonly class="number"><button class="plus">+</button>(個)</td>
	</tr>
</table>

 

■Javascript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
	var number,total_numner;
	var max = 5; //合計最大数
	var $input = $('#count .number'); //カウントする箇所
	var $plus = $('#count .plus'); //アップボタン
	var $minus = $('#count .minus'); //ダウンボタン
	//合計カウント用関数
	function total() {
		total_numner = 0;
		$input.each(function(val) {
			val = Number($(this).val());
			total_numner += val;
		});
		return total_numner;
	}
	//ロード時
	$(window).on('load', function() {
		$input.each(function() {
			number = Number($(this).val());
			if (number == max) {
				$(this).next($plus).prop("disabled", true);
			} else if (number == 0) {
				$(this).prev($minus).prop("disabled", true);
			}
		});
		total();
		if (total_numner == max) {
			$plus.prop("disabled", true);
		} else {
			$plus.prop("disabled", false);
		}
	});
	//ダウンボタンクリック時
	$minus.on('click', function() {
		total();
		number = Number($(this).next($input).val());
		if (number > 0) {
			$(this).next($input).val(number - 1);
			if ((number - 1) == 0) {
			$(this).prop("disabled", true);
			}
			$(this).next().next($plus).prop("disabled", false);
		} else {
			$(this).prop("disabled", true);
		}
		total();
		if (total_numner < max) {
			$plus.prop("disabled", false);
		}
	});
	//アップボタンクリック時
	$plus.on('click', function() {
		number = Number($(this).prev($input).val());
		if (number < max) {
			$(this).prev($input).val(number + 1);
			if ((number + 1) == max) {
			$(this).prop("disabled", true);
			}
			$(this).prev().prev($minus).prop("disabled", false);
		} else {
			$(this).prop("disabled", true);
		}
		total();
		if (total_numner == max) {
			$plus.prop("disabled", true);
		} else {
			$plus.prop("disabled", false);
		}
	});
});
</script>

 

Javascriptはロード時、ダウンボタンを押したとき、アップボタンを押したときの3パターンの処理を書いています。
もっとキレイに書けると思いますが許してください。。。

 

作ってみた感想としてはもっと簡単に書けると思っていたのですが意外と面倒でしたね、結構長くなってしまいました。ポイントとしてはinputの値をやり取りする時はちゃんと数値データとして扱うことです。

 

→【jQuery】数字入力をアップダウンボタンで複数制御のDEMO

 

少しでも誰かの参考になれば幸いです。

 

以上、クリエイターズメモでした。

【slick】スライド枚数の異なるスライダー同士の連携

$
0
0

【slick】スライド枚数の異なるスライダー同士の連携こんにちは、ウェブラボクリエイターズメモです。

 

以前のクリエイターズメモでスライダーを実装できるjQueryプラグイン「slick」をご紹介しました。

 
 

このプラグインは用意されているオプションを設定するだけで実装も可能ですが、もう一歩踏み込んだカスタマイズをすれば、表現の幅がさらに拡がるでしょう。
そこで今回は、スライド枚数が異なるスライダー同士を連携させるカスタマイズをご紹介します。

 

まずはDEMOをご覧になり、操作感をご確認ください。
DEMO

メインのスライダーと、サムネイルのスライダーの動作を連携させたカスタマイズとなっております。
 

要件

今回作成したスライダーカスタマイズの要件は下記になります。

①メインは1枚、サムネイルは4枚表示させる

②メインが「4枚目から5枚目」と「5枚目から4枚目」に切り替わるとき、
サムネイルのスライダーも切り替える

③サムネイルをクリックすると、メインも対応したに切り替える

 

②の要件を満たすには、下記の各スライダーのスライド枚数は下記になります。

  • メインのスライダー:スライド枚数が8枚
  • サムネイルのスライダー:スライド枚数が2枚、各スライドに要素が4個ずつ

 

実装方法

1.プラグインのダウンロード

まず公式サイトからプラグインをダウンロードします。

「slick」公式サイト

 

基本的な設定については、以前のクリエイターズメモもご参照ください。

2.「slick」の基本設定

まず、スクリプトの読込、スライダー定義などの基本設定を行います。

■HTMLhead部分

<link rel="stylesheet" href="css/slick.css">
<link rel="stylesheet" href="css/slick-theme.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="js/slick.min.js"></script>
<script>
$(function() {
	//メインスライダーの定義
    var slider = ".slider_main";
    $(slider).slick({
        infinite: false,
        slidesToShow: 1,
        slidesToScroll: 1,
        accessibility: false,
        autoplay: false,
        touchMove: false
    });
	//サムネイルスライダーの定義
    var thumbslider = ".slider_thumb";
    $(thumbslider).slick({
        infinite: false,
        slidesToShow: 1,
        slidesToScroll: 1,
        accessibility: false,
        autoplay: false,
        touchMove: false
    });
});
</script>

■HTMLスライダー部分

<!-- メインのスライダーにしたい要素 -->
<div class="slider_main">
	<div class="slide_block bg01"><p><span>WEBLAB 01</span></p></div>
	<div class="slide_block bg02"><p><span>WEBLAB 02</span></p></div>
	<div class="slide_block bg03"><p><span>WEBLAB 03</span></p></div>
	<div class="slide_block bg04"><p><span>WEBLAB 04</span></p></div>
	<div class="slide_block bg05"><p><span>WEBLAB 05</span></p></div>
	<div class="slide_block bg06"><p><span>WEBLAB 06</span></p></div>
	<div class="slide_block bg07"><p><span>WEBLAB 07</span></p></div>
	<div class="slide_block bg08"><p><span>WEBLAB 08</span></p></div>
</div>

<!-- サムネイルのスライダーにしたい要素 -->
<div class="slider_thumb">
	<div class="slide clearfix">
		<div class="slide_block bg01"><p><span>01</span></p></div>
		<div class="slide_block bg02"><p><span>02</span></p></div>
		<div class="slide_block bg03"><p><span>03</span></p></div>
		<div class="slide_block bg04"><p><span>04</span></p></div>
	</div>
	<div class="slide clearfix">
		<div class="slide_block bg05"><p><span>05</span></p></div>
		<div class="slide_block bg06"><p><span>06</span></p></div>
		<div class="slide_block bg07"><p><span>07</span></p></div>
		<div class="slide_block bg08"><p><span>08</span></p></div>
	</div>
</div>

 

3.カスタマイズに必要な設定

下記を2.「slick」の基本設定の「■HTMLhead部分」より下に追記します。
■HTMLhead部分

<script>
$(function() {
	/* ==============
	変数の定義
	============== */
    var thumbnum = 0;		//メインスライダーのスライド番号
    var thumbslidenum = 0;	//サムネイルスライダーのスライド番号
    var thumbnailItem = ".slider_thumb .slide_block";	//サムネイルスライダーの要素を変数に格納

	/* ==============
	サムネイルスライダーのスライド1枚目にある、1個目の要素を選択状態にする
	============== */
    $(thumbslider).find(".slide:first-child .slide_block:first-child").addClass("thumbnail-current");

	/* ==============
	サムネイルスライダーのスライド内にある各要素に、スライド番号を与える
	============== */
    $(thumbnailItem).each(function(){
        var index = $(thumbnailItem).index(this);	//サムネイルスライダーのスライド内にある要素が、何番目にあるか取得する
        $(this).attr("data-index",index);	//取得した数字をスライド番号として与える
    });

	/* ==============
	サムネイルスライダーのスライド内にある要素をクリックしたとき、メインスライダーを切り替える
	============== */
    $(thumbnailItem).on('click',function(){
        var index = $(this).attr("data-index");	//サムネイルスライダーのスライド内にある要素のスライド番号を取得
        $(slider).slick("slickGoTo",index,false);  //取得した番号と同じ位置へ、メインスライダーを切り替える
    });

	/* ==============
	メインスライダーが切り替わるとき、サムネイルスライダーも切り替える
	============== */
    $(slider).on('beforeChange',function(event,slick,currentSlide,nextSlide){

		//選択状態切り替え
        $(thumbnailItem).each(function(){
          $(this).removeClass("thumbnail-current");	//選択状態を外す
        });
        $(thumbnailItem+'[data-index="'+nextSlide+'"]').addClass("thumbnail-current");	//選択状態にする

        //サムネイルスライダーの切り替え
        thumbslidenum = Math.floor( nextSlide / 4 );	//切り替えたスライドのスライド番号を取得し、「4※」で割る
        $(thumbslider).slick('slickGoTo', thumbslidenum, false);	//上記で出た番号と同じ位置へ、サムネイルスライダーを切り替える
    });
});
</script>

※下記の「4」とは、サムネイルスライダー内にある要素の数と等しいです。
3枚の時は「3」、5枚のときは「5」など、要件に合わせて変更してください。

thumbslidenum = Math.floor( nextSlide / 4 );

今回は「4」で割り、「Math.floor」で小数点以下を切り捨てることで、
1枚目~4枚目をまとめて1枚目のスライド、5枚目~8枚目をまとめて2枚目のスライドとして見立てています。

 

 

カスタマイズ方法は調べればいくつも出てきますが、コピー&ペーストするだけでなく
処理内容を理解することで、より細かい動作を実装できるようになります。
まずは求められている要件を整理し、必要な動作を細分化して実装してみましょう。

 

以上、クリエイターブログでした。

ブラウザごとの最小フォントサイズ一覧

$
0
0

68b1535ea2bf2185acb7b7a82d58834e_sこんにちは、ウェブラボクリエイターズメモです。

 

皆さんはブラウザによって、指定できる最小のフォントサイズがあるのをご存知でしょうか?

 

お恥ずかしながら今までどのブラウザも10pxだと思っていたのですが、
OSやブラウザごとで様々なんですね。

 

たまにお客さんから、「このエリアもっと小さくしてくれ~」とお願いされることもあるのですが
フォントが制約になってできない!なんてこともあります。

 

そんなことで今回は各ブラウザごとの最小フォントサイズについてまとめてみました。

 

検証方法・端末

検証方法

ブラウザ毎の最小フォントサイズは公表などされていません。
12px~1pxまでのテキストを用意し、目視で比較しました。

ブラウザシェア率の調査

検証するブラウザを選定する上で、どのブラウザがシェア率が高いのか下記サービスを利用し調査しました。

 

Market Share Reports|NetMarketShare

 

ニュースサイトにも良く引用されているほど有名なサービスです。
こちらにデータの収集方法についても明記されています。

【PC】用意した端末と検証したブラウザ

下記2つのOS端末を用意

・Windows10

・macOS High Sierra

 

PCでシェア率の高いブラウザ上位5種類は以下の通りです。
1.Google Chrome
2.Firefox
3.Internet Explorer
4.Edge
5.Safari

 

これらで全体のシェア率の90%以上を占めるため、この5種類で検証します。

【スマホ】用意した端末と検証したブラウザ

下記2つのOS端末を用意

・iOS13(iPhone7)

・Android7(Galaxy S6 edge)

 

スマホでシェア率の高いブラウザ上位2種類は以下の通りです。
1.Google Chrome
2.Safari

 

これらで全体のシェア率の90%以上を占めるため、この2種類で検証します。

 

結果

Windows10
ブラウザ バージョン 最小フォントサイズ
Google Chrome 78.0.3904.108(64 ビット) 10px
Fire Fox 70.0.1 (64 ビット) 1px
Edge 44.17763.831.0 1px
IE11 11.864.17763.0 1px
macOS High Sierra
Safari 13.0.3 1px
Google Chrome 78.0.3904.97(64 ビット) 10px
Fire Fox 70.0.1 (64 ビット) 1px
iOS13
Safari (iOS13.1.2) 1px
Google Chrome 77.0.3865.103 1px
Android 7
Google Chrome 78.0.3904.96 1px

 

Google ChromeのPC版のみ9px以下のフォントが10pxに置き換わるという結果でした。
意外にもその他は1pxまで表示できます。
普通のモニターでは7pxあたりから潰れてよく見えませんが。

まとめ

Google Chromeで10pxが最小だからその範囲でデザインする
というより、普通に読みにくいので最小10pxと決めてしまって正解なのかもしれません。

余談ですが、フォントサイズは10pxにして、transform: scale(0.5);とかで
最小フォントサイズを突破できます。読みにくいですが。

以上、ウェブラボクリエイターズメモでした。

 

ボタンごとに印刷エリアを変える

$
0
0

印刷こんにちは、ウェブラボクリエイターズメモです。

ウェブページを印刷する時に「この部分だけを印刷できたらいいのに」と思った事はありませんか?
@media printやprint.cssを用いれば簡単に印刷用のスタイルが設定できます。
しかしこれらはページ全体にかかるスタイルの為、”Aのボタンを押すと任意のAの範囲を、Bのボタンを押すと任意のBの範囲を印刷する”といったような個別指定はできません。

 

そんなときに使える印刷用のJSをご紹介していきたいと思います。
今回紹介する方法を用いると、非常に自由度の高い個別の印刷スタイル設定が可能になります。

 

まずはこちらのデモページでご覧ください。
DEMO

 

こちらの記事を参考にしました。
https://www.tam-tam.co.jp/tipsnote/javascript/post7977.html

 

必要なソースは以下になります。

 

■HTML

<div class="print-page">
    <p>この中にAボタンを押したときに印刷したい要素を入れます。</p>
    <p class="print-btn">Aボタン</p>
</div>

<div class="print-page">
    <p>この中にBボタンを押したときに印刷したい要素を入れます。</p>
    <p class="print-btn">Bボタン</p>
</div>

<p>全体を印刷するボタンも設置したいときは、ボタンのクラス名をprint-allにします。</p>
<p class="print-all">全体印刷ボタン</p>

※必ず.print-pageが.print-btnの親要素になるように記述してください

 

■CSS

.print-off {
    display: none;
}

@media print {
    //印刷時に適用したいスタイルをここに記載
    .print-btn,.print-all {
        display: none;
    }
}

その他は任意のスタイルをご指定下さい。

 

■JS

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){

    //個別印刷用
    $('.print-btn').on('click', function(){
        var printPage = $(this).closest('.print-page').html();
        $('body').append('<div id="print"></div>');
        $('#print').append(printPage);
        $('body > :not(#print)').addClass('print-off');
        window.print();
        $('#print').remove();
        $('.print-off').removeClass('print-off');
    });

    //一括印刷用
    $('.print-all').on('click', function(){
        window.print();
    });

});
</script>

 
これだけで仕組みの設定は完了です。
JSの仕組みをざっくりと説明すると、クリックしたボタンに一番近い「親要素」の.print-pageを取得し、それ以外の要素に「.print-off」というクラス名がつき、
.print-off { display: none; } によってそれらが消える、という仕組みです。

 

そのため、
①.print-offの親要素に.print-pageを配置すること
②.print-off { display: none; } の記述すること
の二つは忘れないように気を付けてください。

 

今回の実装に限らず、印刷時に気を付けて頂きたいことがあります。
DEMOページにも記載しましたが、backgroundで指定したもの(背景)は各ユーザーが印刷設定で「背景を印刷する」を選択をしないと表示されないことがあります。
全ブラウザに対応するには、「背景色は印刷されない」という前提で綺麗に表示したい部分は画像にするなどの工夫が必要です。

 

非常に簡単に実装出来るので、是非お試しください。
以上、クリエイターブログでした。


【CSS】ダークモードに対応する

$
0
0

tecmemo2001
こんにちは、ウェブラボクリエイターズメモです。

2019年9月にiOS13、Andoroid10がリリースされ、ダークモードが実装されました。
誰もが期待していた機能だと思います。夜間だと目に優しいし、消費電力も抑えられますね。

そこで今回はWebサイトのダークモードに対応について簡単に解説します。
実はCSSで簡単に対応できるので多少知識のある方ならすぐにできると思います。

実装方法

CSSのprefers-color-schemeというメディア特性を使用して検出します。
記述方法ですが、以下のようにダークモード時にのみ部分的にCSSを上書きしてあげます。

@media (prefers-color-scheme: dark) { //ダークモードの時
	body {
		background: #333;
		color: #fff;
	}
	h1,
	a:link,
	a:visited {
		color: #fff;
	}
}

これだけで対応することができます。

ブラウザの対応状況

気になるブラウザの対応状況は以下を参考にしてください。

ブラウザの対応状況(Can I use)
※「Can I use」というブラウザの対応状況を確認できるサービスを利用しています。CSSに限らずHTML5、SVG、JSなども機能ごとに確認できます。

現時点でEdge以外の主要なブラウザはほぼサポートされています。

ダークモードの設定方法

基本的にはOSの設定がダークモードになっていれば、ブラウザも自動で判別してくれます。
主要OSのダークモード切り替え方法を調べてみましたので以下をご覧ください。

■PC
・Windows10
[設定]→[個人用設定]→[色]→[既定のアプリモードを選択します]を黒に変更
・macOS(Mojave以降)
[システム環境設定]→[一般]→[外観モード]をダークに変更

■スマートフォン
・iOS(13~)
[設定]→[画面表示と明るさ]→[外観モード]をダークに変更
・Andoroid(10~)
[設定]→[ディスプレイ]→[ダークテーマ]をオンに変更
※こちらは実機が手元に無いため未検証

おわりに

今回作成したDEMOは以下になります。

DEMO

夜に訪問者が多いWebサイトなどは対応してあげるとユーザーに優しいですね。
背景色と文字色くらいでも対応してみる価値はあると思います。

以上、クリエイターズメモでした。

マウスカーソルについてくる「マウスストーカー」の作り方とサンプル色々

$
0
0

7c4e0d15d3fbca9ee30128ae4eb5059a_sこんにちは、ウェブラボクリエイターズメモです。
ネットサーフィンをしていると稀に見かける、マウスカーソルからキラキラが降り注いだり、マウスカーソルに何かがついてきたりするやつ。いわゆる「マウスストーカー」。
サイトのデザインにアイデンティティを持たせるだけでなく、マウスカーソルの見失い防止や、押せるボタンの強調などにも役立ちます!
マウスカーソルのカスタマイズやマウスストーカーの作り方を4種類ご紹介します。
 

  1. マウスカーソルの変更
  2. 遅れてついてくるマウスストーカー
  3. 速く動かすとデカくなるマウスストーカー
  4. キラキラ降りそそぐマウスストーカー

 

1.マウスカーソルの変更

マウスカーソルを、矢印ではなく画像など別の要素に置き換えます。
DEMOをご覧ください。aタグホバー時に強調したりすることもできます。
 
DEMO
 

必要なHTML

<body>
	<!--body直下にカーソルとなる要素を配置-->
	<p id="cursor"><img src="_img/img_mark_nikukyu.png" alt="肉球"></p>

	<!--↓contents↓-->
</body>

カーソルの代わりとなる要素をbody直下に配置してください。
 

必要なCSS

/*マウスカーソルの変更*/
body{
	position: relative;
	cursor: none;/*本物のカーソルを非表示に*/
}

body a:hover{
	cursor: none;/*aタグホバーのカーソルも非表示に*/
}

#cursor{
	position: fixed;
	width: 40px;
	height: 40px;
	margin: -20px 0 0 -20px;/*半分引いてカーソル先端に画像中心位置が来るように*/
	z-index: 2;/*一番手前に来るように*/
	pointer-events: none;/*【重要】マウス直下に常に画像があるので、全てをクリックできなくなる。noneにして対応*/
	transition: transform 0.1s;
	opacity: 0;/*開いた瞬間非表示*/
}

#cursor.active{
	transform: scale(1.8);
}

4行目でページ全体でのcursorを非表示にします。
ここで、カーソル位置の最前面に常に要素があるということは、どこもクリックできなくなってしまうということなので、17行目でpointer-events:noneを指定する必要があります。
後述するjQueryで、aタグホバー時にactiveクラスを付与します。23行目にその際カーソル要素を拡大する記述をしています。
 

必要なjQuery

$(function(){
	
	//マウスカーソルの変更
	//=================================
	//カーソル要素
	var cursor=$("#cursor");
	//mousemoveイベントでカーソル要素を移動
	$(document).on("mousemove",function(e){
		//マウス位置を取得するプロパティ
		var x=e.pageX;
		var y=e.pageY;
		//カーソル要素のcssを書き換え。重複しなければtransformを使うのがおすすめ
		cursor.css({
			"opacity":"1",
			"top":y+"px",
			"left":x+"px"
		});
	});
	
	//aタグホバー
	$("a").on({
		"mouseenter": function() {
			//activeクラス付与
			cursor.addClass("active");
		},
		"mouseleave": function() {
			cursor.removeClass("active");
		}
	});
});

10、11行目でカーソルの座標位置を取得し、
13~17行目でカーソル要素のcssに代入しています。
今回はaタグホバーでカーソル要素にtransformを使用したかったので、ここではtopとleftを書き換えています。
 

2.遅れてついてくるマウスストーカー

マウスストーカーに遅れてついてくるストーカー要素を追加します。
DEMO
 

必要なHTML

<body>
	<!--body直下にカーソルとなる要素を配置-->
	<p id="cursor"><img src="_img/img_mark_nikukyu.png" alt="肉球"></p>
	<!--body直下にマウスストーカーとなる要素を配置-->
	<div id="stalker"></div>
	<!--↓contents↓-->
</body>

マウスカーソルとなる要素と別に、ストーカーとなる要素をbody直下に配置します。
 

必要なCSS

/*ちょっと遅れてくるマウスストーカー*/
body{
	position: relative;
	cursor: none;/*本物のカーソルを非表示に*/
}

body a:hover{
	cursor: none;/*aタグホバーのカーソルも非表示に*/
}

/*カーソル*/
#cursor{
	position: fixed;
	width: 40px;
	height: 40px;
	margin: -20px 0 0 -20px;/*半分引いてカーソル先端に画像中心位置が来るように*/
	z-index: 3;/*一番手前に来るように*/
	pointer-events: none;/*【重要】マウス直下に常に画像があるので、全てをクリックできなくなる。noneにして対応*/
	transition: transform 0.1s;
	opacity: 0;/*開いた瞬間非表示*/
}

#cursor.active{
	transform: scale(1.8);
}

/*ストーカー要素*/
#stalker{
	position: fixed;
	width: 60px;
	height: 60px;
	z-index: 2;/*一番手前に来るように*/
	pointer-events: none;/*【重要】マウス直下に常に画像があるので、全てをクリックできなくなる。noneにして対応*/
	background: url(../_img/img_pet_cat_oddeye_black.png) 50% 50% no-repeat;
	background-size: contain;
	opacity: 0;/*開いた瞬間非表示*/
}

#stalker.active{
	background: url(../_img/img_pet_cat_oddeye.png) 50% 50% no-repeat;
	background-size: contain;
}

カーソル要素については1と同じポイントに注意してください。
33行目で、ストーカー要素についてもクリック無効化しています。
 

必要なjQuery

$(function(){
	
	//ちょっと遅れてくるマウスストーカー
	//=================================
	//カーソル要素
	var cursor=$("#cursor");
	//ちょっと遅れてくる要素
	var stalker=$("#stalker");
	
	//mousemoveイベントでカーソル要素を移動
	$(document).on("mousemove",function(e){
		//マウス位置を取得するプロパティ
		var x=e.pageX;
		var y=e.pageY;
		
		//カーソル要素のcssを書き換え。重複しなければtransformを使うのがおすすめ
		cursor.css({
			"opacity":"1",
			"top":y+"px",
			"left":x+"px"
		});
		
		//ちょっと遅れて要素のcssを書き換え
		setTimeout(function(){
			stalker.css({
				"opacity":"1",
				"transform":"translate("+x+"px,"+y+"px)"
			});
		},100);
	});
	
	//aタグホバー
	$("a").on({
		"mouseenter": function() {
			//activeクラス付与
			cursor.addClass("active");
			stalker.addClass("active");
		},
		"mouseleave": function() {
			cursor.removeClass("active");
			stalker.removeClass("active");
			
		}
	});
});

24~29行目でsetTimeoutを使い、マウスを動かした0.1秒後にストーカー要素のcssを書き換えています。
 

3.速く動かすとデカくなるマウスストーカー

単位あたりの移動距離を計算し、cssの値として使用します。
今回はtransform scaleの値とすることにより速いとデカくなります。ネタ枠で作りましたが、他にもカラーコードを変更したり、意外と応用できそうです。
DEMO
 

必要なHTML

<body>
	<!--body直下にカーソルとなる要素を配置-->
	<p id="cursor"><img src="_img/img_mark_nikukyu.png" alt="肉球"></p>

	<!--↓contents↓-->
</body>

1と同様です。
 

必要なCSS

/*速いとデカくなるマウスストーカー*/
body{
	position: relative;
	cursor: none;/*本物のカーソルを非表示に*/
}

body a:hover{
	cursor: none;/*aタグホバーのカーソルも非表示に*/
}

#cursor{
	position: fixed;
	width: 60px;
	height: 60px;
	margin: -30px 0 0 -30px;/*半分引いてカーソル先端に画像中心位置が来るように*/
	z-index: 2;/*一番手前に来るように*/
	pointer-events: none;/*【重要】マウス直下に常に画像があるので、全てをクリックできなくなる。noneにして対応*/
	background: url(../_img/img_pet_cat_oddeye_black.png) 50% 50% no-repeat;
	background-size: contain;
	opacity: 0;/*開いた瞬間非表示*/
}

#cursor.active{
	background: url(../_img/img_mark_nikukyu.png) 50% 50% no-repeat;
	background-size: contain;
}

1と同様です。

 

必要なjQuery

$(function(){
	
	//速く動かすとデカくなるマウスストーカー
	//=================================
	//カーソル要素
	var cursor=$("#cursor");
	//xy座標
	var x=0;
	var y=0;
	//拡大倍率
	var scale=1;
	
	//mousemoveイベントでカーソル要素を移動
	$(document).on("mousemove",function(e){
		//移動後のxy座標
		var newX=e.pageX;
		var newY=e.pageY;
		//移動量に対する拡大倍率
		var newScale=(1+Math.abs((newX+newY)-(x+y))*0.05);
		//滑らかにするため、移動前の拡大倍率との平均を取る
		scale=(newScale+scale)/2;
		//ここでマウス位置を更新
		x=newX;
		y=newY;
		
		//カーソル要素のcssを書き換え。
		cursor.css({
			"opacity":"1",
			"transform":"translate("+x+"px,"+y+"px) scale("+scale+")"
		});
	});
	
	//aタグホバーで何かしたいとき
	$("a").on({
		"mouseenter": function() {
			//activeクラス付与
			cursor.addClass("active");
		},
		"mouseleave": function() {
			cursor.removeClass("active");
			
		}
	});
});

少し複雑です。
移動前の座標を残したいので、座標用の変数x、yはグローバルに宣言します。
16、17行目で移動後の座標位置をnewX、newYとし、
19行目で移動前との差を出します。その際に、カーソルを左から右へ移動した場合はいいのですが、右から左へ移動した場合に差がマイナスになってしまうため、Math.absで差の絶対値としています。
一通り欲しい値を出し終わったら、23、24行目でグローバル変数を更新しています。
 

4.キラキラ降りそそぐマウスストーカー

DEMO
本当はもっと小さくてキラキラした要素を降り注がせるのですが、DEMOを見ていただいたら分かる通りここまで猫で来てしまったので、ここでは中くらいの肉球を降り注がせます。
 

必要なHTML

<body>
	<!--↓contents↓-->
</body>

jQueryで要素を出力するため、特に必要ありません。

 

必要なCSS

/*キラキラ降りそそぐマウスストーカー*/
.shine{
	position: fixed;
	top: -15px;
	left: -15px;
	width: 30px;
	height: 30px;
	background: url(../_img/img_mark_nikukyu.png) 50% 50% no-repeat;
	background-size: contain;
	z-index: 2;
	animation: shine 2s ease-out 0s forwards;
}

@keyframes shine{
	0%{
		transform: translateY(0) rotate(-5deg);
		opacity: 0;
	}
	5%{
		opacity: 1;
	}
	80%{
		opacity: 1;
	}
	100%{
		transform: translateY(50px) rotate(5deg);
		opacity: 0;
	}
}

shineというクラス名の要素を出力していきます。
クラス名は適宜変更していただいて構いませんが、たくさん出るのでidは使わないでくださいね。また、降りそそぐ動きはCSSのkeyframesで定義しています。
ここでは2秒かけて少し回転しながら50px下に移動、opacityでふわっと感を演出しています。

 

必要なjQuery

$(function(){
	
	//キラキラ降りそそぐマウスストーカー
	//=================================
	var body=$("body");
	//キラキラ頻度調整用フラッグ
	var flag=true;
	
	//mousemoveイベントでカーソル要素を移動
	$(document).on("mousemove",function(e){
		if(flag){
			//マウス位置を取得するプロパティ
			var x=e.pageX;
			var y=e.pageY;

			//キラキラ要素生成
			var shine=$("<p>").attr("class","shine");
			shine.css({
				"top":y+"px",
				"left":x+"px"
			});
			//body直後に配置
			body.prepend(shine);
			//2秒後に削除
			setTimeout(function(){
				shine.remove();
			},2000);
			
			//一旦新しい要素生成をストップ
			flag=false;
			//0.1s後に解除
			setTimeout(function(){
				flag=true;
			},100);
		}
	});
});

17行目で新しくpタグの要素を生成し、
18行目で初期のtop、left値を設定し、
23行目でbodyタグ直後に挿入しています。
25行目で2秒後にpタグ要素を削除しています。cssのanimationに合わせて時間を調整してください。
また、それだけだと要素が出すぎてしまうので、
30~34行目で要素を出した瞬間から0.1秒間は要素を生成しないようにしています。

 

おわりに

どうでしたか?
がむしゃらに使っては鬱陶しくなってしまうだけですが、うまく取り入れてサイトにアクセントを加えてみてください!
以上、ウェブラボクリエイターズメモでした。

【CSS】蛍光マーカー風の装飾と、グラデーションの仕組み

$
0
0

マーカーこんにちは、ウェブラボクリエイターズメモです。
「文章を目立たせる方法」といえば、どんな方法が思いつくでしょうか?紙媒体だと「マーカー」が浮かぶ人が多いのではないでしょうか。
今回はそんなマーカーをWebサイト上でも表現する方法をご紹介したいと思います。それに伴い「CSSでグラデーションを表示する仕組み」についても詳しくご紹介したいと思います。

 

マーカーをCSSで表示する方法

簡潔に言うと、文字の下に背景色をつけて表示します。
backgroundにそのまま色を指定するとべた塗りになりますが、今回はより忠実にマーカーっぽくする為にグラデーションを使用して文字下部のみに色を付けます。

 

実装サンプル

今回やりたい事は、以下のような表示です。

この部分にラインマーカーを引きます。

実装方法

■HTML

<p><span class="line">この部分</span>にラインマーカーを引きます。</p>

■CSS

.line{
   background:-moz-linear-gradient(transparent 60%, #fecde6 60%);
   background:-webkit-linear-gradient(transparent 60%, #fecde6 60%);
   background:linear-gradient(transparent 60%, #fecde6 60%);
}

 

 

以上で実装できます。あとは任意の色、太さに変更してください。
色を変更する場合は参考コードの「#fecde6」の部分を、
太さを変更する場合は二か所の「60%」の部分を任意の指定に変更してください。

※太さを変更する場合は必ず二か所とも同じ数字にしてください

※transparentは透明色(初期値)です。

※線の太さは0%に近づくほど太く、100%に近づくほど狭くなります。

※ほとんどのブラウザに対応していますが、詳しい対応ブラウザについてはこちらでご確認ください。

 

マーカー実装についての説明は以上になります。
非常に簡単に実装できるので、是非気軽に試してみてください。

 

 

CSSでグラデーションを表示する仕組み

上記でグラデーション(linear-gradient)を使用してマーカーを表現する方法をご紹介させていただきましたが、そもそもなぜグラデーションでマーカーの様な表示(文字下部のみに背景色がついている状態)になるのか、疑問に思う方もいらっしゃるかと思います。
実際は文字下部のみに色がついているのではなく、上から60%まで透明色(transparent)、60%から下まではピンクで塗りつぶされた背景になっています。
つまり二色にわかれた背景が敷かれています。

 

では具体的になぜグラデーションが二色にわかれるのか、まずはグラデーションCSSの基本的な仕組みについてご説明し、その後に二色にわかれる仕組みについてご説明します。

 

先程のソースを用いてご説明します。

background:linear-gradient(transparent 60%, #fecde6 60%)

 

 

1.初期値について

上記の記述では省略されていますが、グラデーションが進む方向の初期値は180deg、つまり「上から下」に変化していくように指定されています。矢印で表すならば「↓」この方向です。
なので実際は

background:linear-gradient(180deg,transparent 60%, #fecde6 60%)

このような指定をしている状態になります。

 

 

2.開始位置の指定

background:linear-gradient(transparent 60%, #fecde6 60%)

上記赤字部分のパーセンテージは「グラデーションの開始位置」を指定しています。
具体的にどういう意味なのか、一般的なグラデーションを使ってご説明させて頂きます。

 

 

background:linear-gradient(#34baff 0%, #fe94f4 100%)

この指定だけを見ると、「100%はグラデーションの終了位置」だと思ってしまう方も多いかと思います。
下の図1をご覧下さい。

 

図1

図1:グラデーションの開始位置について

 

図1の②は100%(開始)から100%(最後)まで、ピンクからピンクへのグラデーションをしているイメージです。
グラデーションしたいけど場所がないという状態です。

 

 

 

0%、100%については指定していなければ直近の色が引き継がれます。下の図2をご覧ください。

background:linear-gradient(#34baff 30%, #fe94f4 70%)

 

図2

図2:0%・100%が未指定の場合

 

図2に記載している通り、0%または100%が未指定の場合は直近の色が引き継がれます。
直近の色と同じ色が引き継がれた結果、0%から直近の指定位置(30%)、100%から直近の指定位置(70%)は同じ色から同じ色へのグラデーション、つまりべた塗りの状態になります。

 

ここまではグラデーションの基本的な仕組みです。
ここからは、なぜグラデーションでマーカーを表現出来るのかについてご説明させて頂きます。

 

 

3.二色にわかれたグラデーションの仕組み

background:linear-gradient(transparent 60%, #fecde6 60%)

上記の指定で二色にわかれる仕組みは、
実は「2.開始位置の指定」で説明したものを応用しているだけです。
下の図3をご覧ください。

 

図3

図3:二色にわかれる仕組み

 

図3の①は60%(開始位置)から60%(次の指定位置)までのため、グラデーションする余地が無い状態です。
図3の②は60%(開始位置)から100%(次の指定がないので最後)までグラデーション出来るが、次の指定がないため100%地点にも同じピンク色が引き継がれ、塗りつぶしになっている状態です。

 

 

以上になります。
是非グラデーションCSSを駆使して、マーカーや色々なデザインをCSSで表現してみてください。

以上、クリエイターブログでした。

WordPressで画像をアップロードする方法

$
0
0

WordPressでは、記事の本文中に画像などのメディアファイルを挿入できます。
WordPress5.0より、これまでのエディタが廃止され、「Gutenberg」という新しいエディタに変更されました。
管理画面の見た目が変わったことで、操作に戸惑うユーザも増えているかと思われます。

 

2020年3月現在、最新のWordPressをインストールすると、必ずこのエディタを使用することになります。
そこで今回は、WordPressで画像をアップロードする方法をWordPress5.0以降とWordPress4.9以前でそれぞれ解説致します。

 

また、サイト職人ブログでは、以前「画像の最適な表示方法」についてご紹介いたしました。
当記事ではAltテキスト(代替テキスト)の入力方法についても解説しますが、これらの用語がわからないという方は、始めにご参照ください。

 

・前回記事:
画像の最適な表示方法とは?
https://www.site-shokunin.com/blog/html/4550.html

 

バージョンの確認方法

まずは、WordPressのバージョンを確認し、どちらのバージョンのエディタが使用されているか確認しましょう。
WordPressの管理画面より「ダッシュボード」にアクセスします。
以下の図にある赤枠部分に、ご使用になられているWordPressのバージョンが表示されます。
バージョンの確認方法 ここでは「WordPress 5.3.2」と書かれておりますので、WordPress5.0以降であることが分かります。
ただしWordPress5.0以降の管理画面でも、「Classic Editor」などの旧エディタを適用してGutenbergを無効にするプラグインを入れている場合は、この限りではありません。

 

記事・ページ編集画面での画像のアップロード方法(WordPress5.0以降)

Gutenbergは要素を固まりで分ける仕様となっており、固まりをブロックと呼びます。画像の挿入には、まず画像ブロックを追加する必要があります。

1.+ボタン(ブロックの追加)をクリック

エディタ内にある「+」ボタンをクリックします。
1. +ボタン(ブロックの追加)をクリック

 

2.「画像」をクリック

どのブロック追加するかのウィンドウが開きますので、「一般ブロック」の中にある「画像」を選択します。
2. 「画像」をクリック

 

3.画像のアップロード方法を選択

画像ブロックが追加されると、下記のような表示になります。
3. 画像のアップロード方法を選択

 

これから画像をアップロードする場合は、「アップロード」ボタンをクリックします。ファイルを選択するウィンドウが表示されますので、アップロードしたい画像を選択してください。

 

しかし、挿入したい画像がすでにWordPressにアップされており、メディアライブラリに追加されている場合は、「メディアライブラリ」をクリックします。
WordPressにアップロードされている画像の一覧ウィンドウが表示されますので、挿入したい画像を選択してください。

 

画像の選択を行うと、下記のような表示になります。
画像の選択 以上で画像の挿入は完了です。

 

また応用として、画像をエディタ内に直接ドラッグ&ドロップすることで、アップロードと挿入を自動で行えます。そのため、特定のフォルダからアップロード対象となる画像を直接挿入できます。

 

ここからは、アップロードした画像の設定を任意で行っていきます。

4.Altの入力

エディタ右側の「画像設定」にはAltテキスト(代替テキスト)を入力する箇所があります。意味を持つ画像であるなら、その意図を表す代替テキストを必ず入力しましょう。

 

Altテキストを入力しておけば、Googleに対して画像の意図を伝え、画像検索で良い影響を受けることができます。
Altの入力

 

5. キャプション設定

画像のすぐ下に「キャプションを入力」と表示されているテキストボックスがあります。ここにテキストを打ち込むと、画像のキャプションを入れることができます。キャプションとは、画像の補足説明のことです。もし、何も入力しなかった場合は、何も表示されません。
キャプション設定

 

6.画像サイズの設定

Altテキストの設定の下には、画像の表示サイズ設定を変更できる項目があります。
・画像サイズ
WordPressで登録されている画像サイズを選択できます。
・画像の寸法
実際に数値を打ち込んで、サイズを調整できます。
画像サイズの設定

 

7.画像のリンク設定

画像ブロックをクリックすると、左上に様々なボタンが表示されます。
「リンクの挿入」をクリックすると、リンク設定のウィンドウが表示されます。

  • URLの入力
  • アップロードされているメディアファイルの選択
  • 添付ファイルのページを設定

上記のいずれかの方法でリンクを設定できます。
7.	画像のリンク設定

 

8.回り込み設定

ここまでの操作は画像をただ挿入しただけですが、画像と文章を横並びにしたいというケースもあるでしょう。その場合は、画像ブロックをクリックし、表示されるボタンのうち「ブロックタイプまたはスタイルを変更」をクリックします。
ウィンドウが表示されますので「変換」の中にある「メディアと文章」をクリックします。
8.	回り込み設定 クリックすると、下記のような表示に変わります。
コンテンツ部分にテキストなどを任意に入力してください。
配置関係を逆転させたい場合は、下記の赤枠にあります「メディアを右に表示」をクリックします。
メディアを右に表示

 

記事・ページ編集画面での画像のアップロード方法(WordPress4.9以前)

1.「メディアを追加」をクリック

画像を挿入したい箇所にカーソルを置き、「メディアを追加」をクリックします。
1.	「メディアを追加」をクリック

 

2.画像をアップロードまたは挿入したい画像を選択

「メディアを追加」ウィンドウが表示されますので、ドラッグ&ドロップで画像をアップロードするか、アップロードされている画像を選択します。
画像をアップロードまたは挿入したい画像を選択

 

3.必要な情報を入力する

Gutenbergと異なり、Altテキスト(代替テキスト)、キャプション、リンク先、画像サイズは「メディアを追加」画面の右側で設定が可能です。
設定が完了しましたら、右下にあります「投稿に挿入」をクリックします。
必要な情報を入力する 以下のように画像が挿入されていることが確認されたら、画像の挿入は完了です。
200219_01_15

 

まとめ

WordPressのバージョンに応じた画像のアップロード方法を解説いたしました。
エディタが新しくなって、どう操作すればよいかわからないと思われるかもしれませんが、使い方を理解することで作業が効率的になるでしょう。

遅延読み込みの方法を見直してみる

$
0
0

tecmemo2004
こんにちは、ウェブラボクリエイターズメモです。

過去に「jQueryを利用して画像の遅延読み込みを行う」という記事を書きましたが、今一度遅延読み込みの方法を見直してみたいと思います。

この方法では、スクロールするたびに位置を計算して画像の表示を判断しており、正直あまり良い処理とは言えないものでした。

ですが、今のトレンドはIntersection Observer API(交差監視 API)を利用した方法でGoogleも推奨しており、主要なブラウザではほぼサポートされています。

Google developers
対応ブラウザ(Can I use)

Intersection Observer APIとは、その名の通り要素同士の交点などを検出することができるAPIです。ウィンドウと画像の交点を検出できるので遅延読み込みに役立ちます。

今回は、Google developersでも紹介されているライブラリ「lozad.js」を使用して画像の遅延読み込みのDEMOを作成します。

「lozad.js」配布元

では実装する際、記述が必要な箇所の説明をしていきたいと思います。

■HTML

<img class="lozad" src="img/dummy.jpg" data-src="img/001.jpg" alt="Image">


遅延読み込みしたいimgタグにクラス「lozad」を付与し、src属性にダミー画像などを、data-src属性に表示したい画像を指定します。

■script部分

<script src="js/lozad.js"></script>
<script>
const observer = lozad();
observer.observe();
</script>


配布元からダウンロードしてきたライブラリを読み込み、2行ほど記述を書くだけです。

作成したDEMOはこちら

ブラウザのコンソールでスクロールしながらimgタグを見てみると要素がウィンドウに入ったときに画像が表示されているのが確認できると思います。

単純な画像の遅延読み込みならこれだけで実装でるので初心者でも簡単にできますね。

配布元で様々な使い方も説明しているので興味がある方は見てみると役立つ機会は多いと思います。もちろんimgタグだけでなくvideoタグやiframeタグにも使えますのでご安心を。。。

もうjQueryなどを利用した方法は必要有りませんね。今後はIntersection Observer APIを活用していきましょう!

以上、クリエイターズメモでした。

slickのフェードがIEでちらつくバグの対処方法

$
0
0

3149537_s
こんにちは、ウェブラボクリエイターズメモです。
先日、表題の件について解消することができたのでメモします。
実際にIE(Internet Explorer11)でのバグを再現したのでまずはDEMOをどうぞ。(2020年5月時点)

DEMO

IEで見てみると、上のスライダーが切り替わる瞬間にちらついていませんか?
必ずしも発生するとは限りませんが、このバグはslickスライダーの高さを指定してはみ出た部分をoverflow:hiddenで隠し、かつfadeモードにした際に発生することがあります。

失敗例

バグが発生するのは以下のような入れ子の時です。画像を背景で指定していても同様です。

HTML

<ul id="slider01">
	<li><img src="_img/slider01.jpg"></li>
	<li><img src="_img/slider02.jpg"></li>
	<li><img src="_img/slider03.jpg"></li>
</ul>

CSS

#slider01{
	height: 300px;
	margin: 0 auto;
	overflow: hidden;
}

ulの部分にheightとoverflowを指定しています。
お悩みの方、このような指定になってないでしょうか?

解消例

以下のような入れ子にし、CSSの指定を変えることで解消できました。画像を背景で指定する場合はspanタグに指定してください。

HTML

<ul id="slider02">
	<li><span><img src="_img/slider01.jpg"></span></li>
	<li><span><img src="_img/slider02.jpg"></span></li>
	<li><span><img src="_img/slider03.jpg"></span></li>
</ul>

CSS

#slider02{
	margin: 0 auto;
}

#slider02 li{
	height: 300px;
	overflow: hidden;
}

liの部分にheightとoverflowを指定しています。

いかがでしたか?
バグなのであくまで解消例ですが、もし改修可能であれば改善の余地ありだと思います。ぜひお試しください。
以上、クリエイターズメモでした。

【CSS】記述量と表示速度を意識したCSSの書き方

$
0
0

CSSこんにちは、ウェブラボクリエイターズメモです。
CSSを記述する時、意識せずに書いてしまうとどんどん記述量が増えていきますよね。
記述が多く複雑になるほど、メンテナンス時の手間が増え、ページの読み込み速度も落ちかねません。

そこで、CSSを記述する時に初心者が意識すべき点をまとめました。
初心者の方は是非ご覧ください。

基本的なCSS記述量の減らし方

まず最初に抑えておくべき基本のポイントをご紹介します。

1.記述内容が一部重複している場合

h2 {
 font-size:1.8rem;
 font-color: #333;
 font-weight: bold;
}

h2.recruit {
 font-size:1.8rem;
 font-color: #999;
 font-weight: bold;
}

改善例
上記の書き方だと「h2.recruit」に対してfont-sizeとfont-weightが重複して記述されているので、重複部分を削除します。

h2 {
 font-size:1.8rem;
 font-color: #333;
 font-weight: bold;
}

h2.recruit {
 font-color: #999;
}

変更部分のみを記述することで、記述量が減るだけでなく
共通部分(上記だとfont-sizeなど)の修正時も複数個所の変更をしなくて済むため、メンテナンスが楽になります。
 

2.別々のセレクタで全く同じ記述をしている場合

.recruit_block {
 background: #fff;
 border: 1px solid #000;
}

.access_block {
 background: #fff;
 border: 1px solid #000;
}

改善例
上記のように同じプロパティを別々に指定している場合、
セレクタを「,」で並列させ、一つにまとめます。

.recruit_block, .access_block {
 background: #fff;
 border: 1px solid #000;
}

こうすることで、1と同じく記述量を減らし、メンテナンスを楽に行う事が出来ます。
 

3.頻繁に使用するスタイルの場合

.tit_products, .tit_company, .tit_access {
 font-size:1.6rem;
 font-color: #444;
}

改善例
2の応用です。頻出するスタイルはそれぞれにclassを振って並列にするのではなく、
HTMLを編集し、全てtit_commonという共通のクラスを振り直します。

.tit_common {
 font-size:1.6rem;
 font-color: #444;
}

共通のclassを振ることで、.tit_commonというクラスをつけるだけで同じスタイルが適用されるようになります。
そのため新たに追加する時にCSSを編集する必要が無く、効率的に組むことができます。
 

4.ショートハンドの利用

.block {
  margin-top: 10px;
  margin-right: 20px;
  margin-left: 30px;
  margin-bottom: 40px;
}

改善例
CSSのプロパティには、「ショートハンド」という一行でまとめて指定できる書き方があります。
上記のように別々にしているものにショートハンドを利用すると、下記のようになります。

.block {
  margin: 10px 20px 30px 40px;
}

一つだけだと些細な違いでも、重なると大きな差になります。
別々に書かなければいけない理由がないのであれば、ショートハンドを活用していきましょう。

このような基本の積み重ねで、今後のメンテナンスやページの読み込み速度が変わっていきます。
 

表示速度を速めるセレクタの書き方

CSSセレクタの照合は、右から左へと行われます。
意外と知らなかった!という方も多くいらっしゃるのではないでしょうか。

例えば、

.wrapper .main .block_a

というセレクタの書き方をしている場合、
 

  1. .block_aを探す
  2. その親要素が.mainのものだけに絞る
  3. その親要素が.wrapperのものだけに絞る
  4. スタイルが適用される

 
という順番に読み込まれています。
そのため、セレクタを書けば書くほど無駄な工程が増え、読み込みが遅くなっていきます。
シンプルかつ必要最低限のセレクタを記述するようにしましょう。
 
改善例

.wrapper .main .block .inner .itemlists ul li {
 marin-bottom: 10px;
}

と指定している場合、

.itemlists li {
 marin-bottom: 10px;
}

上記のように必要なものだけを記述します。
理由のない親セレクタや子セレクタ(ul > liなど直下の要素を対象とするもの)の記述が多く重なっていくと、表示速度が落ちます。
一つ変更したところで微細な変化しかありませんが、積もり積もると大きな差になっていきます。
あえて書く理由がない場合は必要最低限に絞っていきましょう。
 
今まで意識して組んだことなかった!という方は、是非意識してみてください。
以上、クリエイターブログでした。


CSSの「mix-blend-mode」を使ってみる

$
0
0

tecmemo2105

こんにちは、ウェブラボクリエイターズメモです。

 

今回は、CSSだけでPhotoshopなどで画像を加工したように見せることができるプロパティ「mix-blend-mode」を紹介したいと思います。

 

まず、このプロパティでどんなことができるか見てもらう為にDEMOを作成しましたのでそちらをご覧ください。

DEMO

 

「mix-blend-mode」を使うとブレンドモード(2つのレイヤーをどのように合成するか)が表現でき、本来Photoshopなどで事前に加工していたものをCSSだけで実現することができます。

また、DEMOで書いてある「乗算」、「スクリーン」などはブレンドモードの種類となります。

 

各種ブレンドモードの詳細については深く触れませんが、以下に参考文献としてWikipediaのリンクを載せときます。

※全てのブレンドモードが使用できるわけではありません。

ブレンドモード(Wikipedia)

 

ではソースの説明をしていきますが、HTML・CSSともにクラスやプロパティの値を変えているだけなので「乗算」部分のみ抜粋します。

 

■HTML

<div class="mix multiply"><!-- 乗算 -->
	<img src="img/001.jpg" width="600" height="400" alt="">
</div>

 

■CSS

.mix {
	max-width: 600px;
	position: relative;
}

.mix:before {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: #1e2676;
	opacity: 0.3;
	mix-blend-mode: normal;
}

.multiply:before {//乗算
	mix-blend-mode: multiply;
}

 

画像の上に単色半透明の疑似要素を乗せ、それを合成することで表現する方法を取りました。

他のブレンドモードごとにCSSを用意してあるのでクラスを変えるだけでブレンドモードが変わるようにしています。

 

DEMOのリンクを以下にもう一度載せときます。

DEMO

 

今回は単色半透明の疑似要素で試しましたが、もちろん画像同士や画像+テキストも合成することが可能です。

表現の幅がすごく広がりますね!

 

対応ブラウザですがいつものごとく「Can I use」を参考にさせて頂くと、IEを除くブラウザではほぼサポートされていることが確認できます。

Can I use

 

一応IE11で確認してみましたが、すべて要素が単純に上に乗った「mix-blend-mode: normal;」の状態になります。

ですが非常に便利なので、IEなんて気にしない!という人は是非どんどん使ってみてはどうでしょう。

きっと工数削減などに役立つはずです。

 

以上、クリエイターズメモでした。

The post CSSの「mix-blend-mode」を使ってみる first appeared on ウェブラボ(株)スタッフブログ.

【CSS】Flexboxのspace-betweenで3カラム以上でもfleat:leftと同じような左詰めのレイアウトにする方法

$
0
0

catchこんにちはウェブラボクリエイターズメモです。

この記事のアイキャッチの様なカラムレイアウトを組む際、従来ではfloatを用いたりdisplay:inline-blockを用いて横並びにすることが多かったと思います。

 

しかし最近では多くのブラウザでFlexboxへの対応が進み、Flexboxを使えばmatchHeight(横並びの高さを揃える)処理が必要なく、順番の入れ替えも自由でレスポンシブ対応にも便利なため、筆者もガンガン用いています。

 

そしてこのようなカラムレイアウトを組む際、子要素に左右のマージンを指定するとはみ出してしまうため、
例えば3カラムであればli:nth-child(3n){margin-right:0;}のようにして右端に来る子要素のマージンを消してあげる処理が必要です。

 

一方でFlexboxにはjustify-content: space-between;という便利なプロパティがあります。
これを駆使し、nth-childの処理を使わない方法をご紹介します。

2カラムの場合

col2_01

2カラムの場合は以下のようなコードだけでレイアウトを作れます。

/*親要素*/
ul {
	display: flex; /*親要素にflexを指定*/
	flex-wrap: wrap; /*折返しを可に*/
	justify-content: space-between; /*今回のテーマのspace-between*/
	width: 650px;
}

/*子要素*/
li {
	width: 300px;
	margin: 0 0 50px;
}

 

3カラムの場合

3カラムの場合、space-betweenを使うと子要素が5個とかの場合こんな風になってしまいます。

col3_2_01

ここで、今回ご紹介する処理がこちら。

/*親要素*/
ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	width: 1000px;
}

/*子要素*/
li {
	width: 300px;
	margin: 0 0 50px;
}

/*↓追加↓*/
/*親要素の最後に擬似要素を追加*/
ul::after {
	content: "";
	display: block;
	width: 300px;
}
/*↑追加↑*/

すると、このように最後に架空の要素が挿入され、これが何個のときでもうまいこといきます。

col3_3_03

 

4カラムの場合

col4_01

4カラムの場合、3カラムに加えて疑似要素の::beforeも追加してあげます。
ただし、beforeだと先頭に入ってしまうので、ここでFlexboxの子要素に指定できる「order」を使って一番うしろに持ってきます。

/*親要素*/
ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	width: 1000px;
}

/*子要素*/
li {
	width: 230px;
	margin: 0 0 50px;
}

/*親要素の最後に擬似要素を追加*/
ul::before,
ul::after {
	content: "";
	display: block;
	width: 230px;
}
/*beforeを一番後ろに持ってくる*/
ul::before {
	order: 1;
}

これまた、何個のときでもうまいこといきます。
col4_2_01

 

5カラム以上の場合・・・

この方法では理論上、nカラムのときn-2個の疑似要素が必要になるため、これ以上は疑似要素だけではできません。
おとなしく、nth-child(5n)を使いましょう。
(その際justify-contentは指定無しにしてあげましょう)

 

結局のところ、CSSの文字数はnth-childのほうが少ない気もしますが、この方法が良かった!という場面があることを願います。
以上、クリエイターズメモでした。

The post 【CSS】Flexboxのspace-betweenで3カラム以上でもfleat:leftと同じような左詰めのレイアウトにする方法 first appeared on ウェブラボ(株)スタッフブログ.

ダイヤルで回して値を調整できるプラグイン「jQuery Knob」

$
0
0

tecmemo2107

こんにちは、ウェブラボクリエイターズメモです。

 

今回は、ダイヤルで回して値を調整できるプラグイン「jQuery Knob」を紹介したいと思います。

 

早速ですが、このプラグインで何ができるか見てもらうためにいくつかDEMOを用意しましたのでそちらをご確認ください。

DEMO

 

このような綺麗なダイヤルの入力欄が作れます!

公式の解説など見れば説明は不要かもしれませんが、簡単にしていきます。

jQuery Knob

 

■HTML

<input type="text" value="75" class="dial" data-fgColor="#ff0000"><!-- data-fgColorで色変更 -->
<input type="text" value="35" class="dial" data-fgColor="#00ff00" data-angleArc="270"><!-- data-angleArcで角度 -->
<input type="text" value="75" class="dial" data-fgColor="#0000ff" data-readOnly="true"><!-- data-readOnlyで値の変更不可 -->

 

後々script部分で指定するためクラスdialを付与し、オプションなどはdata属性で追加で記述します。

 

■HTML script部分

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="js/jquery.knob.js"></script>
<script>
    $(function() {
        $(".dial").knob();
    });
</script>

script部分はinput要素に対応したクラスを指定するだけです。

 

たったこれだけ、CSSなども不要です!もちろんスマホにも対応しています!!

 

公式に沢山のオプションやDEMOもあるのでそちらも合わせてご参考ください。

jQuery Knob

 

対応ブラウザは公式にIE8~と書いてあるので特に気にする必要も無さそうです。

フォームなどにももちろん使えますが、読み取り専用にすれば円グラフ表現などもできそうなので幅広い用途に使えそうですね。

是非試してみてはどうでしょう。

 

以上、クリエイターズメモでした。

The post ダイヤルで回して値を調整できるプラグイン「jQuery Knob」 first appeared on ウェブラボ(株)スタッフブログ.

CSSの「:target」擬似クラスでアンカーリンクの位置を強調する

$
0
0

2108こんにちはウェブラボクリエイターズメモです。

文量の多いウェブページなどにおいて、目次から特定位置に飛ばす構成よく見ますよね。
ただ、ちょっと複雑なページだとイマイチどこに飛んだのかわかりにくいこともあります。

そんなお悩みを持つあなた!
アンカーリンクから飛ばした先を強調して見せることができるCSS擬似クラス「:target」について解説します。

 

:target擬似クラスとは

MDN Web Docsには、以下のように書かれています。

:target は CSS の擬似クラスは、 URL のフラグメントに一致する id を持つ固有の要素 (対象要素) を表します。

引用:target – CSS: カスケーディングスタイルシート | MDN(https://developer.mozilla.org/ja/docs/Web/CSS/:target)

 

要は、

http://www.example.com/index.html#section2

というURLのときに

<section id=”section2″>Example</section>

という要素にスタイルが当たるということです。

使用例

以下の例において、目次をクリックした際に該当するsectionの背景を赤くしてみます。

HTML

<!--目次-->
<ul>
	<li><a href="#section1">セクション1</a></li>
	<li><a href="#section2">セクション2</a></li>
	<li><a href="#section3">セクション3</a></li>
</ul>
<!--//目次-->

<!--コンテンツ-->
<section id="section1">
	Example1
</section>

<section id="section2">
	Example2
</section>

<section id="section3">
	Example3
</section>
<!--//コンテンツ-->

CSS

section:target {
	background: red;
}

書き方自体は簡単です。
あとは見せ方に合わせて応用していきましょう。

JSのスムーススクロールでも使用する方法

:target擬似クラスとは」でも記しましたが「:target」擬似クラスはURLの末尾「~.html#section2」に一致する要素に適用されます。
一方で、滑らかにアンカー移動できるjQueryのスムーススクロールはURLの末尾にハッシュを追加しないので、この擬似クラスは適用されません。
そこで、JSの記述を工夫してスムーススクロールでも同じようなことをしてみましょう。

 

スムーススクロールの記述例

$('a[href^=#]').click(function(){
	var speed = 500;
	var href= $(this).attr("href");
	var target = $(href == "#" || href == "" ? 'html' : href);
	var position = target.offset().top;
	$("html, body").animate({scrollTop:position}, speed, "swing");
	return false;
});

上記のような場合、下記の記述を追加します。

$('a[href^=#]').click(function(){		
	var speed = 500;
	var href= $(this).attr("href");
	var target = $(href == "#" || href == "" ? 'html' : href);
	var position = target.offset().top;
	
	//既にクラスがついてるものを削除
	$('.anchor_target').removeClass("anchor_target");
	//飛び先にクラスを付与
	target.addClass("anchor_target");
	
	$("html, body").animate({scrollTop:position}, speed, "swing");
	return false;
});

飛び先に「.anchor_target」クラスを追加し、スタイルを適用します。
よってCSSを下記のようにします。

section:target,
section.anchor_target {
	background: red;
}

「.anchor_target」の部分は適宜変えてOKですが、他とは被らないクラスにしてください。

 

これを応用し、見やすいサイトを目指してみてください。
以上、ウェブラボクリエイターズメモでした!

The post CSSの「:target」擬似クラスでアンカーリンクの位置を強調する first appeared on ウェブラボ(株)スタッフブログ.

ページの読み込みを高速化できるCSSプロパティ「content-visibility」

$
0
0

tecmemo2109

こんにちは、ウェブラボクリエイターズメモです。

 

今回は、ページの読み込みを高速化できるCSSプロパティ「content-visibility」を紹介したいと思います。

 

まず初めに、このプロパティは全てのブラウザに対応しているわけでは無いので、以下の参考サイトをご確認ください。

 

Can I use

 

ご覧の通り、現状ではFirefoxやiOS Safariなど主要ブラウザでも対応していないものもいくつかあります。

ですが今後対応されていくと思うので、それを踏まえた上で簡単に紹介したいと思います。

 

まずこのプロパティで具体的に何ができると言うと、コンテンツのレンダリングを制御することができます。

 

レンダリングとは、Webページに含まれるHTML・CSS・各種ファイルなどのデータを元に処理してブラウザ内で描画すること。

 

ブラウザの表示領域に入るまでコンテンツのレンダリングをストップ出来たりするので、最初に表示されるまでの処理を減らしたりすることができます!

 

詳しい説明など気になる方は以下に開発者向けの文書があるのでそちらをご覧くださいませ。

 

MDN Web Docs

 

使い方はとても簡単で以下のようにCSSで制御したい部分を指定するだけです。

 

CSS記述例

section {
	content-visibility: auto;
	contain-intrinsic-size: 0 500px; //表示表示領域の大体の大きさ
}

 

これだけで実装できます。

 

あとは実際にテストしてみて実感出来るかって所ですね。

簡単なDEMOページで作って試してみましたが、やっぱり重いページ用意しなきゃ実感できませんでした・・・。

今度弊社のサイトとかで試してみようかと思います。

 

色々調べてみた感じだとレスポンシブでPCとスマホでコンテンツを切り替える時などに使うと良いみたいですね。

 

今後もこういった細かい高速化できる技術が増えていくと思うので非常に楽しみです。

 

以上、クリエイターズメモでした。

The post ページの読み込みを高速化できるCSSプロパティ「content-visibility」 first appeared on ウェブラボ(株)スタッフブログ.

Viewing all 87 articles
Browse latest View live