Quantcast
Viewing all 8576 articles
Browse latest View live

TECH CAMP入校

4月6日、ついにTECH CAMPへ入校。
それから本日までに教室へ通えたのは2日目のみ。新型コロナの影響で在宅オンライン学習となっています。コミュニケーションはSlackとZOOMで行われます。でも数あるスクールの中からわざわざ教室へ通うスタイルを選んだのに残念‥。

【大まかなここまでの学習内容】
・Webアプリケーションとは
・環境構築(準備)
・HTML&CSS
・Ruby
・Ruby on Rails

約1週間で叩き込まれます。ここまでを基礎カリキュラムとして、そこから中間試験、模試、本試験を実施。本試験に合格し応用カリキュラムへと進みます。まず中間試験が難しすぎて自信が打ち砕かれました。そこから試験に向けて猛勉強ですね。特にRailsの問題が出来なさすぎて課題となりました。

そして本試験。個人的には合格点に達したと思ったのですが、Rubyの動作が確認出来なかったとして配点無しに‥いや確認しなかった自分が悪いんですが、結構この中ではRubyは出来ているほうなので、苦手なRailsやCSSの問題に時間を割こうと思ってこのような結果に。これは今後のプログラミングをやっていく上での教訓とします。
「動作確認はしっかりと」

再試験ではきちんと動きを確かめたので合格しましたが、やはりRailsがほぼダメだったので他の部分で点数を稼いだ状態です。この不安を残したまま応用カリキュラムへと進みます。まるで車庫入れとかガソリンの入れ方とかが曖昧な状態で車の免許を取った時のあの感じですね‥。


【HTML/CSS】混乱しないためのnth-childまとめ

この記事は

nth-childを使おうとすると毎回????ってなるからまとめたぞ。
よく使うものも含めてぱっと見でわかるようにしたから、tableの指定とかで発狂しそうになる人はたまに見て心を落ち着かせて欲しい。

nth-child一覧(よく使うやつ)

※数字とかはサンプルで入れてるだけ

nth-childの種類説明
:only-child要素が一つしかない時
:first-child最初の要素
:last-child最後の要素
:nth-child(odd)奇数要素
:nth-child(even)偶数要素
:nth-child(2)最初から2番目の要素
:nth-last-child(2)最後から2番目の要素
:nth-child(3n)3の倍数ごと(0,3,6,9…)の要素
:nth-child(3n+1)3の倍数+1ごと(1,4,7,10…)の要素
:nth-child(-n+3)最初から3番目までの要素
:nth-child(n+3)最初から3番目以降の要素

only-child,first-child,last-childは特に混乱することなく使えると思うので、
:nth-child(odd)から一個ずつ見ていく。

実際に使ってみる

nth-child(odd)

奇数なので、1,3,5…という風に一個飛ばしで指定される。


See the Pen
:nth-child(odd)
by mame_hashbill (@mayu-mameuda)
on CodePen.


:nth-child(even)

偶数なので、2,4,6…という風に一個飛ばしで指定される。


See the Pen
:nth-child(even)
by mame_hashbill (@mayu-mameuda)
on CodePen.


:nth-child(2)

今回は括弧内の数字を2としているけど、もちろん3でも4でもOK。
今回は2なので、最初から数えて2行目に色がつく。


See the Pen
:nth-child(2)
by mame_hashbill (@mayu-mameuda)
on CodePen.


:nth-last-child(2)

今回は括弧内の数字を2としているけど、もちろん3でも4でもOK。
今回は2なので、最後から数えて2行目に色がつく。


See the Pen
:nth-last-child(2)
by mame_hashbill (@mayu-mameuda)
on CodePen.


:nth-child(3n)

今回は括弧内の数字を3としているけど、もちろん4でも5でもOK。
今回は3の倍数3,6,9…という風に色がついてくぞ。

See the Pen :nth-child(3n) by mame_hashbill (@mayu-mameuda) on CodePen.

:nth-child(3n+1)

今回は括弧内の数字を3としているけど、もちろん4でも5でもOK。
今回は3の倍数なので、3×0+1=1,3×1+1=4,3×2+1=7…という風に色がついていくぞ。

ちなみに:nth-child(3n+2)とすると、
3×0+2=2,3×1+2=5,3×2+2=8…という風に色がついていく。ぱっと見わからんけどまぁ計算すればわかるな。


See the Pen
:nth-child(3n+1)
by mame_hashbill (@mayu-mameuda)
on CodePen.


:nth-child(-n+3)

今回は括弧内の数字を+3としているけど、もちろん+4でも+5でもOK。
今回は最初から3番目までの要素が指定される。
でも私はなんで-nなのかよくわからん。なんで・・・?教えて詳しいひと・・・・
-0+3=3,-1+3=2,-2+3=1となるけど、なんでここで計算が止まるんだろうか。。

See the Pen WNQwzYj by mame_hashbill (@mayu-mameuda) on CodePen.

:nth-child(n+3)

今回は括弧内の数字を+3としているけど、もちろん+4でも+5でもOK。
今回は最後から3番目以降の要素が全て指定される。

これは0+3=3,1+3=4…という風に増えていって、行がなくなったら計算が止まる仕組みなのかね。


See the Pen
:nth-child(n+3)
by mame_hashbill (@mayu-mameuda)
on CodePen.


おわりに

childがゲシュタルト崩壊してきた

初心者によるプログラミング学習ログ 293日目

100日チャレンジの293日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
293日目は、

ローカル開発環境でCSSが反映されない原因(キャッシュが残っていた)

まだまだPCについての知識が乏しいので、当たり前な人からしたら当たり前なのかもしれませんが、自戒の念も込めて記しておこうかと...

chrome内でキャッシュが残っていた

ローカル開発環境で開発中、CSSを何度設定しても、反映されず。。。
viewファイルの読み込みが間違っているのか、classの名前に齟齬があるのかとコードを見返すもなかなか判明せず。反映されないCSSを設定したままそのまま1日が経過し、何となく開発中のページを開いてみると、いつの間にやらCSSが反映されていました。かと思いきや、再度CSSを解除しても反映されず。
調べてみると、chrome内でキャッシュが残っているので、設定が反映されないとのこと。

対処方法

①問題があるページでデベロッパーツールを開く。

②リロードボタンで右クリックして、『キャッシュの削除とハード再読み込み』をクリック。

これで無事反映されるようになりました。何とも簡単な。。。

(初学者向け)LP作成時の型・作法など

はじめに

この記事は、ランディングページ(LP)を手早く作成するために、どのLPにも使える共通部分や、書く際の作法をまとめたものです。
復習と備忘も兼ねて、本記事を執筆いたしました。
本記事記載のソースコードを起点に、コンテンツの追加、CSSの変更、Bootstrap等のフレームワーク実装を行っていただき、各々が目指すデザインのページへと進展させていただければ幸いです。

前提条件として以下の点にご留意願います。

  • ここでいうLPは縦長のレイアウトのページを指す
  • HTML及びCSSのみ使用のシンプルなLP(JSやその他の言語・フレームワークは使用しない)
  • メニューはシンプルな横並びのもの
  • レスポンシブに関するCSSは省略

LPの意味に関しては下記記事が参考になります。
ランディングページ(LP)とは何か?初心者にもわかりやすく解説!

出来上がり見本

本記事記載のソースコードを用いると下記画像のようになります。
見やすくするため、下記2点が本記事のソースコードと異なります。

  • hogeセクションを2回記述
  • style.cssの各種カラープロパティの値を以下の値に指定
    • body及びa要素の文字色:#222
    • hogeセクションの背景色:#ddd
    • footer要素の背景色:#aaa
    • footer要素の文字色:white

Image may be NSFW.
Clik here to view.
LP_default_sample.png

ディレクトリ構造

基本構造(一例)。

作業ディレクトリ
css/
  ├ reset.css
  └ style.css
img/
  ├ top-bg.png
  ├ XXXX.png
  └  ・・・
favicon.ico
index.html

各ファイルのソースコード

画像ファイルとfavicon以外のindex.html, reset.css, style.cssの型となるソースコードを以下に示す。

index.htmlの型

作法的なもの

  • bodyタグ内の基本構造はheadersection(トップタイトル用)section(*n)footer
  • ヘッダー、各セクション、フッター内に.containerクラスを持ったdiv要素を作り、その中にコンテンツを記述。
  • トップセクション以外の各セクションに.sectionクラスを付けて、共通のレイアウトを適用。
index.html
<!DOCTYPE html><htmllang="ja"dir="ltr"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1"><linkrel="icon"href="favicon.ico"><title>Document Title</title><metaname="description"content="メタディスクリプション(ページの概要・要約)"><linkrel="stylesheet"href="./css/reset.css"><linkrel="stylesheet"href="./css/style.css"></head><body><header><divclass="container clear"><divclass="header-left"><h1class="header-title">ヘッダーに表示するタイトル</h1></div><divclass="header-right"><ulclass="header-nav"><liclass="header-nav-item"><ahref="#">メニュー名</a></li><liclass="header-nav-item"><ahref="#">メニュー名</a></li><!-- メニューの数だけ li を作成 --></ul></div></div></header><sectionclass="top"><divclass="container"><pclass="top-title">トップタイトル
    </p><pclass="top-subtitle">トップサブタイトル
    </p></div></section><!-- hogeセクション(必要な数だけ繰り返し記述) --><sectionclass="hoge section"><divclass="container"><h2class="section-title">Hoge</h2><!-- ここに hogeセクションの内容を記述 --></div></section><!-- /hogeセクション --><footer><divclass="container"><pclass="copyright">Copyright(C) Hogehoge All Rights Reserved.</p></div></footer></body></html>

リセットCSS

各ブラウザは、デフォルトで適用するCSSを持っているため、ブラウザによって見え方が若干異なることがある。
以下のリセットCSSを書くことにより、ブラウザ毎の表示の差異をなくす。

reset.css
*{-webkit-box-sizing:border-box;box-sizing:border-box;}html,body,h1,h2,h3,h4,h5,h6,ul,ol,dl,li,dt,dd,p,div,span,img,a,table,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-size:100%;vertical-align:baseline;}header,footer,nav,section,article,aside,figure,figcaption{display:block;}body{line-height:1;}ol,ul{list-style:none;list-style-type:none;}

style.cssの型

style.css
/*==============================
ページ全体の共通部分
==============================*/body{color:#222;font-family:Verdana,Geneva,Tahoma,sans-serif;line-height:1.5;}img{width:100%;height:auto;}a{text-decoration:none;color:#222;}a:hover{opacity:0.7;}.container{width:90%;max-width:980px;margin:auto;}.clear::after{content:"";clear:both;display:block;}/*==============================
header
==============================*/header{padding:20px0;}.header-left{float:left;}.header-title{font-weight:bold;font-size:24px;}.header-right{float:right;}.header-nav{}.header-nav-item{float:left;margin-left:50px;}.header-nav-itema{font-size:15px;font-weight:600;line-height:36px;}/*==============================
top
==============================*/.top{background-image:url(../img/top-bg.png);-webkit-background-size:cover;background-size:cover;padding:80px0;}.top-title{font-size:48px;font-weight:bold;text-align:center;margin-bottom:20px;}.top-subtitle{font-size:18px;text-align:center;}/*==============================
section (各セクション共通部分)
==============================*/.section{padding:60px0;}.section-title{font-size:32px;font-weight:bold;text-align:center;margin-bottom:40px;}/*==============================
hoge (各セクション名)
==============================*/.hoge{background-color:#ddd;}/*==============================
footer
==============================*/footer{background-color:#aaa;color:white;padding:20px0;}.copyright{font-size:12px;}

float 及び Flexboxについて (おまけ)

Flexboxが主流になってきているが、両方の性質を理解して使い分けをできるようにしたい。
以下はfloat及びFlexboxを使用する際の留意事項をまとめた。

float

floatさせたい要素のcssにfloat: left;もしくはfloat: right;を記述。
floatさせる要素の親要素に.clearクラスを付加することで、要素の浮遊によるレイアウトの崩れを解消。

Flexbox

Flexboxを適用させるには、親要素に.hoge-wrapperクラスを付け、
そのクラスに対してdisplay: flex;及びその他Flexbox関連のCSSを記述。

HTML/CSSの学習記録

HTML/CSSについて学習した内容を書いていきます。

HTMLとタグ

HTMLには様々なタグがあり、タグそれぞれに意味や使い道が決まっている。ニュアンスによって同じコンテンツの表示にしても使うタグも変わってくる。

タグの具体例

h1

<h1>これはh1です</h1>

見出し(heading)に使うタグでh1~h6まである


div

<div>これはdivタグです</div>

汎用タグの1つでコードをまとめるのに使う


p

<p>これはpタグです</p>

文章を書くのに使う


a

<a href="https://qiita.com">これはaタグです</a>

リンクを貼るのに使うタグ


ul,li

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>

リストを作るのに使うタグ


img

<img src="***">

画像を貼るのに使うタグ


CSSでよく使うプロパティ

コメント/**/
文字の色color: blue;
文字のサイズfont-size: 14px;
文字の太さfont-weight: normal;
文字の並びtext-align: center;
背景色background-color: red;
高さheight: 100px;
width: 150px;
ボーダー(枠線)の設定border: solid 5px gray;
ボーダー外側の設定margin: 0 10px 5px 15px;
ボーダー内側の設定padding: 0 10px;
リストの黒点を消すlist-style-type: none;
横に並べるdisplay: flex;
並べる方向を決めるflex-direction: row;

【JavaFX】CSSの書き方【随時更新】

JavaFXの情報が少なすぎるので必要だと思った事はどんどん書いていきます。

CSSの適用方法

sceneに対してgetStylesheets().add(String s)すればOK。コードのどの時点ででも適用可能(要検証)。
ここはいろんなところに書いてあるので参考にすべし。

Main.java
css = "application.css";
scene.getStylesheets().add(this.getClass().getResource(css).toExternalForm());

各NodeのCSSプロパティ

何も指定しないときのデフォルトのcssはmodena.css from JDK10.0.1が適用されている(2020年4月現在)。このファイルでページ内検索かけて装飾したいNodeのプロパティを見ながらいじればとりあえず何とかなるのではないだろうか。
原則として各プロパティはほとんど-fx-というprefixがついているが、自分でカスタムして使う際にこのprefixを入れなければならないという決まりはない。
JavaFX CSSリファレンス・ガイドも参照するとわかりやすい。

配色の固定

デザイン論になるのだが、1つのページ、アプリケーションのレイアウトに使う色数は特別な理由でもない限り多くても4色までに抑えておくのが吉。でも毎回

application.css
*{-fx-text-fill:rgb(231,243,234);-fx-background-color:linear-gradient(rgb(104,132,193),rgb(58,61,126));}.label{-fx-background-color:rgb(104,132,193);}::

などと同じ色をrgb指定するのは数字を覚えるのもコピペするのも面倒なので、最初に一括で指定してしまうと良い。

application.css
*{-color-primary:rgb(104,132,193);-color-secondary:rgb(58,61,126);-color-tertiary:rgb(231,243,234);-fx-text-fill:-color-tertiary;/*ルートで設定しておけばこうやって書ける*/-fx-background-color:linear-gradient(-color-primary,-color-secondary);}.label{-fx-background-color:-color-primary;}::

CSSの使い方というよりはデザインをスマートにするための知恵みたいなものかもしれない。

-fx-font-family

JavaFXじゃなくてもよく出てくる、というかこれを検索するとHTML5の話ばっかり出てくるので意外とわからない話。
以下を実行することで指定できるフォントファミリーが一覧で出てくる。

Main.java
import javafx.scene.text.Font;

System.out.println(Font.getFamilies().toString());

インライン要素とブロックレベル要素を完全に理解する

なぜこの記事を書いたか

最近Webサイトのリニューアル案件をやっていて、ひたすらフロントコーディングしてるのですが、この辺ちゃんと理解していなかったし、ggってもイマイチな感じの記事だけだったので、思い切って書いてみました。

ここを参考にして基本のおさらいと実践みたいなことをできれば。

インライン要素とブロックレベル要素

HTMLにはたくさんタグがあるが、これらは「インライン要素」と「ブロックレベル要素」の二つに大別されます。
表面的には幅の考え方の違いとか改行の有無とかという話です。ただ、この理解があやふやな状態で、適当にタグ使っているとCSSがうまく効かないんだけど、みたいなことが発生します。

インライン要素とは

これの冒頭より重要な点は以下二つ

  • インライン要素は、コンテンツの流れを分断せずに、要素を定義するタグで囲まれた範囲だけを占有するものです。
  • インライン要素は新しい行から始まらず、必要な幅のみを占有します。

わかるようなわからないようなという具合ですが、多分この後のブロックレベル要素と比較したほうが理解がしやすいと思うので次に進みましょう。

ブロックレベル要素とは

これ冒頭より重要な点は以下二つ

  • ブロックレベル要素は親要素 (コンテナー) の領域全体を占有して、「ブロック」を生成します。
  • ブロックレベル要素は常に新しい行から始まり、利用可能な全幅を取ります (できる限り左右に伸びます)。

インライン要素と比較してみると少し理解しやすくなったとは思いますが、もう一声欲しい感じですね。

具体例で比較してみる

上記について、インライン要素であるspanとブロックレベル要素であるdivを実例を用いて比較してみましょう。結果は以下の通り。

See the Pen GRpqoMN by gitk47320 (@gitk47320) on CodePen.

インライン要素二つとブロック要素二つから見てみます。spanかdivの違いだけですが、表示自体は大きく違っています。インライン要素は横並びですが、ブロック要素は2行に分かれています。また、インライン要素は背景色がついているのは文字がある箇所だけですが、ブロック要素は横幅一杯についています。

後半は文中のあるテキストに対してspanとdivどちらが定義されているかが違います。上記からなんとなく挙動は分かると思いますが、spanのほうはタグで囲まれた範囲で背景色がついていますが、divは改行された挙句、横幅一杯に背景色がついてしまっています。

実際のコード、それに対する挙動からも冒頭に紹介した以下の仕様が直感的にわかります。

  • インライン要素は、コンテンツの流れを分断せずに、要素を定義するタグで囲まれた範囲だけを占有するものです。
  • インライン要素は新しい行から始まらず、必要な幅のみを占有します。
  • ブロックレベル要素は親要素 (コンテナー) の領域全体を占有して、「ブロック」を生成します。
  • ブロックレベル要素は常に新しい行から始まり、利用可能な全幅を取ります (できる限り左右に伸びます)。

displayプロパティの理解

次にCSSのdisplayプロパティについて簡単に取り上げます。

inline,block

ここの「displayプロパティ」項に記載があります。
この記載に注目。

このような display のデフォルトのふるまいは変更できます。 例えば、<li> 要素はデフォルトで display: block です。 つまり、英語の文書ではリスト項目は上下に表示されます。 display の値を inline に変更した場合、単語が文中で行うように、それらは互いに隣接して表示されます。

これを見ると、htmlタグとしてはインライン要素であっても、CSSのdisplayプロパティでblockをセットすればblockと同じ振る舞いができる、というようにも読み取れます。先ほどの例を少しいじってみましょう。

See the Pen gOaMrMe by gitk47320 (@gitk47320) on CodePen.

先ほどインラインとして表示されていたものがブロックレベルに、またはその逆になっています。
ちなみに、ただ、このような使い方は実際はやめた方がいいです。コードの可読性悪くなるし、保守もしにくいので。

inline-blockとは

一言で言うと、inlineとblock両方の特徴を要素に設定できます。どういうことでしょうか。もう少し探ってみます。

例によって例のごとくここの「Using display:inline-block」を参照しましょう。ちなみにここは英語なので注意。特に以下の記述。

This is useful for situations where you do not want an item to break onto a new line, but do want it to respect width and height and avoid the overlapping seen above.

「改行したくないけど幅や高さをセットしたいというときに役立つ」的な事が書いてあります。幅とか高さってwidth,heightで設定するもんじゃないの、と思うかもしれませんが、実はinline要素はwidthやheightを指定できません。

See the Pen ExVyKXy by gitk47320 (@gitk47320) on CodePen.

上記ではインライン要素にwidth,heightを設定していますが、その設定が効いていません。でもブロックレベル要素の方には効いていますね。理由はこちらの仕様に従っているから、ということになります。必要な幅というのはあくまでタグで囲まれた分の幅ということになるので、width等でその囲まれた分を変更するのはできないよ、と解釈できます。

  • インライン要素は新しい行から始まらず、必要な幅のみを占有します。

一方ブロックレベル要素は、こちらの仕様に従っているから、となりますね。できる限りというのはCSSで色々と調整した「できる限り」とも読めます。

  • ブロックレベル要素は常に新しい行から始まり、利用可能な全幅を取ります (できる限り左右に伸びます)。

SNSのブランドカラーとロゴのダウンロードURL(2020年4月)

【HTML/CSS】SREのフロントエンド復習日記

普段は、インフラ周りを中心に開発を行なっているのですが、もう一つのプロジェクトでフロントエンドを触ることになったので、一から学び直しています。
基礎のところからどしどし書き残していきます。

HTML

基礎

HTML の基本 - ウェブ開発を学ぶ | MDN

コーディング規約

こんなHTMLとCSSのコーディング規約で書きたい - Qiita

CSS

margin と paddingの違い

Image may be NSFW.
Clik here to view.
image.png

CSS入門:marginとpaddingの違いと使い分け | サービス | プロエンジニアより引用

今さら聞けない、marginとpaddingの違い | たねっぱ!

display

下記がかなり全てを物語ってくれています。

Image may be NSFW.
Clik here to view.
image.png

【CSS】displayの使い方を総まとめ!inlineやblockの違いは?より引用

width, height

基本的には、emか%を用いる。
レイアウトやボックスなど大きい範囲のサイズ指定(特に、width)は、%を用い、
文字の大きさやちょっとした隙間などはemを用いる。
CSS設計の基本 - Qiitaより引用

個人的には、%をよく使用します。

flex

「display:flex」と指定すると、要素を「Flexboxコンテナー」として定義することができる。
[CSS3のFlexboxを基本から理解して、使い方をマスターしよう! | 東京のWeb制作会社LIG]より引用
(https://liginc.co.jp/web/html-css/css/21024)

いろんな使い方は下記から参照して選んで使っていく予定。
もう迷わない!CSS Flexboxの使い方を徹底解説 | Web Design Trends
Flexboxを利用してよくあるレイアウトを実装したサンプル集 | NxWorld

下記のような書き方をよくやります。

.container{display:flex;justify-content:center;align-items:center;}

CSS設計

全然頭入ってないけど、今後やっていければと思っている分野です。
設計についても様々な手法があるようです。

  • BEM
  • FLOCSS

ウェブ制作者なら意識してほしいCSS設計の基礎知識 - ICS MEDIA

以下などは直近ですぐ注意して実装できそうです。

・再利用は基本的に考えない
・セマンティックなclass名をつける
・基本的にimportant!は使わない
CSS設計の基本 - Qiitaより引用

効率よくCSSを書く

Codepen
OneClickCSS

【質問】フリマアプリの販売管理の仕組み構築に関して

初めての投稿です!
開発に関しては初心者で、現在勉強中のものです。

タイトルにある件で質問させていただきたいのですが、
メルカリやラクマ、ヤフオク、paypayフリマなど、フリマアプリの一括販売管理をしたいと思っています。

元々は職歴としてアパレルECの業界に携わっていたのですが、
アパレルブランド用には在庫管理ツールがいくつもあるので、
今回個人的に使えるような仕組みが作れないかと思い、考えております。

超ど素人なので全く知識がなく恐縮なんですが、
①販売中・売り切れがぱっと見でわかる
②通知がくる
まずはこの二つがしたいことです。

スプレッドシートで管理、Slackで通知受け取るとかそういったものでも問題ないので、
やり方を教えていただければと思っております。

※将来的には出品管理

ちなみに1点懸念としまして、
過去に一括で出品から売上管理までできるようなアプリもあったようなのですが、
現在はないようです。
※何か問題があるので作成すること自体がダメなのでしょうか、、、?

目的は私個人の販売管理や効率化の部分なので、
そういった問題ない範囲でできたら嬉しいなと思っております。

心お優しい方、ご教示いただけますと幸いです。
よろしくお願いいたします。

ブラウザでお絵かき&保存をしよう!

ブラウザで絵を書きたいときってありませんか?

この記事では、HTMLのcanvasとJavaScriptでお絵かきアプリ【色・消しゴム追加編】に、独自にいくつか機能を加えたものを紹介します。コピペすれば導入できるようにしてあります。

完成するとこんな感じ

Image may be NSFW.
Clik here to view.
スクリーンショット 2020-04-19 3.05.17.png

追加機能、改善点

  • 文字の太さを、調節バーに加えて、直接数字でもいじれるようにしたこと。

  • 文字の太さの選択範囲を5倍拡大したこと(1〜10 → 1〜50)。

  • canvasで描いた絵を画像としてダウンロードできるようにしたこと。

  • カラーパレットを実装用するための「colorjoe」というライブラリに必要なモノ全てを、CDNで読み込むようにしたこと。

ソースコードは以下

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>Document</title><linkrel="stylesheet"href="https://cdn.jsdelivr.net/npm/colorjoe@4.1.1/css/colorjoe.min.css"/><!-- colorjoeのcssをダウンロード--></head><body><h1>お絵かきしよう</h1><divid="all-container"><spanid="layerd-canvas-area"><canvasid="draw-area"width="600px"height="600px"style="border: 1px solid #000000; position: absolute;"></canvas><canvasid="line-width-indicator"width="600px"height="600px"style="border: 1px solid #000000;"></canvas></span><divid="right"><div><div><buttonid="clear-button"class="menu">全消し</button></div><div><buttonid="eraser-button"class="menu">消しゴムモード</button></div><div>文字の太さ
            <spanid="line-width">5</span></div><inputid="range-selector"type="range"value="5"min="1"max="50"step="0.1"/><inputid="line-width-number-field"type="number"value="5"min="1"max="50"step="0.1"/></div><div><spanid="color-palette"></span></div></div></div><ahref="#"id="download"download="canvas.jpg">お絵かきをダウンロード
    </a><style>#all-container{display:flex;flex-direction:row;}#right{display:flex;flex-direction:column;align-items:center;justify-content:center;}.menu{margin-bottom:20px;}</style><script src="https://cdn.jsdelivr.net/npm/colorjoe@4/dist/colorjoe.min.js"></script><script src="oekaki.js"></script></body></html>
oekaki.js
window.addEventListener("load",()=>{constcanvas=document.querySelector("#draw-area");ctx=canvas.getContext("2d");ctx.fillStyle="#FFFFFF";//筆に白い絵の具をつけてctx.fillRect(0,0,600,600);//四角を描くconstcontext=canvas.getContext("2d");// 現在のマウスの位置を中心に、現在選択している線の太さを「○」で表現するために使用するcanvasconstcanvasForWidthIndicator=document.querySelector("#line-width-indicator");constcontextForWidthIndicator=canvasForWidthIndicator.getContext("2d");constlastPosition={x:null,y:null};letisDrag=false;letcurrentColor="#000000";// 現在の線の太さを記憶する変数// <input id="range-selector" type="range"> の値と連動するletcurrentLineWidth=1;functiondraw(x,y){if(!isDrag){return;}context.lineCap="round";context.lineJoin="round";context.lineWidth=currentLineWidth;context.strokeStyle=currentColor;if(lastPosition.x===null||lastPosition.y===null){context.moveTo(x,y);}else{context.moveTo(lastPosition.x,lastPosition.y);}context.lineTo(x,y);context.stroke();lastPosition.x=x;lastPosition.y=y;}// <canvas id="line-width-indicator"> 上で現在のマウスの位置を中心に// 線の太さを表現するための「○」を描画する。functionshowLineWidthIndicator(x,y){contextForWidthIndicator.lineCap="round";contextForWidthIndicator.lineJoin="round";contextForWidthIndicator.strokeStyle=currentColor;// 「○」の線の太さは細くて良いので1で固定contextForWidthIndicator.lineWidth=1;// 過去に描画「○」を削除する。過去の「○」を削除しなかった場合は// 過去の「○」が残り続けてします。(以下の画像URLを参照)// https://tsuyopon.xyz/wp-content/uploads/2018/09/line-width-indicator-with-bug.gifcontextForWidthIndicator.clearRect(0,0,canvasForWidthIndicator.width,canvasForWidthIndicator.height);contextForWidthIndicator.beginPath();// x, y座標を中心とした円(「○」)を描画する。// 第3引数の「currentLineWidth / 2」で、実際に描画する線の太さと同じ大きさになる。// ドキュメント: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/arccontextForWidthIndicator.arc(x,y,currentLineWidth/2,0,2*Math.PI);contextForWidthIndicator.stroke();}functionclear(){context.clearRect(0,0,canvas.width,canvas.height);ctx=canvas.getContext("2d");ctx.fillStyle="#FFFFFF";//筆に白い絵の具をつけてctx.fillRect(0,0,600,600);//四角を描く}functiondragStart(event){context.beginPath();isDrag=true;}functiondragEnd(event){context.closePath();isDrag=false;lastPosition.x=null;lastPosition.y=null;}functioninitEventHandler(){constclearButton=document.querySelector("#clear-button");consteraserButton=document.querySelector("#eraser-button");clearButton.addEventListener("click",clear);eraserButton.addEventListener("click",()=>{currentColor="#FFFFFF";});// layeredCanvasAreaは2つのcanvas要素を保持している。2つのcanvasはそれぞれ以下の役割を持つ//// 1. 絵を書くためのcanvas// 2. 現在のマウスの位置を中心として、太さを「○」の形で表現するためのcanvas//// 1と2の機能を1つのキャンパスで共存することは出来ない。// 共存できない理由は以下の通り。//// - 1の機能は過去に描画してきた線の保持し続ける// - 2の機能は前回描画したものを削除する必要がある。削除しなかった場合は、過去の「○」が残り続けてしまう。(以下の画像URLを参照)//   - https://tsuyopon.xyz/wp-content/uploads/2018/09/line-width-indicator-with-bug.gif//// 上記2つの理由より// - 1のときはcontext.clearRectを使うことが出来ず// - 2のときはcontextForWidthIndicator.clearRectを使う必要があるconstlayeredCanvasArea=document.querySelector("#layerd-canvas-area");// 元々はcanvas.addEventListenerとしていたが、// 2つのcanvasを重ねて使うようになったため、親要素である <span id="layerd-canvas-area">に対して// イベント処理を定義するようにした。layeredCanvasArea.addEventListener("mousedown",dragStart);layeredCanvasArea.addEventListener("mouseup",dragEnd);layeredCanvasArea.addEventListener("mouseout",dragEnd);layeredCanvasArea.addEventListener("mousemove",(event)=>{// 2つのcanvasに対する描画処理を行う// 実際に線を引くcanvasに描画を行う。(ドラッグ中のみ線の描画を行う)draw(event.layerX,event.layerY);// 現在のマウスの位置を中心として、線の太さを「○」で表現するためのcanvasに描画を行うshowLineWidthIndicator(event.layerX,event.layerY);});}functioninitColorPalette(){constjoe=colorjoe.rgb("color-palette",currentColor);joe.on("done",(color)=>{currentColor=color.hex();});}// 文字の太さの設定・更新を行う機能functioninitConfigOfLineWidth(){consttextForCurrentSize=document.querySelector("#line-width");constrangeSelector=document.querySelector("#range-selector");constnumberField=document.getElementById("line-width-number-field");// 線の太さを記憶している変数の値を更新するcurrentLineWidth=rangeSelector.value;// 線を<input type='number'>からも更新できるようにする。numberField.addEventListener("input",(event)=>{constwidth=event.target.value;// 線の太さを記憶している変数の値を更新するcurrentLineWidth=width;rangeSelector.value=width;// 更新した線の太さ値(数値)を<input id="range-selector" type="range">の右側に表示するtextForCurrentSize.innerText=width;});// "input"イベントをセットすることでスライド中の値も取得できるようになる。// ドキュメント: https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/rangerangeSelector.addEventListener("input",(event)=>{constwidth=event.target.value;numberField.value=width;// 線の太さを記憶している変数の値を更新するcurrentLineWidth=width;// 更新した線の太さ値(数値)を<input id="range-selector" type="range">の右側に表示するtextForCurrentSize.innerText=width;});}initEventHandler();initColorPalette();// 文字の太さの設定を行う機能を有効にするinitConfigOfLineWidth();constbutton=document.getElementById("download");button.onclick=function(){letcanvas=document.getElementById("draw-area");console.dir(canvas)letbase64=canvas.toDataURL("image/jpeg");document.getElementById("download").href=base64;};});

お絵かきをお楽しみください!

一番高さがある要素にあわせてcssを指定

script.js
jQuery(function($){window.addEventListener('load',function(){varmaxHeight=0;$('.slider li').each(function(idx,elem){varheight=$(elem).height();if(maxHeight<height){maxHeight=height;}});$('.slider li').height(maxHeight);});});

これでできた。

.sliderという親要素の中にある、子要素liの中で、高さが一番高い要素にcssを合わせる。(height)

私が実際に使用したのは、slickだったので、
以下のようなコードだったけど。

$('.slider .slider-box .slider-list').height(maxHeight);

親要素.slider
子要素.slider-box > .slider-list

.slider-boxはslick導入による形が崩れるのを防ぐ(必須)
.slider-listはpaddingや指定してる要素

これ、色々考えた末、できなかったやつ

出来なかったやつだからね。

script.js
jQuery(function($){constlists=document.querySelectorAll('.slider-box');for(leti=0;i<lists.length;i++){//高さ取得consth=lists[i].clientHeight;//css指定console.log(h);if($(this).height()>h){h=$(this).height();}$(".slider .slider-box").css("height",h+"px");};});

参考サイト

https://www.growupfa5hi0n.com/2020/01/jquery-height.html

プラグインも一応あるみたい
https://www.start-point.net/blog/web/jquery/hight_js/

TECH CAMP入校前

TECH CAMPのカリキュラムを2週間終え感じたことは、

「ある程度勉強していて良かった‥。」

受講を悩んでいる方や、これから受講するって方は”未経験からエンジニアへ”という謳い文句を勘違いして知識ゼロで臨むとなかなか苦労すると思います。カリキュラムの進行はスピーディで、合間にあるテストや試験もなかなか難しいです(検索はOKです)。
一度でも内容に触れたことがあれば記憶の定着もしやすいですし、理解度も増します。

TECH CAMP受講前の自分の学習内容(3ヶ月間)としては、
・プログラミングとは何か?みたいな本
・初心者向けのRubyの本
・Progate
・Youtube
・ITパスポートのテキスト

プログラミングを学ぼうと決めたのが11月下旬で、12月に入って退職届を会社に提出。
TECH CAMPの無料カウンセリングを受けて受講が決まったのが12月。すぐに開始かと思いきや4月スタートという事で、だったらその間に知識ゼロの状態から何かひとつでも作ってやろうと思い2冊の本を買いに行きました。(ちなみにそのタイミングでパソコンをWindowsからMacへ)

・プログラミングとは何か?みたいな本
これが漫画形式で説明されていて、超初心者の自分としても理解しやすかったです。主人公がプログラミング知識ゼロの状態から、仕事の効率化を図る為にプログラミングを学びその技術を高めていく、というストーリー。これがこれから学びはじめる自分自身と重ねてやる気が向上!そこまで中身の深堀は無いのですが、これを読んでプログラミングを学ぼうというビジネスマンもいるのでは?

・初心者向けのRubyの本
そして上記の本と同時に購入したこの本。ペラペラとページをめくりながら、まだ使い方もおぼつかないMacをポチポチ、そして”Hello world.”と出力され感動(笑)

この2冊の本を購入後、ふと考えました‥

「言語毎に本を買っていくのか‥?」

・Progate
ということで調べて見るとProgateというもので学べることがわかりました。これがすごくわかりやすく、書いたコードの動きもそこで体感できゲーム感覚で進めることが出来ます。ちなみに現在Lv135、修了レッスン数21です。

・Youtube
ここではプログラミング学習というよりWebエンジニアとは何か?IT業界とは?等に特化して学びました。現役の方や元々やっていた方の話が直接(じゃないか笑)聞けて、自分のこれから進んで行く道をじっくり考える時間となりました。

・ITパスポートのテキスト
資格試験を受けないのにそのテキストを買う、というなかなか謎の行動をしてしまいました。しかしITの基礎知識を蓄える為にこの本は役立っています。わからないことは簡単に検索可能な世の中ですが、何がわからないのかがわからない or どんな知識が必要なのかがわからない、という状態の初心者にとっては、このテキストはわかりやすくまとめられているのかな、と感じます。

そして!本格的に学習を開始してから約3ヶ月後の3月の半ばに、Rubyで簡単なアプリケーションを作ってみました。たったひとつのエラーに2時間悩んだり、と苦労しましたがようやく完成。
https://twitter.com/ruby55tomo/status/1239141960662695937?s=20

コードの中身はめちゃくちゃだと思います。もっとスッキリさせられるはず。でも自分が成長出来た時のゼロ地点の証としてこれはこのまま残しておきます。

冒頭で「ある程度勉強していて良かった‥。」と言いましたが、後悔している点としてはCSSとRuby on Railsが勉強不足で、これが最初の苦労につながったことですね。

レスポンシブサイトでデバイスサイズごとにJSを切り替える。

PCとSPでデザインが違う時に、使用したので忘れずにメモ。

script.js
jQuery(document).ready(function($){if(window.matchMedia('(min-width: 768px)').matches){$(function(){/* ウィンドウサイズが768px以上の場合 */});}else{$(function(){/* ウィンドウサイズが768px未満の場合 */});};});

タブレットの時とかにも使える◎

script.js
if(window.matchMedia("(max-width: 768px) and (min-width: 480px)").matches){/* ウィンドウサイズが 480px以上768px以下の場合 */}

疑似クラス+要素連結をマスターする。

はじめに

CSSを使っていて、案外つまづきやすいポイントなのでまとめてみた。
ここで例に取り上げるのはhoverのみだが、:checkedや:active、:visitedなどでも同様に作用するぞ。

普通に利用する場合

html
<style>/* patern0 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.hovered:hover{background:red;}</style><divclass="hovered"></div>

アクションの作動時にほかの要素を動かしたい場合

動かしたい要素が直下(すぐ下)の子要素にある

html
<style>/* patern1 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.acttarget{color:white;background:#444040;display:inline-block;padding:0.5em1em;}.hovered:hover>.acttarget{color:red;}</style><divclass="hovered"><pclass="acttarget">action!</p></div>

動かしたい要素が子要素にある(直下でない場合でも可)

html
<style>/* patern2 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.acttarget{color:white;background:#444040;display:inline-block;padding:0.5em1em;}.hovered:hover>.acttarget{color:red;}</style><divclass="hovered"><div><pclass="acttarget">action!</p></div></div>

動かしたい要素が同じ階層で、ひとつ後ろにある

html
<style>/* patern3 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.acttarget{color:white;background:#444040;display:inline-block;padding:0.5em1em;}.hovered:hover~.acttarget{color:red;}</style><divclass="hovered"></div><pclass="acttarget">action!</p><divclass="hovered">関係ない要素</div>

※ここに出てきている「~」は「間接セレクタ」。
隣接セレクタは、
「変化させたい要素が、:hoverなどの疑似クラスをつけた要素よりも後ろにある」
という条件を満たさないと適用されないので注意しよう。
例として、一つ目のhoveredにカーソルを載せた場合は発動するが、二つ目にかざしても何も起こらない。

html
<style>/* patern4 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.acttarget{color:white;background:#444040;display:inline-block;padding:0.5em1em;}.hovered:hover+.acttarget{color:red;}</style><divclass="hovered"></div><divclass="hovered"></div><pclass="acttarget">action!</p><divclass="hovered">関係ない要素</div>

※ここに出てきている「+」は「隣接セレクタ」と呼ぶ。
隣接セレクタは、
「変化させたい要素が、:hoverなどの疑似クラスをつけた要素のすぐ後にある」
という条件を満たさないと適用されない。
上の例でいえば、一つ目のhoveredにカーソルをかざしても反応しない(「~」なら反応する)。

また、下に挙げる例では反応すらしない。

html
<style>/* patern5--failed */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.acttarget{color:white;background:#444040;display:inline-block;padding:0.5em1em;}.hovered:hover+.acttarget{color:red;}</style><!-- 失敗例。どちらのhoveredにマウスカーソルをかざしても反応しません。 --><divclass="hovered"></div><p>関係ないターゲット</p><pclass="acttarget">action!</p><divclass="hovered">関係ない要素
</div>

ある要素が条件を満たしたとき、その要素についている疑似要素を変化させたい

疑似要素は、基本的にセレクタで分けたり繋げたりはせず、疑似クラスの後ろにつなげて使う、と覚えておこう。

html
<style>/* patern6 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;}.hovered:before{display:block;content:'';background-color:black;width:8px;height:8px;transform:rotate(30deg);}.hovered:hover:before{background:red;}</style><divclass="hovered"></div>

もちろん、以下のようにbefore、afterに同時に変化を加えてやることも可能だ。

html
<style>/* patern7 */.hovered{display:inline-block;background:white;border-radius:10px;padding:1em2em;position:relative;}.hovered:before{display:block;content:'';background-color:black;width:8px;height:8px;transform:rotate(30deg);position:absolute;top:8px;left:6px;}.hovered:after{display:block;content:'';background-color:black;width:6px;height:6px;border-radius:50%;position:absolute;top:10px;right:8px;}.hovered:hover{background:black;}.hovered:hover:before{background:red;}.hovered:hover:after{background:#55c500;}</style><divclass="hovered"></div>

用例

See the Pen BaozbYa by Yomogenium (@yomogenium) on CodePen.

css,bootstrap,phpの勉強

WordPress cssファイルを更新する際の備忘録

はじめに

WordPressの使い方に慣れていないため、
本番環境にアップロードした内容の編集方法を備忘録として残しました。
この記事ではcssファイルの編集について記述します。
またphpファイルでも同様の方法で編集できます。

記事の更新については以下のとおり
WordPress記事を更新する際の備忘録

開発環境

テスト環境

・Local by Flywheel

本番環境使用サーバー

・Xサーバー

手順一覧

手順は簡単で本番環境のファイルを編集→保存するだけです。念の為、編集したいファイルをドラック&ドロップでコピー(バックアップファイル)を作成しておきます。

1.FileZillaを起動

・FileZillaを起動して編集したいcssファイルのバックアップをとる

Image may be NSFW.
Clik here to view.
image.png

2.cssファイルを編集→上書き保存

cssが本番環境で反映されない場合

メディアクエリ設定を追加しても本番環境で反映されずハマりました…

ホームページの見た目(CSS)を変更した時は、キャッシュが強くてただ再読み込みしただけじゃ更新してくれません。
このエラーはブラウウザのキャッシュを無視して強制的にサーバーからページに関する情報をすべてダウンロードする「強制再起動(スーパーリロード)」で解決できます。

強制再起動(Google Chrome)

検証ツールを開いてから更新ボタンを右クリックし、「キャッシュの消去とハード再読み込み」をクリックして実行できます。

Image may be NSFW.
Clik here to view.
image.png

強制再起動(Safari)

・「設定」→「Safari」→「履歴とWebサイトデータを消去」で強制再起動が可能になります。
これでスマホで確認した時にメディアクエリが設定されていることを確認しました。
Image may be NSFW.
Clik here to view.
image.png

以下、cssが反映されない原因について調べて参考にさせていただいた記事です。
wordpressでcss編集したのに効かない時の対処と原因を特定する術
キャッシュが残ってホームページが更新されない時の対処法 【スマホ版】SafariやChromeで強制再読込する


Ruby on railsで開発しAWSでしかデプロイ経験がなかったので、強制再起動の概念が全くありませんでしたImage may be NSFW.
Clik here to view.
:disappointed_relieved:

これを機にWordPressについてもっと勉強したいと思います!

初心者によるプログラミング学習ログ 294日目

100日チャレンジの294日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
294日目は、

レスポンシブHTMLメールで2カラム載せる

レスポンシブHTMLメールで2カラム載せる

レスポンシブメールにおいて、2カラムで記述+Outlookを考慮した記述を整理する目的で記述。

デモ

See the Pen YzyGXQV by NENE (@nenenene) on CodePen.

コード

該当箇所のみ

test.html
<!-- 2カラム --><!--[if (gte mso 9)|(IE)]>
    <table width="640" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<![endif]--><tablewidth="640"border="0"cellpadding="0"cellspacing="0"style="width:100%!important;max-width: 640px;"><tr><tdalign="center"style="padding:10px 20px;vertical-align: top;"><!--[if (gte mso 9)|(IE)]>
    <table width="100%" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top">
<![endif]--><divstyle="width:100%;min-width:300px;max-width:300px;display: inline-block;vertical-align: top;"class="devicewidth"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"><tr><tdalign="center"style="font-size:0;padding:5px;"><imgsrc="https://placehold.jp/290x300.png"width="290"style="width:100%!important;display: block;"></td></tr></table></div><!--[if (gte mso 9)|(IE)]>
</td>
<td valign="top">
<![endif]--><divstyle="width:100%;min-width:300px;max-width:300px;display: inline-block;vertical-align: top;"class="devicewidth"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"><tr><tdstyle="padding:5px"><imgsrc="https://placehold.jp/290x145.png"style="width:100%!important;display: block;"></td></tr><tr><tdstyle="padding: 5px;"><imgsrc="https://placehold.jp/290x145.png"style="width:100%!important;display: block;"></td></tr></table></div><!--[if (gte mso 9)|(IE)]>
</td>
    </tr>
</table>
<![endif]--></td></tr></table><!--[if (gte mso9)|(IE)]>
</td>
</tr>
</table>
<![endif]--><!-- /logo --><!-- /2カラム -->

解説

CSS

  • スマホ閲覧時に1カラムになるよう、<div>内にclass="devicewidth"を記述。classの内容は以下。
cample.css
@mediaonlyscreenand(max-width:480px){.devicewidth{width:100%!important;max-width:100%!important;}}

HTML

  • 全体を<table>で囲み、各カラムをclass="devicewidth"付きの<div>でそれぞれ囲む
  • <td align="center" style="padding:10px 20px;vertical-align: top;">:入れ子+<td>paddingで囲むことにより、SP閲覧時のと余白を作る

Outlook用記述

Outlook上での崩れを防ぐため、Outlook上の記述+<table>で全体を囲み、更に入れ子で囲った上、各カラムを<td>で分ける

sample.html
<!--[if (gte mso 9)|(IE)]>
    <table width="640" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<![endif]--><!-- 中略 --><!--[if (gte mso 9)|(IE)]>
    <table width="100%" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top">
<![endif]--><!-- 中略 --><!--[if (gte mso 9)|(IE)]>
</td>
<td valign="top">
<![endif]--><!-- 中略 --><!--[if (gte mso 9)|(IE)]>
</td>
    </tr>
</table>
<![endif]--><!-- 中略 --><!--[if (gte mso9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
Viewing all 8576 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>