Quantcast
Browsing Latest Articles All 2109 Live
Mark channel Not-Safe-For-Work? (0 votes)
Are you the publisher? or about this channel.
No ratings yet.
Articles:

初心者的プログラミング(HTML・CSS)感動ランキング

プログラミング初心者がびっくりしたこと!!!

はじめに

初めまして、くるみと申します。
「プログラミングを勉強するぞ!!」とか言ってTwitterを始めた所謂『形から入る』系人類です。Qiitaで何かアウトプットしてみたいというこれまた『形から入ろう』と思って記事を書いてます。
ブログみたいな内容になっちゃいそうなので問題があったら消します:baby:

今回は自分がプログラミングを勉強し始めて「むずかし〜」とか「すご〜」と思ったことををメモがてらみなさまに共有したいです!
誰向きの記事なのかもはや分からないけど、初心者の方は共感してください:relaxed:
中・上級者の方は鼻で笑いながら自分の初心者時代を懐かしんでください!笑

HTML&CSSびっくり/むずかしポイントランキング

早速初心者の自分が感動・・・と云いますかびっくりしたことや難しかったことをランキングで紹介します!

第3位:そもそもプログラミング言語と違う

これTwitterとかでもよく見る言葉なんですけど、HTMLはマークアップ言語でCSSはスタイルシート言語。

マークアップ言語とは、文書の構造を指定する言語です。
スタイルシート言語とは、文章のスタイルを指定するための言語です。

要するにこれらは、表面を整えるためのものであって、コンピューターに命令を下すためのプログラミング言語とはまた違うんですね.
正直、自分としてはアルファベットでごちゃごちゃ書いてたら全部プログラミングと思っていたのでびっくりしました笑

第2位:インライン要素とブロック要素

みなさん「インライン要素」と「ブロック要素」について知っていますか?
HTMLで文章を作る時に、この分類によってどの要素の内側にどの要素を配置できるかなどのルールが定められているみたいです。

ブロック要素


見出し・段落・表など、文書を構成する基本となる要素がこのブロック要素です。
ブロック要素のタグで囲まれた部分は、1つのかたまりとして認識されるみたいです。だから、cssで指定等すると、全部に反映されちゃうんですね。


「でも文章の一部分だけにスタイルを反映させたい・・・」
そんな時に使えるのが、↓のインライン要素!


インライン要素


インライン要素は、ブロック要素の内容として用いられ、文章の一部として扱われます。
文章の中の一部だけに色をつけたり、強調するような場合に使われる要素なんですね。

ブロック要素の中には、ブロック要素やインライン要素を入れることはできますが、インライン要素の中にはインライン要素は入れられれも、ブロック要素は入れることができません。

初めてHTMLに触れた時、ブロック要素しか知らなかったもので、
全部にスタイルが反映されちゃうのなんだかイケてないなぁ・・・って思ってたんですけど、ちゃんと仕組みとして考えられているんですね。。。自分が無知なだけでした・・・!笑

第1位:「title」タグ

ブラウザのタブに、そのサイトの名前が表示されるじゃないですか。
それって、この「title」タグが仕事をしてくれてるようなのです!

初めてprogateをした時に、1番感動したのがここです笑

さらにタイトルタグは、ウェブサイトのタイトルを示すものであり、検索した時の結果画面で出てくるもののようです。だから、ブログとかHPのSEO対策とかを考える際にかなり重要になってくるということですね。

素人的には、webサイトのタイトルがどこに書かれているかなんて全く気にしてなかったんですけど、知ってみるとすごく納得でした。
自分が今まで何となく接していたものにきちんとしたルールがあるのに感動しました・・・本当に!!

終わりに

まとめると、プログラミンング・・・の世界に少し触れてみたことで、自分が今まで何となく接していたものにきちんとしたルールがあったことが一番の感動でした。
自分が知らないことを知るのは楽しいですね。
この調子で勉強していきたいです!

TECH CAMP 1日目

体育会系からの未経験エンジニアを目指し、テックキャンプへ通うことにしました。

今までパソコンすらほとんど触ることもなかった自分が大丈夫なのか。と何度も考えましたが、最後は勢いで決めました。

何事も挑戦しないと始まらないと思いまして。(返金保証あるから、最悪なんとかなると思ってましたw)

そんなこんなで昨日からついにスタートしました。

ここでは、スクールでの流れや学んだことなどを発信していければと思います。

スクールに通うことを迷われている方などの参考になれば幸いです。

【1日目】
キックオフ…パソコンの設定や学び方を、専用サイトにて学んでいきます。(オンライン)

チームMTG…同期にてチーム作成が自動で行われ、メンターとチームでの顔合わせを行い
     今後の学び方や質疑応答

ひたすらカリキュラム…ただやるだけ。ひたすら。

こんな感じでした。

元々は教室での参加予定でしたが、コロナの影響により全てオンラインとなりました。

教室は使えるらしいですが、使える曜日が決められます。

ですが、教室を利用したとしてもメンターへの質問はオンラインのみなので、教室利用のメリットは何も有りません。

綺麗な教室と、少しいい椅子があるだけらしいです。w

僕は、短期集中転職を選択したので

平日の,10時〜22時まで学びます。

カリキュラムも本当にガッツリ入っています。

とりあえず

これから、10週間頑張りますw

flex box 基礎

レイアウトを整えるにはfloatやmargin:0 auto;を使っていましたが、Flexboxがとても便利だったので備忘録とて投稿します。

参考>https://coliss.com/articles/build-websites/operation/css/css3-flexbox-properties-by-scotch.html

Flexboxの利点

flexboxとは、『簡単にいい感じのレイアウトにですることができるcssの仕組み』
floatやmargin:0 auto;と違った利点があります。

  ・複雑な内容を上下左右に簡単にレイアウト可能
  ・高さが消えず、clearfixが不要
  ・HTMLソースはそのままに、CSSのみで順序を入れ替え可能
  ・中央寄せ、均等分布などの画像ソフトで行なうような整列をHTML上で簡単に実現可能
  ・親や子のサイズが拡大縮小しても、その空間に応じて柔軟性高くレイアウトが可変する

などなど

Flexboxの注意点

  ・古いブラウザだと非対応
  ・IEでは最新版でも挙動がおかしい場合がある

FlexコンテナーとFlexアイテム

Flexレイアウトは大きく分けて2種類の要素に分かれており、それぞれ設定できるプロパティが異なります。

Flexコンテナー

Flexレイアウトを行うための親の箱です。下例で紹介しますがdisplay:flexと設定することでFlexコンテナーになります。

Flexアイテム

Flexコンテナー直下の要素は全て自動的にFlexアイテムとなります。
※Flexアイテム内に更にdivが含まれるなど、入れ子になっているアイテムはFlexアイテムとはなりません。

基本のflexレイアウト

html
<divclass="flex"> /* flexコンテナー */<div>1</div> /* flexアイテム */<div>2</div> /* flexアイテム */<div>3</div> /* flexアイテム */</div>
css
.flex{background-color:grey;display:flex;}.flex>div{background-color:white;margin:10px10px;}

するとスクリーンショット 2020-07-07 9.09.07.png
こんな感じ

これの親要素(.flex)のCSSにdisplay:flex;を追加します

css
.flex{background-color:grey;display:flex;/* 追加 */}.flex>div{background-color:white;margin:10px10px;}

スクリーンショット 2020-07-07 9.20.04.png
これだけで、簡単に横並びのレイアウトを作ることができました。

さらに追加します。

css
.flex{background-color:grey;display:flex;justify-content:center;/* 追加 */align-items:center;/* 追加 */}.flex>div{~省略}

スクリーンショット 2020-07-07 9.34.54.png

こんな感じで簡単にレイアウトを変更できます。

まとめ

便利なFlexboxのおかげでのおかげで思い通りのレイアウトが格段にやりやすくなりました。
この記事で紹介できなかったプロパティがまだまだ沢山あるので、また別記事で書きたいと思います。

ゲームでflexboxを学べるのでおすすめ
https://flexboxfroggy.com/#ja

LINE風�吹き出しCSS

See the Pen line-like by ririli (@ririli) on CodePen.

吹き出しが使いたい場面って結構多いですよね。
でも実装はそんなにシンプルじゃないので画像で済ませちゃう人も多いかも。

わかってみれば意外と難しくないので挑戦してみてください。

ポイント

なんといっても下にちょっと突き出たとこ、これがやりたいわけですよね。
実装では以下が該当します。

.left:after{position:absolute;content:'';top:100%;left:10px;border:15pxsolidtransparent;border-top:15pxsolid#e0edff;width:0;height:0;}

具体的にはborderとborder-topですね。
borderで透明な太い線をひきます。
その上にborder-topで上だけに色をつけます。

これで三角の完成です。
あとは適切な場所に配置するだけ。

...とはいかないですよね。

なんで三角になるわけ?

おそらくborder-topを指定しただけでどうして三角形になるのか疑問が出た人も多いと思います。
かくいう僕もそうでした。

もし手元に試せる環境があったら以下のcssを当ててみてください。

border-top:5pxsolidred;border-left:5pxsolidblue;border-tight:5pxsolidgreen;border-bottom:5pxsolidyellow;

色の違う4本の線で四角形ができたでしょうか?
では線同士がぶつかる角の部分はどうなっているでしょうか?
どちらかで埋まっているのではなく色が半分ずつになっていませんか?

これがborder-topで三角になる理由です。

IE11 と CSS Grid の 7 つの約束

はじめに

2020 年 7 月現在、私のシェア率は国内でだいたい10% 弱です。
どうか、私への対応を諦める前にそのことを覚えておいて欲しいのです。
- Internet Explorer 11

WebブラウザシェアランキングTOP10(日本国内・世界)

CSS Grid を IE11 で使用する上での注意点を確認していきます。
※ Gulp および Autoprefixer を使用した IE11 対応を前提とします。また環境構築の手法については本記事では触れないものとします。

CSS Grid が私に何を求めているのか、私がそれを理解できるように記述してほしいのです

私はモダンなプロパティをベンダープレフィックス無しで理解することができません。
CSS Grid も例外ではないため、私の友人である Autoprefixer を介してそれを理解できるように変換して欲しいのです

ひとつひとつベンダープレフィックスを付与していくのはかなり工数がかかってしまうため、本記事では GulpAutoprefixerによって自動での付与・変換を行なうことを前提とします。

前述したように npm および Gulp による環境構築については触れませんが、Autoprefixer のバージョンは最低限気にしておくのが良いかと思います。
すでに環境構築されている場合でも、Autoprefixer のバージョンが古いとそもそも対応ができません。

Autoprefixerが進化してCSS GridのIE11 対応がバリ楽になった(2017年〜2018年)

Autoprefixer のリリースノートを確認したところ、 2020.7.6 現在での最新バージョンは 9.8.3ですので、本記事ではこのバージョンを使用していきます。
自動配置の仕様変更や警告の追加などが更新されているようですので、可能であれば最新版にしておくのが良いでしょう。

補足:browserlist の記述方法も確認しておきましょう

Autoprefixer 9.6 でのバージョンアップにより、ターゲットブラウザを指定する browsersオプションが非推奨となっています。
Autoprefixer の最新版を使用する場合、こちらも留意しておきましょう。
ざっくり書いておくと、「ターゲットブラウザの指定を他のツールでも共有したいので、package.jsonなどに記述してツール間で共有する」というような内容になります。

参考記事:ハローハリネズミ - Browserslist でターゲットブラウザの設定

要素の数が決まっていない時は、おとなしく Flexbox を使用してください

私が CSS Grid に対して、他のモダンブラウザと同様の挙動でないことを知っておいてください。
要素の数がグリッドで定義されている個数を超えた場合、モダンブラウザではグリッドが自動で追加生成されるようですが、私にはできません。

挙動確認

4 行 2 列のグリッドコンテナと、内包される 10 個の子要素を用意して挙動確認を行なっていきます。

<divclass="gridContainer"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 5"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 6"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 7"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 8"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 9"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 10"></div></div>
Autoprefixerによる変換前
.gridContainer{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);gap:10px;margin:10px;}.girdItem{border:1pxsolid#000;}

IE11 では Autoprefixer によって以下のようなプロパティが適用されます。

Autoprefixer による変換後コード
Autoprefixerによる変換後
.gridContainer{display:-ms-grid;-ms-grid-columns:1fr10px1fr10px1fr10px1fr;-ms-grid-rows:1fr10px1fr;margin:10px;}.girdItem{border:1pxsolid#000;}.gridContainer>*:nth-child(1){-ms-grid-row:1;-ms-grid-column:1;}.gridContainer>*:nth-child(2){-ms-grid-row:1;-ms-grid-column:3;}.gridContainer>*:nth-child(3){-ms-grid-row:1;-ms-grid-column:5;}.gridContainer>*:nth-child(4){-ms-grid-row:1;-ms-grid-column:7;}.gridContainer>*:nth-child(5){-ms-grid-row:3;-ms-grid-column:1;}.gridContainer>*:nth-child(6){-ms-grid-row:3;-ms-grid-column:3;}.gridContainer>*:nth-child(7){-ms-grid-row:3;-ms-grid-column:5;}.gridContainer>*:nth-child(8){-ms-grid-row:3;-ms-grid-column:7;}

こちらの挙動確認を行なった画面のキャプチャが以下になります。

  • Google Chrome
    スクリーンショット 2020-07-05 15.29.34.png

  • IE11
    スクリーンショット 2020-07-05 15.29.50.png

Google Chrome では、9, 10 個目の要素を配置するための グリッドが自動生成されますが、IE11 では 8 個目までしか表示されていません。
コンパイル後の CSS を確認したところ、グリッド外の 9, 10 個目の要素には配置に関するプロパティが Autoprefixer で生成されないため、一つ目の子要素と同じ位置に重なってしまうようです。

対応

もし要素の数が定まっているのであれば、グリッドコンテナを 4 行 × 3 列に変更してしまえば解決しますが、例えば 「同じコンテナを、要素数の異なる複数箇所で使用する」 ということを考えてみましょう。
行数または列数が異なれば、その度に別々のグリッドコンテナを用意する必要が出てきます。

同じような要素を内包するグリッドコンテナであっても、コンテナごとに要素数が定まっていないような場合は Flexbox を使用した実装の方が柔軟に対応できるかと思います。
本当に CSS Grid を使用するべきかどうか、実装前に一度じっくり考えてみるようにしましょう。

補足:gap プロパティの挙動

gapプロパティ(旧 grid-gapプロパティ)は IE11 非対応ですので、Autoprefixer によってグリッドエリアの一つの行または列として変換されます。
上記の例でも、以下のように変換されていることが確認できます。

Autoprefixerによる変換前
.gridContainer{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);gap:10px;margin:10px;}
Autoprefixerによる変換後
.gridContainer{display:-ms-grid;-ms-grid-columns:1fr10px1fr10px1fr10px1fr;-ms-grid-rows:1fr10px1fr;margin:10px;}

なお IE11 での自動配置は、上記変換後の行列数を考慮した上で -ms-grid-rowおよび -ms-grid-columnによる配置を明示的に追加することで実現されているようです。

grid: trueオプションが何を求めているのか、私の友人には分かりません

以前の Autoprefixer では grid: trueオプションを Autoprefixer に設定することによって IE11 での自動配置を行なっていました。
しかしこのプロパティは現在 no-autoplaceのエイリアスであり、廃止予定のようです。

参考記事:autoprefixerでgridを有効にしているのにIE11でレイアウトが崩れる

gulpfile.js
gulp.task("default",()=>{returngulp.src("src/style.css").pipe(autoprefixer({grid:true}))// grid: true の設定による自動配置の設定(現在は非推奨).pipe(gulp.dest("dist"));});

対応

正しく自動配置を設定するためには grid: 'autoplace'プロパティをオプションとして設定します。

gulpfile.js
gulp.task("default",()=>{returngulp.src("src/style.css").pipe(autoprefixer({grid:'autoplace'}))// 現在の CSS Grid 自動配置のオプション設定.pipe(gulp.dest("dist"));});

grid-templateでの自動配置の使用をする前に覚えて置いて欲しいのです。その記述は、自動配置では使うべきでないということを。

私の友人は grid-template での自動配置を私に伝えることはできません。

挙動確認

grid-templateを使用して 4 列 2 行の グリッドコンテナを作成します。

Autoprefixerによる変換前
.gridContainer{display:grid;grid-template:"areaA areaB areaC areaD"1fr"areaE areaF areaG areaH"1fr/1fr1fr1fr1fr;gap:10px;margin:10px;}.girdItem{border:1pxsolid#000;}

子要素に grid-areaプロパティを指定しなかった場合、IE11 では以下のように変換されます。

Autoprefixerによる変換後
.gridContainer{display:-ms-grid;-ms-grid-columns:1fr10px1fr10px1fr10px1fr;-ms-grid-rows:1fr10px1fr;margin:10px;}

グリッドコンテナの変換はうまくいっているようですが、この記述では子要素の自動配置が行われません
また、以下のようなエラーがコンソールに出力されます。

gulp-postcss: css/top.css
autoprefixer: xxx/top.css:16:3: Can not find grid areas: areaA, areaB, areaC, areaD, areaE, areaF, areaG, areaH

グリッドコンテナでエリアが指定されているのに使われていないよ!」ということのようです。
こちらのエラーは、.を使用してエリアを指定することで回避できます(MDN のサンプルで使用されており、grid-template で明示的にエリアを指定しない方法のようです)が、このエラー対策をしたところで結局子要素の自動配置までは行われません。

.gridContainer{display:grid;grid-template:". . . ."1fr". . . ."1fr/1fr1fr1fr1fr;gap:10px;margin:10px;}

対応

自動配置を前提として CSS Grid を使用する場合、grid-templateは使用しない方が良さそうです。
grid-template-columnsおよび grid-template-rowsによる記述を行いましょう。

CSS Grid の行と列を、必ずどちらも記述してください

私が言うことを聞かないだとか、頑固だとか、怠けているからといって叱る前に、私が何故その記述を理解できないか気づいて下さい。もしかしたら、記法に問題があるかもしれないし、私の友人が変換できていないのかもしれない。

Autoprefixer 9.4でのバージョンアップ以降の自動配置機能を使用するには、グリッドコンテナの宣言時に行と列の両方を定義する必要があります。

挙動確認

Autoprefixerによる変換前
.gridContainer{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:10px;}
Autoprefixerによる変換後
.gridContainer{display:-ms-grid;-ms-grid-columns:1fr10px1fr10px1fr10px1fr;margin:10px;}

こちらもコンテナの変換はうまくいっているようですが、子要素の自動配置は行われません。
また、片方のみの記述でコンパイルを行なった場合 Autoprefixer 9.8.3 では以下のようなエラーが出力されます。

gulp-postcss: css/top.css
autoprefixer: xxx/top.css:16:3: Autoplacement does not work without grid-template-rows property

Autoprefixer 9.4 のリリースノートでも、以下のような記載があります。

In order to use the new autoplacement feature, you must define both rows and columns when declaring the grid template.

行と列の定義は同じ宣言ブロック内に記述してください

あなたにとって良い CSS Grid の扱い方でも、方法によっては私には決して伝わりません。

挙動確認

同じようなコンテンツを内包し、行数の異なるグリッド(例えば 2 行 3 列、2 行 3 列、2 行 4 列の 3 パターン)があったと考えます。

<divclass="gridContainer-2x2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div></div><divclass="gridContainer-3x2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 5"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 6"></div></div><divclass="gridContainer-4x2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 5"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 6"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 7"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 8"></div></div>

スクリーンショット 2020-07-07 17.22.50(2).png

『要素の数が決まっていない時は、おとなしく Flexbox を使用してください。』で述べたように、IE11 では 要素数がグリッドコンテナからはみ出た場合にグリッドコンテナの自動生成が行われません。
一つ一つ別々のコンテナを記述していくと下記のようになります。

.gridContainer-2x2{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);gap:10px;margin:10px;text-align:center;}.gridContainer-3x2{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:10px;margin:10px;text-align:center;}.gridContainer-4x2{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);gap:10px;margin:10px;text-align:center;}

同じような記述が多くなってしまい、追加や変更のたびに全て書き換えなければ行けないのは少し手間です。
grid-template-columnsgrid-template-rowsを切り離し、以下のようにリファクタリングしたとします。

<divclass="gridContainer -col2 -row2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div></div><divclass="gridContainer -col3 -row2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 5"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 6"></div></div><divclass="gridContainer -col4 -row2"><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 1"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 2"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 3"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 4"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 5"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 6"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 7"></div><divclass="girdItem"><imgsrc="/img/doggo.png"alt="イッヌ 8"></div></div>
Autoprefixerによる変換前
.gridContainer{display:grid;gap:10px;margin:10px;text-align:center;&.-col2{grid-template-columns:repeat(2,1fr);}&.-col3{grid-template-columns:repeat(3,1fr);}&.-col4{grid-template-columns:repeat(4,1fr);}&.-row2{grid-template-rows:repeat(2,1fr);}}

共通部分が gridContainerにまとまり、SCSS での記述はスッキリした気がしますが、残念ながらこの記述では IE11 での自動配置は行なわれません。

Autoprefixerによる変換後
.gridContainer{display:-ms-grid;display:grid;gap:10px;margin:10px;text-align:center;}.gridContainer.-col2{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,1fr);}.gridContainer.-col3{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,1fr);}.gridContainer.-col4{-ms-grid-columns:(1fr)[4];grid-template-columns:repeat(4,1fr);}.gridContainer.-row2{-ms-grid-rows:(1fr)[2];grid-template-rows:repeat(2,1fr);}

対応

Autoprefixer が自動配置に対応するためには、同じ宣言ブロック内で grid-template-columnsgrid-template-rowsが定義されている必要があるようです。
また、 gapプロパティを使用する場合は『補足:gap プロパティの挙動』で記述しているような振る舞いとなりますので、こちらも同じ宣言ブロック内に記述しておく必要があります。
正直なところあまり綺麗な書き方だとは思えませんが、以下のようにリファクタリングを行います。

Autoprefixerによる変換前
.gridContainer{display:grid;margin:10px;text-align:center;&.-col2.-row2{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);gap:10px;}&.-col3.-row2{grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:10px;}&.-col4.-row2{grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);gap:10px;}}

この記述では Autoprefixer による IE11 向けグリッドの再生成、および自動配置が行なわれます。

Autoprefixer による変換後コード
Autoprefixerによる変換後
.gridContainer{display:-ms-grid;display:grid;margin:10px;text-align:center;}.gridContainer.-col2.-row2{-ms-grid-columns:1fr10px1fr;-ms-grid-rows:1fr10px1fr;}.gridContainer.-col2.-row2>*:nth-child(1){-ms-grid-row:1;-ms-grid-column:1;}.gridContainer.-col2.-row2>*:nth-child(2){-ms-grid-row:1;-ms-grid-column:3;}.gridContainer.-col2.-row2>*:nth-child(3){-ms-grid-row:3;-ms-grid-column:1;}.gridContainer.-col2.-row2>*:nth-child(4){-ms-grid-row:3;-ms-grid-column:3;}.gridContainer.-col3.-row2{-ms-grid-columns:1fr10px1fr10px1fr;-ms-grid-rows:1fr10px1fr;}.gridContainer.-col3.-row2>*:nth-child(1){-ms-grid-row:1;-ms-grid-column:1;}.gridContainer.-col3.-row2>*:nth-child(2){-ms-grid-row:1;-ms-grid-column:3;}.gridContainer.-col3.-row2>*:nth-child(3){-ms-grid-row:1;-ms-grid-column:5;}.gridContainer.-col3.-row2>*:nth-child(4){-ms-grid-row:3;-ms-grid-column:1;}.gridContainer.-col3.-row2>*:nth-child(5){-ms-grid-row:3;-ms-grid-column:3;}.gridContainer.-col3.-row2>*:nth-child(6){-ms-grid-row:3;-ms-grid-column:5;}.gridContainer.-col4.-row2{-ms-grid-columns:1fr10px1fr10px1fr10px1fr;-ms-grid-rows:1fr10px1fr;}.gridContainer.-col4.-row2>*:nth-child(1){-ms-grid-row:1;-ms-grid-column:1;}.gridContainer.-col4.-row2>*:nth-child(2){-ms-grid-row:1;-ms-grid-column:3;}.gridContainer.-col4.-row2>*:nth-child(3){-ms-grid-row:1;-ms-grid-column:5;}.gridContainer.-col4.-row2>*:nth-child(4){-ms-grid-row:1;-ms-grid-column:7;}.gridContainer.-col4.-row2>*:nth-child(5){-ms-grid-row:3;-ms-grid-column:1;}.gridContainer.-col4.-row2>*:nth-child(6){-ms-grid-row:3;-ms-grid-column:3;}.gridContainer.-col4.-row2>*:nth-child(7){-ms-grid-row:3;-ms-grid-column:5;}.gridContainer.-col4.-row2>*:nth-child(8){-ms-grid-row:3;-ms-grid-column:7;}

最後のその時まで、できるだけ IE11 対応をして欲しいのです

このようなことは言わないで下さい。
「もう見てはいられない。」「居たたまれない。」などと。
あなたが IE11 対応をしてくれるから、最後の日までコンテンツを多くの人に届けることができるのです。

忘れないで下さい、私は生涯 IE11 ユーザーを一番愛しているのです。

【現役Vueフロントエンジニアおすすめ】絶対に失敗しない画像エフェクト"総まとめ23選"(コピペOK)

スクリーンショット 2020-07-07 18.05.39.png

こちらの記事に記載のデザイン・コードは全て自由に使っていただいて大丈夫です(筆者が作成したため)
プロジェクトに取り込んでより充実したデザインにしてもらえれば○
*動きだけ確認したい初学者の方はJSFiddle使ってみるといいですよ


clip path polygonで2枚の画像を半々(三角形)で表示するCSSアニメーション3選

動きは下の画像のような感じになります

1. 【ぼやけるアニメーション】clip path : polygon+filter : blur

clip-path-image-animation1.png

2. 【美しいアニメーション】clip path : polygon+filter : grayscale contrast saturate

clip-path-image-animation2.png

3. 【オーロラアニメーション】clip path : polygon+filter : grayscale saturate hue-rotate

clip-path-image-animation3.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.37.32.png


【解説付き】マテリアルデザインをコピペで実装!CSSスライダーアニメーション6選(filter編)

動きは下の画像のような感じになります

1. hoverで画像が半透明に?超便利なスライダーアニメーション

click-animation-sliders-filter-opacity.png

2. hoverで画像の色が暴れ出すスライダーアニメーション

click-animation-sliders-filter-hue-rotate.png

3. hoverでモノクロ画像が200倍色鮮やかになるスライダーアニメーション

click-animation-sliders-filter-grayscale.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.42.27.png


絶対失敗しないナビゲーションメニューサンプル3選

動きは下の画像のような感じになります

1. シンプルだけど洗練されたスライダーアニメーション

click-animation-sliders.png

2. blurでぼやけながらスライドするスライダーアニメーション

click-animation-sliders2.png

3. blurとmargin-leftでぼやけながら右へスライドするスライダーアニメーション

click-animation-sliders3.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.43.47.png


hoverで画像の色が暴れ出す!filter: hue-rotateとtransitionでCSSエフェクト3選

動きは下の画像のような感じになります

1. 画像がイルミネーションみたいに光りながら回転するhoverエフェクト

css-effects-hover-filter-hue-rotate-spin.png

2. 臨場感あふれる花火画像が立体的に回転するhoverエフェクト

css-effects-hover-filter-hue-rotate-spin2.png

3. 色相回転しながらぼかしアニメーションを効かせて消えていくhoverエフェクト

css-effects-hover-filter-hue-rotate-blur.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.48.16.png

CSSだけ!hoverとtransitionで作る動的画像エフェクト4選(コピペOK)

動きは下の画像のような感じになります

1. 階段のように背景が現れるhoverエフェクト

animation-image-1.png

2. 上からブロックが落ちてくるように背景が現れるhoverエフェクト

animation-image2.png

3. 斜め上からスクリーンのように背景が現れるhoverエフェクト

animation-image3.png

4. 手裏剣のように回転(rotate)しながら背景が現れるhoverエフェクト

animation-image4.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.53.25.png

hoverとtransitionでオシャレなCSS画像エフェクト4選!(背景がスっと表示される)

動きは下の画像のような感じになります

1. フワッと背景が現れるhoverアニメーション

hover-animation-image-fadein.png

2. 背景が徐々に画像全体へ広がるhoverアニメーション

hover-animation-image-box.png

3. 扉が閉まるように背景が現れるhoverアニメーション

hover-animation-image-door.png

4. 丸い背景が徐々に画像全体に広がるhoverアニメーション

hover-animation-image-squere.png

:point_down:コードを確認する

スクリーンショット 2020-07-07 17.56.56.png

【javascript】 クリックイベント click  文字色変更 文字変更 innerHTML / classList / toggle

【ゴール】

その① 文字色変化

画面収録 2020-07-07 18.26.59.mov.gif

その② 文字大きさ変化

画面収録 2020-07-07 18.29.16.mov.gif

【メリット】

■ javascript 理解度向上

【必要なもの】

■ HTML記述(ページ内容表示、文や、文字の表示)
■ CSS記述(ページの装飾、色変更等)
■ javascript記述(CSSでは実現できない動き、)

【コード】

その①文字色を変更

HTML

*id を付与。

index.html
<buttonid="button">文字色が変わるよ</button><h2id="text">文字色が変わるよ</h2>

CSS

*クリックイベント後の処理

style.css
.font-color{color:pink;}

javascript

*button id がクリックされたらスコープ内を処理
toggleメソッドはクラスが存在していれば削除、なければ付与。超絶便利メソッド

script.js
constchange=document.getElementById('button');change.addEventListener('click',()=>{document.getElementById('text').classList.toggle('font-color');});

その② 文字を変更

HTML

*その①と同じ

index.html
<buttonid="button">文字が変わるよ</button><h2id="text">文字色が変わるよ</h2>

CSS

今回は不要

javascript

*button id がクリックされたらスコープ内を処理
innerHtmlメソッドで文字を変更

script.js
constchange=document.getElementById('button');change.addEventListener('click',()=>{document.getElementById('text').innerHTML='<h2>変わったね</h2>';});

【留意点】

■アロー関数を積極的に使う。推奨の為
■javascript取得するIDを間違えないようにする
■メソッド、基本的な物を覚える。

【合わせて読みたい】

■ 【Javascript】 メソッド まとめ 基礎基本コード メモ
https://qiita.com/tanaka-yu3/items/2438798d159fa402b1d5

■ 【アロー関数】 javascript () => {}  意味 一言で、 入門 
https://qiita.com/tanaka-yu3/items/e16d51280f647aa19a58

■ドットインストールカリキュラム javascript
https://dotinstall.com/lessons/basic_javascript_v4/50603

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

100日チャレンジの363日目

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

【初心者でもわかる】web制作で使われる画像3種類。[.gif]と[.jpg]と[.png]の違い。

どうも、7noteです。今回はwebで使われる3種類の画像の使い分け方の説明。

WEBサイト制作をするときに初心者が時間をかけてしまいガチなのが、画像の書き出し。
完成したデザインのフォトショップデータやイラレデータから画像を書き出すとき、

「これは、jpgって書いてるので書き出したらいいのか??」
「なんか書き出したけど後ろに白い背景残っちゃった、なんでだろ。。」

失敗例

jpg.jpg

こんな経験ありませんか?
実はWEBサイトの制作には適切な画像の書き出し方があります!

なんでもかんでも同じ種類の画像で書き出すのはやめて、画像書き出しの初心者を卒業しましょう!

違いはこちら

違いpngjpggif
容量
色の数1670万色(256色) ※11670万色256色
圧縮方法可逆非可逆 *2可逆
背景の透明×
アニメーション××

※1 pngは正確には「png-8」と「png-24」の2種類があり、使われている色の数が違います
 「png-8」だと256色でしか表現できないので基本的には「png-24」を使います。
※2 非可逆の場合、画像を保存し直すだけで画質が荒くなります。

容量の違い

pngjpggif
容量

画像の容量(データの大きさ)は基本的には小さければ小さいほど良いとされています。
サイトはデータの塊なので、サイトの訪問者はそのデータを読み込む必要があります。
大量のデータを読み込むためには、時間がかかります。
なので容量が軽ければ軽いほど読み込む速度が上がり、利用者がストレスなくサイトをみることができるので軽い方が良いとされています。

色の数の違い

pngjpggif
色の数1670万色(256色)1670万色256色

色の数は画像を表現するのに何色の色を使うのかと言うことです。
つまり色の数が多いほど、より繊細な色の違いまで表現できるので、綺麗な画像になります。
ただ、色の数が多ければ、比例して容量も大きくなるので、色数の少ない画像ならgifで書き出す方がいいでしょう。

圧縮方法の違い

pngjpggif
圧縮方法可逆非可逆可逆

先ほども書きましたが、非可逆の場合、画像を保存し直すだけで画質が荒くなります。
可逆の場合は何度書き出したり圧縮しても画質が荒くなることはありません。

背景の透明の違い

pngjpggif
背景の透明×

jpgだけは背景を透明にすることはできません。
背景が透明の部分がある画像を書き出すときは、必ずpngがgifを使いましょう。

gifアニメーション(動画)

pngjpggif
動画××

唯一画像に動きを付けられるのがgifです。
こういうやつ↓
dog.gif

こんな時、どれがいいの?参考例

*「文字サイズのくらいの小さいアイコン」*
card-sharp-solid.png

gif】かな。
でも丸みが綺麗に出ないでギザギザになっちゃったら【png】使うかも。


*「四角形の写真」*
名称未設定-2.jpg

ほぼ間違いなく【jpg】かな。


*「丸い写真」*
名称未設定-3.png

背景が透明の箇所があるので、ほぼ間違いなく【png】かな。


*「ブラウザ標準でない文字など」*
名称未設定-4.gif

1つ目と同じで【gif】かな。単色なので軽いgif。
でも丸みが綺麗に出ないでギザギザになっちゃったら【png】使うかも。

まとめ

「gif」の特徴

  • 容量が一番軽いから可能ならgifが良い。
  • でも256色しか使えないから単色の画像専門。
  • 背景は透明にできる。
  • 唯一アニメーション画像にできる。

「jpg」の特徴

  • 四角形の写真を書き出すならjpg。
  • pngよりも容量が軽い。
  • 圧縮方法が非可逆なので、書き出しする度画質が悪くなる。
  • 背景は透明にできない。

「png」の特徴

  • 容量が大きいので重い。
  • グラデーションの表現などに適している。
  • 背景は透明にできる。
  • 最悪、困ったらpngで書き出せばなんとかなる。

おそまつ!

(コメント・質問・ソースの指摘等なんでもウェルカムです!初心者の方でも気軽に質問ください!)

【CSS】インライン要素の行間を調整しながら、CSSでマーカーを引く

linear-gradient を使って、マーカー風のCSSをつけることがよくあるのですが、インライン要素の場合、line-heightが効かずに戸惑うことがちょこちょこあったので、メモ。

親要素にline-heightを設定する

親要素に line-height を設定することで、小要素の line-height が設定できる様になります。

例:

<divclass="parent"><pclass="child">テキストテキストテキスト</p></div>
.parent{line-height:1;}.parent.child{display:inline;line-height:1.8;<-きく!background:linear-gradient(transparent60%,#faaa1e60%);}

CSSとJavascriptでFacebook風アニメーションボタンを作ってみた

テーマ

Facebookのデザインはシンプルでイケてますよね。。
(https://www.facebook.com/)

今回は、Facebookの新規投稿ボタンを題材に、
リップルアニメーションという効果をつけてボタンをリッチにするという目的をもって作業を開始しました!

完成形

aa.gif

ソースはcodepenに↓↓↓

See the Pen Ripple Animation Button by TARO (@shun-ichirotanaka) on CodePen.

参考サイト

https://tkzo.jp/blog/how-to-make-ripple-animation/#i-5

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

100日チャレンジの364日目

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

リンクに飛べるのをわかりやすくする方法

プログラミングの勉強日記

2020年7月8日 Progate Lv.148

目的

 こちらの記事で画像にリンクを貼る方法やCSSでリンクデザインを変更する方法を説明しているので、こちらも読んでみてください。

 文字に下線がある場合やリンクの文字だけ色が違う場合はリンクが貼られていることがわかりやすいが、画像にリンクが貼られていることは物によっては作成者にしかわからない場合がある。なので、今回はリンクに飛べることをわかりやすくするために用いた方法を紹介する。

文字にリンクを設定している場合

 リンクに飛べるのをわかりやすくしたいけど、見た目上下線を付けたくないし、色も揃えたいから変えたくない、、

0708-2.PNG

ヘッダー部分とHelloの下に書かれてるResumeとWorksはリンクに飛べるようになっている。そこで、カーソルを合わせたときにだけ下線を表示するようにした。

0708-3.PNG

この上の写真ではヘッダーのResumeにカーソルを合わせている。

コード

 カーソルを合わせたときのデザイン変更はセレクタに:hoverと書くだけ。今回は標準の状態ではtext-decoration: none;で下線部を消去しているので、マウスカーソルをリンク上に乗せたときにtext-decoration: underline;を指定して下線部を表示させている。

HTMLファイル
<nav><ul><li><ahref="index.html">Top page</a></li><li><ahref="resume\index.html">Resume</a></li><li><ahref="works\index.html">Works</a></li></ul></nav>
CSSファイル
a{text-decoration:none;}a:hover{text-decoration:underline;}

画像にリンクを設定している場合

 画像のリンクは製作者にしかわからない可能性もある。よって、文字のリンクのときよりもデザインの工夫が必要であると感じた。
 今回は下の写真のようにWebサイトの写真にリンクを貼っている。

0708.PNG

写真で見るとわかりにくいが、画像にカーソルを合わせると影を消して、画像を大きくしている。

0708-1.PNG

Twitterで動画を乗せたので詳しくはこっちを見てください↓↓

コード

 文字のリンクと同様に、カーソルを合わせたときのデザイン変更はセレクタに:hoverと書く。影はCSSでbox-shadowを指定することでつけられる。影を消すときはbox-shadow: none;を指定する。
 transform:scale()で要素を拡大縮小することができる。()に数値を指定することで拡大縮小をできる。scale()関数では2つの数値を使う。つ目の数値はX方向、2つ目の数値はY方向の比率で、2つ目の数値を省略すると最初の値と同じになる。

HTMLファイル
<imgsrc="../photo/travel.PNG"class="button buttonTravel">
CSSファイル
.buttonTravel{cursor:pointer;box-shadow:10px10pxrgb(120,162,224);}.buttonTravel:hover{cursor:pointer;/* 影を消す */box-shadow:none;/* 拡大する */transform:scale(1.1);}

transitionの復習(100 days of code)

はじめに

100 days of code4日目。
今日はcssのtransitionについて勉強したので復習としてまとめました。
Web制作やる人は押さえておきたいプロパティです。

transitionの例

transitionの使い方は以下のようになります。(一例)

// transitionは1行でまとめると、
transition: all 1s ease 2s;

// transitionを構成する詳細プロパティ
transition-property: all; // 変化対象のCSS
transition-duration: 1s; // 変化の開始から終了までの時間
transition-timing-function: ease; // 変化の仕方
transition-delay: 2s; // 変化がいつ始まるか(遅延)

まとめ

transitionは忘れやすいプロパティなので、復習としてまとめました。
明日も頑張ります。

よくあるヘッダーレイアウト ~FlexBox~

image.png

FlexBoxを使うとWEBデザインでよくあるレイアウトを簡単にコーディングすることができます。

<div class="flex">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
</div>
.flex {
  display: flex;
  justify-content: flex-end;
}
.flex > :first-child {
  margin-right: auto;
}

これだけ

justify-content: flex-end はflexアイテムを全て右に寄せる設定です。

この際、Flexアイテムに「margin-right: auto;」の記述を組み合わせると、設定したアイテムの右側に自動的に余白を作ることができます。

吉野家1000円ガチャをJavaScriptで作ってみた.

超初心者プログラマーの平岡です(本当です).
ネットではAKRという名前をよく使っていて,本業は予備校講師で,おいしい数学という,月間10万PV程の高校数学のサイトを運営しています.

さて,Twitter上で,サイゼリア1000円ガチャというサイトが流れてきて,これならプログラミング勉強中(JavaScriptを勉強して半年)の私でも作れるのではないか??と思い,思いきって大好きな吉野家バージョンをネイティブのJavaScriptのみで作ってみることにしました.

それが吉野家1000円ガチャです。

JavaScriptを勉強して半年の私のコードに大して価値があると思えないので,イートインのHTMLとJavaScriptのコードを全公開します.

なお,初心者なので,もっと上手くコードが書ける可能性大ですし,この後コードを変える可能性もありますが,是非私に言って頂けると嬉しいです。

yoshinoya1000-eatin.html
<h1style="text-align: center; font-size: x-large">吉野家1000円ガチャ</h1><pstyle="text-align: center; font-size: large"><b>イートイン</b></p><pstyle="text-align: center"><ahref="yoshinoya1000-eatin.html"class="btn-square">イートインガチャを回す</a></p><divid="result"class="waku"style="background-color: #FFE7BF"></div><pstyle="text-align: center"><aclass="share-7"id="getResult"><iclass="fab fa-twitter"></i></a></p><script src="jsfile/gacha-yo-eatin.js"></script><br><br><pstyle="text-align: center; font-size: small"><ahref="yoshinoya1000.html">吉野家1000円ガチャ</a></p><pstyle="text-align: center; font-size: small">respect for <ahref="https://saizeriya-1000yen.herokuapp.com"target="_blank">サイゼリア1000円ガチャ</a></p><pstyle="text-align: center; font-size: small">made by <ahref="https://twitter.com/akr_trader"target="_blank">AKR</a></p>

上のCSSのコードは割愛します.
続いてJavaScriptです.

gacha-yo-eatin.js
letgetResult=document.getElementById('getResult');letresult=document.getElementById('result');varmenu={"牛丼(小盛)":332,"牛丼(並盛)":352,"牛丼(アタマの大盛)":452,"牛丼(大盛)":452,"牛丼(特盛)":632,"牛丼(超特盛)":722,"豚丼(小盛)":318,"豚丼(並盛)":338,"豚丼(アタマの大盛)":438,"豚丼(大盛)":498,"豚丼(特盛)":618,"豚丼(超特盛)":708,"牛カルビ丼(小盛)":528,"牛カルビ丼(並盛)":548,"牛カルビ丼(アタマの大盛)":648,"牛カルビ丼(大盛)":708,"牛カルビ丼(特盛)":828,"牛カルビ丼(超特盛)":918,"牛皿定食(並盛)":498,"牛皿定食(大盛)":598,"牛皿定食(特盛)":698,"牛カルビ定食":598,"炙り塩鯖定食":598,"鯖みそ定食":598,"牛鮭定食":548,"豚鮭定食":548,"鰻重(一枚盛)":788,"スパイシーカレー(並盛)":328,"スパイシーカレー(大盛)":418,"チキンスパイシーカレー(並盛)":514,"チキンスパイシーカレー(大盛)":604,ライザップ牛サラダ:500,ライザップ牛サラダエビアボガド:600,とん汁:186,しじみ汁:158,あさり汁:158,味噌汁:65,生野菜サラダ:102,ポテトサラダ:130,ごぼうサラダ:130,エビアボガドサラダ:198,牛小鉢:167,玉子:65,半熟玉子:75,ねぎ玉子:102,チーズ:102,お新香:102,キムチ:102,:195,ご飯:139,のり:65,のり:65,納豆:84,"牛皿(並盛)":302,"牛皿(大盛)":402,"牛皿(特盛)":502,"豚皿(並盛)":288,"豚皿(大盛)":388,"豚皿(特盛)":488,"牛カルビ皿":458,"鰻皿(一枚盛)":698,"瓶ビール":417,"冷酒":315,}varmenucalorie={"牛丼(小盛)":488,"牛丼(並盛)":652,"牛丼(アタマの大盛)":741,"牛丼(大盛)":863,"牛丼(特盛)":1030,"牛丼(超特盛)":1169,"豚丼(小盛)":530,"豚丼(並盛)":707,"豚丼(アタマの大盛)":797,"豚丼(大盛)":931,"豚丼(特盛)":1172,"豚丼(超特盛)":1319,"牛カルビ丼(小盛)":618,"牛カルビ丼(並盛)":802,"牛カルビ丼(アタマの大盛)":1019,"牛カルビ丼(大盛)":1136,"牛カルビ丼(特盛)":1327,"牛カルビ丼(超特盛)":1502,"牛皿定食(並盛)":739,"牛皿定食(大盛)":797,"牛皿定食(特盛)":968,"牛カルビ定食":966,"炙り塩鯖定食":830,"鯖みそ定食":895,"牛鮭定食":712,"豚鮭定食":800,"鰻重(一枚盛)":670,"スパイシーカレー(並盛)":539,"スパイシーカレー(大盛)":691,"チキンスパイシーカレー(並盛)":747,"チキンスパイシーカレー(大盛)":898,ライザップ牛サラダ:404,ライザップ牛サラダエビアボガド:430,とん汁:176,しじみ汁:42,あさり汁:51,味噌汁:20,生野菜サラダ:25,ポテトサラダ:122,ごぼうサラダ:70,エビアボガドサラダ:83,牛小鉢:130,玉子:76,半熟玉子:76,ねぎ卵:103,チーズ:98,お新香:13,キムチ:26,:133,ご飯:386,のり:5,のり:5,納豆:98,"牛皿(並盛)":257,"牛皿(大盛)":315,"牛皿(特盛)":486,"豚皿(並盛)":320,"豚皿(大盛)":394,"豚皿(特盛)":634,"牛カルビ皿":416,"鰻皿(一枚盛)":242,"瓶ビール":215,"冷酒":185,}varmenulength=0;varmenucalorielength=0;varary=[];vararycalorie=[];for(iinmenu){menulength++;ary.push(menu[i]);}for(iinmenucalorie){menucalorielength++;arycalorie.push(menucalorie[i]);}varrand=Math.floor(Math.random()*menulength);varkey=Object.keys(menu);lettotal=ary[rand];lettotalcalorie=arycalorie[rand];varkey1=key[rand];result.innerHTML='<p style="text-align: center"><b>イートインガチャ結果</b></p><p><strong style="font-size: large">'+key[rand]+'</strong>:'+ary[rand]+'円 '+arycalorie[rand]+'kcal</p>';while(total<=1700){varrand2=Math.floor(Math.random()*menulength);total=total+ary[rand2];totalcalorie=totalcalorie+arycalorie[rand2];key1=key1+''+key[rand2];if(total<=844){document.getElementById('result').innerHTML+='<p><strong style="font-size: large">'+key[rand2]+'</strong>:'+ary[rand2]+'円 '+arycalorie[rand2]+'kcal</p>';}elseif(total<=909){document.getElementById('result').innerHTML+='<p><strong style="font-size: large">'+key[rand2]+'</strong>:'+ary[rand2]+'円 '+arycalorie[rand2]+'kcal</p>';break;}else{total=total-ary[rand2];totalcalorie=totalcalorie-arycalorie[rand2];key1=key1.replace(''+key[rand2],'');}}document.getElementById('result').innerHTML+='<br><p style="text-align: center">税抜合計:'+total+'円<br><b>税込合計:'+Math.floor(total*1.1)+'円<br>カロリー合計:'+totalcalorie+'kcal </b></p>';getResult.addEventListener('click',functiontwitText(){vars,url;s="吉野家1000円ガチャの結果は………"+key1+" で税込合計"+Math.floor(total*1.1)+"円で,カロリーの合計は"+totalcalorie+"kcal です。";url='hiraocafe.com/yoshinoya1000.html';if(s!=""){if(s.length>140){//文字数制限alert("テキストが140字を超えています");}else{//投稿画面を開くurl="http://twitter.com/share?url="+escape(url)+"&text="+s;window.open(url,"_blank","width=600,height=300");}}})

解説します.

まず,連想配列を使って,吉野家の商品の名前と値段,名前とカロリーが対応したものを用意します。

この値段とカロリーを順に配列に格納していきます。

乱数を使って,ランダムに番号を選ぶようにし,let total = ary[rand];とlet totalcalorie = arycalorie[rand];で,最初の商品の値段とカロリーをそれぞれ,total と totalcalorie に代入します.同時にinnnerHTMLを使って,結果をHTMLに出力します.

その次はwhile文です.totalが1700以下で繰り返すとありますが,1700でなくていいです.大事なのは,税抜844円以下で,ランダムに商品を選ぶことを繰り返し,909円以下であればbreakで繰り返し処理を中止します。そして909より上であれば,最後に追加した商品の値段を引き,replaceで名前を削除することです.

なぜ税抜845円以上909円以下で中止するかというと,一番安い商品が税抜65円(例えば味噌汁)なので,この価格だと味噌汁すら買えません.なぜ買えないかというと,消費税が10%なので税抜価格だと合計909円までが限界だからです.

最後に苦労したのは,ガチャの結果を,twitterに引き渡すことです。

実用的には,玉子関連が多く出ますし,定食が出て味噌汁が出るのも避けたいので,のりを少し多めに登録したのがポイントです。

以上です.吉野家1000円ガチャは,初心者がプログラミング(特にwhile文や,関数,変数の置き方)のいい練習になると思います。

【EMMET 記法】 基本 よく使うやつ エメット記法 まとめ

【メリット】

■ コーディングが早くなります。
■ ミスが少なくなります。

【開発環境】

■ Mac OS catalina
VS code

【やっていきましょう】

HTML版

div.hoge

hoge.html
<divclass="hoge"></div>

div#hoge

hoge.html
<divid="hoge"></div>

div*3

hoge.html
<div></div><div></div><div></div>

div>h2

hoge.html
<div><h2></h2></div>

CSS版

h100

hoge.css
heigh:100px;

w100

hoge.css
width:100px;

bc

hoge.css
background-color:#fff;

c

hoge.css
color:#fff;

ta

hoge.css
text-align:center;

m10

hoge.css
margin:10px;

p10

hoge.css
padding:10px;

【まとめ】

■基本的に使うやつなので、他にもたくさんあります。
■実装5倍くらいのスピードになるので、是非

【合わせて読みたい】

【メソッド集】 rails メソッド まとめ 基礎 随時追加
https://qiita.com/tanaka-yu3/items/89abad875187494bec53

【Javascript】 メソッド まとめ 基礎基本コード メモ
https://qiita.com/tanaka-yu3/items/2438798d159fa402b1d5

【Rails new】Ruby on rails アプリケーション作成
https://qiita.com/tanaka-yu3/items/3fe1ed2852c6513d3583

■参考 emmet記法
https://tracpath.com/works/development/emmet-for-web-developers/

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

100日チャレンジの365日目

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

【初心者でもわかる】デザインからコーディングする時の考え方(実践例あり)

どうも、7noteです。今回はデザインからコーディングに写すときのコーダーの頭の中を解説。

ところで「YOASOBI 夜に駆ける」はやってますね。私も1日中ループで「夜に駆ける」を聞いています。
(あ、雑談なので内容を知りたい人は次の見出しまで読み飛ばしてください。)

なんかいろいろな人が歌ってみたとかYoutubeとかで上げているので、自分も何かできないかなと考えたときにふと「夜に駆ける」のCDジャケットをみて、「これ、背景CSSで再現できるんじゃね?」と思って・・・作っちゃいました(笑)。

・・・と言うわけで、今回は流行りに便乗してCDジャケットを参考にして、CSSで再現してみました!

でも真面目な話、これ意外と練習になるんですよ。
まだコーダーの経験が浅い頃、休日のカフェでipadを使って注文カウンター上の掲示板メニューをCSSで再現したりして遊んでいました。

なぜこれが練習になるかと言うと、いままでならさらっとしか見たことないものでも、再現するとなると細かい部分まで見なければ作れません。
文字の大きさや色使い。余白の取り方など細部のデザインに気づくことができます。

またデザインからタグの組み方をああしようかなこうしようかなと構成を考えられるので、コーディングの作業スピードを上げることができます。

初心者の人向けに、まずはそのタグの構成の分け方や考え方からいっしょに見ていきましょう。
コーディングができる人の考え方や頭の中の構造や構成が参考になれば嬉しいです!

完成予定図

YOASOBI.png
※amazonより引用

デザインをタグレベルに分解

最初にも書きましたが、流行りに便乗して YOASOBI 「夜に駆ける」 のCDジャケットを作っていきたいと思います。
まずはこのデザインを見た目から分解していきます。いくつか重なっているところも考えて重なっている後ろのパーツから考えていきます。

これは人によって若干違いはあると思いますが、今回はこのように分解してみました。

  • 一番背景にある赤
  • 赤背景の上に乗っている網のような模様
  • 網模様の下の薄茶色いブロック
  • その薄茶色い下にある床?っぽいデザインのとこ
  • 人の絵(ここだけ画像予定)
  • 左の文字(YOASOBI)
  • 右の文字(夜に駆ける)

全部で7種類に分けました。これはデザインを分解しただけなので、
これをタグに置き換えて考えていきます。
HTMLのタグに置き換えるとこんな感じかな?

index.html
<divclass="jacket"><divclass="building"><!-- ビルの上っぽそうなのでそのパーツを1まとまりにしました --><divclass="ami"></div><!-- 網っぽいところ --><divclass="block"></div><!-- ブロックっぽいところ --><divclass="tile"></div><!-- 床っぽいところ --></div><pclass="left_text">YOASOBI</p><!-- 左の文字 --><pclass="right_text">夜に駆ける</p><!-- 右の文字 --><figure><imgsrc="hito.png"alt="人のイラスト"></figure><!-- ここだけ画像。好きな画像を入れてね。 --></div>

では一つずつCSSを書いていきたいと思います!

.jacketの大きさを決めて、赤背景を入れる

今回は(横500px × 縦500px)で作っていきたいと思います。

style.css
.jacket{width:500px;height:500px;background:#F35975;position:relative;}

buildingを下寄せに配置する

style.css
.building{width:100%;position:absolute;left:0;bottom:0;}

amiを入れる

まずは網のぶんの高さを確保します。
作戦としては斜線背景を2種類重ねて網を表現します。
背景は複数指定できるので、やり方もいっしょに確認していきます。

style.css
.building.ami{width:100%;height:95px;background-color:#fff;background:linear-gradient(-45deg,#4960765%,transparent5%,transparent45%,#49607645%,#49607655%,transparent55%,transparent95%,#49607695%),linear-gradient(45deg,#4960765%,transparent5%,transparent45%,#49607645%,#49607655%,transparent55%,transparent95%,#49607695%);background-size:10px10px;}

backgroundが長く書いてますが、「linear-gradient(↘︎向きの斜線), linear-gradient(↙︎向きの斜線)」の2種類を書いているだけです。
「-45deg」が、背景の角度を変更。「#496076 5%」など書いているのが、0%から5%までは#496076色にしなさいと言う指示が書いてあります。これをつなげて書いているので、0~5%までは青色。5%~45%までは透明。45%〜55%までは青色・・・みたいに書いて、線を表現しています。

ブロックを配置

ブロック分の高さを確保。
グラデーションが少しついているので、背景色にはlinear-gradientを指定。

style.css
.building.block{width:100%;height:20px;background:linear-gradient(#b78d9760%,#99899380%,#838190);}

床を再現

床もグラデーションがかかっているので背景色にlinear-gradientを指定。
また上にはボーダーを引いて、斜めの線は疑似要素(::beforeと::after)で再現します。

style.css
.building.tile{width:100%;height:130px;border-top:solid5px#415971;background:linear-gradient(#707c8e2%,#5369805%,#536980);position:relative;}.building.tile::before{content:'';width:90px;height:90px;background:linear-gradient(-45deg,transparent,transparent49.3%,#41597149.3%,#41597150.7%,transparent50.7%,transparent);position:absolute;top:0;left:0;display:block;}.building.tile::after{content:'';width:90px;height:90px;background:linear-gradient(45deg,transparent,transparent49.3%,#41597149.3%,#41597150.7%,transparent50.7%,transparent);position:absolute;top:0;right:0;display:block;}

左右の文字を配置

writing-modeを使って縦書きにします。英語は縦書き指定をすると90度回転した文字で縦書きになります。
font-famiryを指定していますが、ブラウザやデバイスにフォントがないと再現されないので、あってもなくてもいいと思います。

style.css
.left_text{color:#04274B;font-size:28px;font-family:"HG創英角ゴシックUB","HG創英角ゴシック","他のゴシック系フォントなど";/* ※基本的にブラウザではこのフォントでは表示されません */letter-spacing:1.35em;line-height:1;writing-mode:vertical-rl;position:absolute;top:90px;left:0;margin:0;}.right_text{color:#04274B;font-size:50px;font-family:"游明朝",YuMincho,"游教科書体","他の明朝系フォントなど";line-height:1;letter-spacing:0.5em;writing-mode:vertical-rl;position:absolute;top:0;right:0;margin:0;}

人の画像を配置

好きな横顔の写真を配置します。

style.css
figure{position:absolute;left:25%;bottom:0;margin:0;}

完成!

YOASOBI_ok.png

どうでしょう。自分で言うのもあれですが、なかなかの完成度かなと思います。
本物と見比べると、文字が違ったり微妙な表現の違いがわかるかなと思います。
YOASOBI_比較.png
(網の線太かった・・・)

各所で疑似要素や背景のグラデーションを使っているので、このあたりの使い方がまだあやふやな人は過去の記事を参考にしていただければ嬉しいです。

疑似要素について↓↓
【初心者でもわかる】擬似要素(::before,::after)でサンドイッチを作る方法

グラデーションについて↓↓
【初心者でもわかる】グラデーションをつかって、コップに好きなジュースを注ぐ方法

コピペして遊びたい人はこちらをどうぞ!

index.html(コピペで作れる用)
<div class="jacket">
    <div class="building"> <!-- ビルの上っぽそうなのでそのパーツを1まとまりにしました -->
        <div class="ami"></div> <!-- 網っぽいところ -->
        <div class="block"></div> <!-- ブロックっぽいところ -->
        <div class="tile"></div> <!-- 床っぽいところ -->
    </div>
    <p class="left_text">YOASOBI</p> <!-- 左の文字 -->
    <p class="right_text">夜に駆ける</p> <!-- 右の文字 -->
    <figure><img src="hito.png" alt="人のイラスト"></figure> <!-- ここだけ画像。好きな画像を入れてね。 -->
</div>




<style>
    .jacket {
        width: 500px;
        height: 500px;
        background: #F35975;
        position: relative;
    }

    .building {
        width: 100%;
        position: absolute;
        left: 0;
        bottom: 0;
    }

    .building .ami {
        width: 100%;
        height: 95px;
        background-color: #fff;
        background: linear-gradient(-45deg, #496076 5% ,transparent 5%, transparent 45%, #496076 45%, #496076 55%, transparent 55%, transparent 95%, #496076 95%),linear-gradient(45deg, #496076 5% ,transparent 5%, transparent 45%, #496076 45%, #496076 55%, transparent 55%, transparent 95%, #496076 95%);
        background-size: 10px 10px;
    }

    .building .block {
        width: 100%;
        height: 20px;
        background: linear-gradient(#b78d97 60%, #998993 80%, #838190);
    }

    .building .tile {
        width: 100%;
        height: 130px;
        border-top: solid 5px #415971;
        background: linear-gradient(#707c8e 2%, #536980 5%, #536980);
        position: relative;
    }

    .building .tile::before {
        content: '';
        width: 90px;
        height: 90px;
        background: linear-gradient(-45deg, transparent, transparent 49.3%, #415971 49.3%, #415971 50.7%, transparent 50.7%, transparent);
        position: absolute;
        top: 0;
        left: 0;
        display: block;
    }

    .building .tile::after {
        content: '';
        width: 90px;
        height: 90px;
        background: linear-gradient(45deg, transparent, transparent 49.3%, #415971 49.3%, #415971 50.7%, transparent 50.7%, transparent);
        position: absolute;
        top: 0;
        right: 0;
        display: block;
    }



    .left_text {
        color: #04274B;
        font-size: 28px;
        font-family: "HG創英角ゴシックUB", "HG創英角ゴシック", "他のゴシック系フォントなど"; /* ※基本的にブラウザではこのフォントでは表示されません */
        letter-spacing: 1.35em;
        line-height: 1;
        writing-mode: vertical-rl;
        position: absolute;
        top: 90px;
        left: 0;
        margin: 0;
    }

    .right_text {
        color: #04274B;
        font-size: 50px;
        font-family: "游明朝", YuMincho, "游教科書体", "他の明朝系フォントなど";
        line-height: 1;
        letter-spacing: 0.5em;
        writing-mode: vertical-rl;
        position: absolute;
        top: 0;
        right: 0;
        margin: 0;
    }

    figure {
        position: absolute;
        left: 25%;
        bottom: 0;
        margin: 0;
    }

</style>

まとめ

結構時間かかった。けど楽しかった!
身の回りの物をコーディングするの、結構楽しいからやってみてね!

素材データ配布

真似して作りたい人はこの画像をダウンロードして使ってね!
hito.png

おそまつ!

(コメント・質問・ソースの指摘等なんでもウェルカムです!初心者の方でも気軽に質問ください!)

Ionic 特定のページの背景色を変更する方法(ion-contentの色)

ion-contentの背景色の変更、Ionic初心者は恐らくこうやっている。

home.page.html
<ion-header><ion-toolbarcolor="secondary"><ion-title>ホーム
    </ion-title></ion-toolbar></ion-header><ion-contentclass="home"></ion-content>
home.page.scss
.home{background-color:#fff5cc;}

でもこれではうまくいかないんですよ〜!:sob:

ion-contentの背景色を変更する方法

※このやり方がベストなのかは分かりませんが、とりあえずこの方法でもできたので。。

variables.scssに値を追加

variables.scssのroot内にこちらを追加

variables.scss
/** Ionic CSS Variables **/:root{/** 省略 **/--ion-background-color:#ffffff;}

背景色を変更したいページのscssに値を追加

home.page.scss
ion-content{--ion-background-color:#fcfde8;}

これでhome.pageだけ背景色が変わる!

全てのページの背景色を変更するには?

variables.scssを以下のようにして、上記の例のように各ページで一切上書きしなければ、全てのページの背景色を変更可能

variables.scss
/** Ionic CSS Variables **/:root{/** 省略 **/--ion-background-color:#000000;}

参考

https://ionicframework.com/docs/theming/css-variables

Browsing Latest Articles All 2109 Live