Author Archives: ake_nyanko

フリーランスの貯蓄・節税に役立つ公的制度【2019】


この記事はフリーランスアドベントカレンダーへの投稿として、
昔書いた記事に改定を加える形で新たに書き起こしたものになります。
以前の記事はこちら


2019年も残り約1カ月ですね。2012年に一度フリーランス・個人事業主のための公的節税制度についてまとめた記事を書いたのですが、7年経って若干制度に変更もあったため、あらためて2019年度版としてまとめなおしてみたいと思います。(※基本的な制度は変わらないため、以前の記事の焼き直しとなります。ご了承下さい。)
今回ご紹介するのは、国が用意してくれている公的な制度であり、
うまく使えば将来に備えて蓄財しながら、節税もできちゃうとってもお得な制度です。
フリーランスのデメリットの1つである不安定さをカバーするためにも、使えるものはどんどん活用して将来に備えちゃいましょう♪

①「小規模企業共済」

https://www.smrj.go.jp/kyosai/skyosai/

月額掛金:5000円〜7万円

小規模企業の経営者/役員・個人事業主の「退職金積立」を目的とした共済です。
掛金は全額所得控除され、解約して受け取る際には退職所得控除が受けられます。
入口・出口ともに税制優遇されているため、節税対策としては一番おすすめです。
従業員を持たない一人親方・フリーランスでも加入できます。

【お得ポイント】

・掛金が全額所得控除されますので、毎年の節税効果がすこぶる高いです。
掛金の全額所得控除による節税額資料加入シミュレーション
・年間40万までの掛金であれば、廃業時の共済金受け取り時の税金も退職所得控除により非課税となります。仮に課税されたとしても、それまでの毎年の節税額の方が大きいため、トータルでは確実にプラスとなります。

【注意点】

・12ヶ月未満で解約した場合、共済金は掛け捨てになります。
・20年未満で自己都合により解約した場合、解約手当金が掛金を下回ります。
・一括で受け取る場合は退職所得扱い、年金として分割で受け取る場合は公的年金等の雑所得扱いとなります。

コメント

よく「小規模企業共済は気になるけど20年加入しないと元本割れするから無理」という話を耳にしますが、それはあくまで「自己都合」で解約した場合の話です。正当な事由(廃業して会社員や専業主婦になった等)の場合は基本的に元本割れはありません。なので少なくとも1年以上フリーランスを続ける覚悟があるなら、加入して損はないと思います。
【参考:共済金(解約手当金)について

* * * * * * * * * * * * *

②「iDeco」

https://www.ideco-koushiki.jp/

月額掛金:5000円〜6万8000円(月額上限は国民年金基金との合算)

公的年金を補完するための公的個人年金制度(いわゆる「確定拠出年金」と呼ばれる制度)です。
通常の公的年金が「確定給付」すなわち将来受け取れる金額が確定しているのに対して、「確定拠出」の年金は、現在の掛金に対して将来受け取れる年金額は運用次第で変動します。運用に失敗すれば元本割れのリスクがある代わりに、うまく運用すれば数%以上の運用益を得ることも可能です。
小規模企業共済と同様に掛金は全額所得控除となりますので、節税効果は高いです。
また、通常の株式や投資信託と違い、年金受け取り時まで運用益に対する課税が繰延(通常は利息に対して20%課税)される税制優遇が受けられるので、リスク資産での投資を検討している場合はまずこちらを優先した方がよいです。

【お得ポイント】

・掛金が全額所得控除されますので、毎年の節税効果がすこぶる高いです。
・運用期間中の運用益に対しても非課税扱いとなるので、一般の投資商品より有利です。
・途中で就職して会社員になった場合でも、12000円〜23000円の掛金の範囲で継続できます。(会社に企業年金がなければ上限23000円、ある場合は制度によって12000円または20000円)

【注意点】

国民年金の掛金を支払っていることが加入条件になります。
・国民年金基金に加入している場合は、そちらの掛金と合計して上限68000円となります。
・公的年金を補完するための制度なので、一度加入したら原則自己都合での脱退はできません。
(掛金の拠出を止めて運用指図者になることは可能)
・リスク商品(株式・債券・現物先物等)で運用した場合、元本割れのリスクがあります。
・運用には委託手数料がかかります。
・終身年金ではありません。(一時金、または5年以上20年以下の年金として受け取り)

コメント

資金に余裕があって将来に備えて確実にお金を蓄えておきたいのであれば、
小規模企業共済・iDeco両方やるのがいいと思いますが、
そこまで余裕が無いのであれば、小規模企業共済の方を優先した方がいいと思います。
iDecoはあくまで「年金」なので、公的年金支給開始年齢まで受け取ることができないのに対し、小規模企業共済は以下にあげるようにもう少し融通がききます。
・個人事業を廃業した段階で共済金として受け取る事ができる。
(会社員になるとか、専業主婦になるとか、体を壊して働けなくなるとか。)
・掛金の範囲内で無担保で融資が受けられる。
・12ヶ月以上掛金を納めていれば、自己都合での任意解約もできる(※元本割れします)

* * * * * * * * * * * * *

③「国民年金基金」

https://www.npfa.or.jp/

月額掛金:加入時の年齢・性別によって異なる。月額上限68,000円(※iDecoとの合算合計)

iDecoと同様に公的年金を補完するためのもうひとつの公的個人年金制度です。iDecoと違いこちらは確定給付年金タイプとなります。掛金の月額上限は68,000円ですが、これはiDecoと合算した場合の上限なので、仮に既にiDecoを月5万円やっているのであれば、国民年金基金で拠出できるのは残り18000円となります。ただし終身タイプのA型・定期タイプのB型というタイプ別、および加入時の年齢・性別によって月額の掛金が変わるため、枠いっぱいまで使い切る形で自由に加入することはなかなか難しいのではないかと思います。
また、iDecoと違って月額の掛金を自由に増減させることはできないため、うかつに上限いっぱいまで掛けてしまうと資金繰りが苦しくなる恐れがあります。
※すみません、月額掛金の増口や減口は届け出をすることにより可能なようです。ただし1口目を無くして掛金をゼロにすることはできません。
【参考:掛金月額表

【お得ポイント】

・掛金が全額所得控除されますので、毎年の節税効果がすこぶる高いです。
・確定給付型の年金なので運用によって元本割れする心配がありません。
・終身年金タイプの加入がベースなので長生きリスクに備えることができます。

【注意点】

国民年金の掛金を支払っていることが加入条件になります。
・iDecoに加入している場合は、そちらの掛金と合計して上限68000円となります。
・公的年金を補完するための制度なので、一度加入したら自己都合での脱退はできません。
月額の掛金を自由に変更することはできません。(一度決めたら脱退するまでそのまま)
1口目を減口して掛金ゼロとすることや、1口目のタイプをA型→B型とするなどのタイプ変更はできません。2口目以降は自由に増減できます。

コメント

確定給付なので基本的に若い時に加入すれば掛金も安く受給額も高いのでおトクですが、高齢になってからだと掛金が高く、受給額は低くなるため、iDecoとどちらを優先するか検討する必要があります。もし、「元本割れは絶対に嫌だ!」というのであれば国民年金基金を優先するという選択肢も有りでしょう。終身年金とすることができるのも魅力です。ただし一度加入したら任意脱退はできず、また不景気などで売上が落ちても掛金を下げることもできない掛金をゼロにすることもできないため、個人的にはもしやるとしたらできるだけ若いうち(30代前半まで)に終身タイプのA型を1口だけ加入しておき、残りはiDecoに割り振ったほうが良いのではないかと思います。

* * * * * * * * * * * * *

④経営セーフティ共済(中小企業倒産防止共済)

https://www.smrj.go.jp/kyosai/tkyosai/index.html

月額掛金:5000円〜20万円(総額800万まで)

中小企業の連鎖倒産を防ぐ目的で設立された共済です。取引先が倒産して資金繰りが悪化した際には、掛金の最大10倍(8000万円)まで無利子・無担保・保証人なしで貸付が受けられる制度です。
掛金は全額を必要経費とすることができます。

【お得ポイント】

・掛金を全額「必要経費」にできるので、所得そのものを圧縮できます
・控除前の所得を低く押さえることができるため、控除前所得を基準として算出する国民健康保険税(旧ただし書き方式)も低く抑える効果があります。
・40ヶ月以上掛金を納付すれば、いつでも100%の解約手当金を受け取る事ができます。
・任意解約するにあたり使途の制限はありません。

【注意点】

・解約手当金は「雑所得」として所得税の課税対象となります。

コメント

倒産防止共済は他の2つの制度と違って「所得控除」ではなく、「必要経費」にできるという点である意味非常にお得な制度です。所得控除で節約できるのは「所得税・住民税」だけであるのに対して、「必要経費」にして控除前所得を低く押さえることができれば、それを基準に算出される「国民健康保険税」も安く押さえることができるのです。貯金をしながら税金だけでなく国保も節約できる制度はこれしかありません。その点では非常に、ひじょーーーーーに魅力的です。
ただし、問題は解約した時の解約手当金の扱いです。
倒産防止共済の場合、解約手当金は「所得」として課税されてしまいます。
掛金は最大800万円まで積立できるのですが、仮にこれを解約した場合、その年はいきなり売上が800万円増えたのと同じ扱いになり、所得税・住民税・国保税全てが一気に跳ね上がるという結果となります。
この出口戦略をきちんと考えずに利用すると、解約時に慌てるハメになりますので要注意です。

【出口戦略の例】

・赤字の年に解約して赤字補てんに当てる
・大規模な設備投資をする年に解約する
・退職金支払いのタイミングで解約する

解約手当金は収入扱いですので、上記のように何らかの大きな支出が決まっている時にタイミングを合わせて解約するようにしないとガッポリ税金を取られますので気をつけてください。
しかし残念ながら法人ではないフリーランス・個人事業主の場合は自分の退職金を経費扱いできません。法人であれば退職金制度の代わりとしてものすごくメシウマな制度となりますが、フリーランス・個人事業主の場合は積立期間中の国保節約以外メリットがないかもしれません。

* * * * * * * * * * * * *

⑤国民健康保険組合

フリーランス・個人事業主が頭を悩ませるものの筆頭としてバカみたいに高い国民健康保険料があります。国保は自治体が運営母体なので、住んでいる地域によって算出方法も金額も全く違います。家族構成や資産の有無などによって個々に条件は違いますが、場合によっては全く同じ収入であっても住んでいる地域によって国保の金額が倍近く違うなんていうこともあります。
そんなわけで国保を節約する方法というのはその人の状況によっていろいろ違ってきてしまうため一概には言えないのですが、基本的には「『所得』を低くおさえない限り安くすることはできない」と考えて差し支えありません。
ポイントは各種控除を差し引いた後の「課税所得」ではなく、あくまで「所得」が基準だという点です。だれでも一律受けられる基礎控除(約30万円)は差し引かれますが、それ以外の控除は一切考慮されません。従って、いくら小規模企業共済やiDeco(所得控除)を増やしても、国保を安くすることはできないのです。(※「住民税方式」を採用しているごく一部の自治体を除く)
実質貯金をしながら所得を押さえる効果がある制度として④で経営セーフティ共済を紹介しましたが、既に解説した通りフリーランス・個人事業主の場合「退職金」として非課税処理することが不可能なため、解約年の翌年の国保税が跳ね上がることはなかなか避けられません。
そこで注目すべき制度が「国民健康保険組合」というものになります。
国保組合に関しては下記のブログが詳しいので、参考にしてください。

「フリーランスの健康保険」:トラベローグ
「国民健康保険税が高いので、多くの人が安くなる方法を。」:CSS HappyLife

Web制作に携わる人やイラスト書いてる人などの場合、加入できる国保組合は「文芸美術国民健康保険組合」一択となります。国保と比較してどの程度保険料が安くなるかについてはこちらのページで試算していただければよいかと思いますが、(扶養家族がいない場合)所得が200万以上ある人であればだいたい国保より安くなると言えます。
節税を考えるような人であれば基本的に所得200万くらいあるでしょうから、乗り換えを検討してみると良いと思います。

【お得ポイント】

どんなに所得が上がっても保険料が一定(国保の半分以下にすることも可能)
・文芸美術国民健康保険組合の場合、所得200万以上なら組合のほうがお得

【注意点】

※文芸美術国民健康保険組合の場合
・加入するためには
(協)日本イラストレーション協会 - JILLA/ジャイラ
社団法人 日本グラフィックデザイナー協会(JAGDA)
日本ネットクリエイター協会(JNCA)」などの各種団体に所属する必要がある
・保険料の他に所属団体への加入料や年会費などが必要
確定申告の書類上でその職業(デザイナー等)に従事していることが確認できる

コメント

文美国保に加入するための各種団体としてはJILLA、JAGDA、JNCAなどがありますが、加入の敷居が高いのはJAGDA>JILLA>JNCAの順となります。
比較的最近できた日本ネットクリエイター協会(JNCA)などは加入審査が比較的ゆるく、Webデザイナーとしてサイト制作の実績等があるなら問題なく入れるとのことです。
会費も安いですし、JAGDAのように「正会員の紹介が必要」といったハードルも無いのでおすすめです。
ただし、各団体の会員であれば誰でも文美国保に加入できるかというとそういうわけではなく、あくまで「文芸・美術に携わっていること」が文美国保に加入するための条件なので、おそらくYoutuberとかだと厳しいのではないかな?という気がします。(詳しくは文美国保までお問い合わせ下さい)
なお以前はJAGDA等の協会に加入していれば国保組合への審査はスルーパスでしたが、昨今偽装加入の問題が増えてきているため、本当にその職業についているかどうかを確定申告書類上で再審査する旨の通達があり、少なくともJAGDAでは確定申告書の写し(※職業欄に「デザイナー」等の肩書があるもの)を提出するように求められています。
本来加入資格の無い人がこっそり加入しようとしても審査でハネられる恐れもありますのでご注意下さい。

* * * * * * * * * * * * *

⑥青色申告特別控除(65万円)

最後になりましたが、節税対策として忘れてはいけないのが「青色申告特別控除」です。
他の制度は結局お金を使うかどこかに預けなければいけないのに対し、
青色申告特別控除は1円も使うことなく節税ができます。
フリーランス・個人事業主であればどのみち確定申告はしなければいけませんが、
白色申告では税制優遇は一切受けられません。
同じ金額の黒字が出ていたとしても、白色申告するのと青色申告するのでは
支払う所得税・住民税の金額は全然違ってくるのです。
フリーランス・個人事業主で少しでも黒字になっているなら、青色申告しない手はありません!
ただし、青色申告で65万円の控除を受けるためには次の条件を満たす必要があります。

・税務署に青色申告をする旨の届出をすること
複式簿記で記帳し、貸借対照表と損益計算書を確定申告書に添付して期限内に申告すること

※令和2年度から青色申告特別控除の金額が変わります!!
平成30年度税制改定で、令和2年分の確定申告から、基礎控除額・青色申告特別控除の金額が変更となります。
令和元年度まで:基礎控除38万・青色申告特別控除65万
 ↓
令和二年度から:基礎控除48万・青色申告特別控除55万(e-Tax申告などの条件を満たせば65万)
詳しくはこちら

ハードルが少し高いのが「複式簿記による記帳」です。
これをクリアして青色申告特別控除の恩恵を受けるためには、

①税理士に報酬を払って丸投げする
②勉強して自分で記帳する

のどちらかです。楽をしたければ税理士に丸投げすればいいと思います。
個人の確定申告決算であれば、10〜20万もあれば丸投げできると思います。税理士報酬自体も経費になりますし、面倒くさい経理に頭を悩ませる時間がもったいないと思う方は利用したほうがいいと思います。
自力で頑張るというのも、決して無理な話ではありません。
ある程度勉強は必要になりますが、

・会計ソフト(弥生の青色申告など)
・相談できる相手(先輩フリーランス、青色申告会の人、会計ソフトの相談サービス等)

があれば全然自分でできます。
私もこれまで全て自分で青色申告して65万控除ゲットしてますが、簿記の資格なんか持ってませんし、貸借対照表も読めません。でも記帳して申告するだけなら全然OK!無問題です。
★自分でやってみたい!と思う方への参考図書等はこちら↓

【参考図書】

また、弥生の青色申告などで自分で記帳する場合は各種帳簿の入力などに結構な手間がかかりますが、
freee」や「マネーフォワード」、「弥生の青色申告オンライン」といったクラウドサービスを利用することで、銀行口座やクレジットカード明細の自動取り込みが可能になったり、オンライン上でe-TAX確定申告まで完了させることができたりとかなり楽に記帳&確定申告を行うことができるようになります。

【参考サイト】

はじめてのフリーランスの青色確定申告の勉強メモ「実践・提出編」
初めての青色申告ガイド【前編】
初めての青色申告ガイド Q&A 【後編】

【会計ソフト】

弥生の青色申告20

* * * * * * * * * * * * *

ちょっと長くなってしまいましたが、いかがでしたでしょうか?
架空経費とか無申告とか、そういう危ない橋を渡ること無く、
正々堂々と納税者の義務を果たしながら賢く節税して将来に備えてきましょう♪

<IE11対応>実務で使うGridレイアウト【機能編】


前回の記事(「実務で使うGridレイアウト【環境構築編(gulp)】」)では、最新版のAutoprefixerの導入と、Grid機能を有効にする設定について解説しました。今回は【機能編】として、IE11への対応を踏まえた上でGridレイアウトを利用するために気をつけなければならないポイントを解説します。
※なお、Gridレイアウトそのものの基本的な使い方については既に習得している前提となりますので、Gridレイアウト自体の使い方を知りたい方はGoogle先生などにお尋ねください。


【機能編】目次

  1. アイテムの配置にはgrid-areaを使う
  2. display: inlneの要素はGridアイテムにならない
  3. IE11での限定的自動配置機能とその制限事項Update.
  4. まとめと今後の課題

アイテムの配置にはgrid-areaを使う

Gridレイアウトにおける各セルへのアイテムの配置方法は複数ありますが、IE11対応も考えるのであれば基本的に「grid-area」一択です。grid-columnやgrid-rowでのアイテム配置は、Autoprefixerによるアイテムの配置が正しく行われないのでやめましょう。
アイテムの配置にgrid-areaを使うということは、grid-template-areaまたはgrid-templateによって各セルに名前をつける必要があるということになります。
以下はgrid-areaによるアイテム配置の例になります。

<div class="grid">
  <header>ヘッダー</header>
  <main>メイン</main>
  <aside>サイドバー</aside>
  <footer>フッター</footer>
</div>
.grid {
  display: grid;
  height: 100vh;
  gap: 20px;
  grid-template-columns: 1fr 4fr;
  grid-template-rows: 100px 1fr 100px;
  grid-template-areas: 
    "header header"
    "sidebar main"
    "footer footer";
  /*grid-templateによるショートハンドの場合はこちら
  grid-template:
    "header header" 100px
    "sidebar main" 1fr
    "footer footer" 100px / 1fr 4fr;
  */
}
header {
  grid-area: header;
  background: tomato;
}
main {
  grid-area: main;
  background: skyblue;
}
aside {
  grid-area: sidebar;
  background: gold;
}
footer {
  grid-area: footer;
  background: pink;
}
.grid {
  display: -ms-grid;
  display: grid;
  height: 100vh;
  grid-gap: 20px;
  gap: 20px;
  -ms-grid-columns: 1fr 20px 4fr;
  grid-template-columns: 1fr 4fr;
  -ms-grid-rows: 100px 20px 1fr 20px 100px;
  grid-template-rows: 100px 1fr 100px;
  grid-template-areas: "header header" "sidebar main" "footer footer";
  /*grid-templateによるショートハンドの場合はこちら
  -ms-grid-rows: 100px 20px 1fr 20px 100px;
  -ms-grid-columns: 1fr 20px 4fr;
  grid-template: "header header" 100px "sidebar main" 1fr "footer footer" 100px / 1fr 4fr;
  */
}

header {
  -ms-grid-row: 1;
  -ms-grid-column: 1;
  -ms-grid-column-span: 3;
  grid-area: header;
  background: tomato;
}

main {
  -ms-grid-row: 3;
  -ms-grid-column: 3;
  grid-area: main;
  background: skyblue;
}

aside {
  -ms-grid-row: 3;
  -ms-grid-column: 1;
  grid-area: sidebar;
  background: gold;
}

footer {
  -ms-grid-row: 5;
  -ms-grid-column: 1;
  -ms-grid-column-span: 3;
  grid-area: footer;
  background: pink;
}

このように、IE11ではgapも一つのセルとなるように行列を引き直し、grid-areaで指定されたセルに対して-ms-grid-row/-ms-grid-columnによる番号指定でアイテムを再配置してくれます。
これを手作業でやることを考えたら、GridのIE対応を手動でやるのがいかに現実的でないか分かりますね(;´Д`)

display: inlneの要素はGridアイテムにならない

さて、上記のHTML/CSSを各ブラウザで表示するとこうなります。

Chromeでの表示
Chromeでの表示
IE11での表示
IE11での表示

……できてないじゃーん!!!!

と、思うかもしれません。ええ、私も最初はそう思いました。
ただ、これはAutoprefixerのせいではありません。IEではdisplay:inlineの要素はGridアイテムの対象にならないバグ(仕様?)があるのです。そして、IE11ではmain要素はデフォルトでdisplay:inlineになってしまいます。なので、main要素をGridアイテムにしたい場合にはmain {display: block;}を明示的に記述してやる必要があるのです。main要素をdisplay:blockにして再度IE11で表示したものがこちらです。

main要素をブロック化したIE11の表示
main要素をブロック化したIE11の表示

はい、無事できました。(ホッ)
ちなみにdisplay:inlineの要素がGridアイテムの対象にならないということは、main要素に限らずa要素やらspan要素やらもそのままではGridレイアウトにできないということです。なのでこれらの要素を対象にGridレイアウトを作りたい場合には、忘れずにdisplay: blockを指定するようにしましょう。

IE11での限定的自動配置機能とその制限事項

Gridレイアウトにはアイテムの「自動配置」の仕組みがありますが、中でも

・repeat() (auto-fill または auto-fit)
・minmax()

といった関数を利用するとメディアクエリなしでレスポンシブレイアウトを実現できたりするなど、非常に柔軟なレイアウトが簡単に実現できます。
(デモ付きでわかりやすい解説がありましたので詳細は以下のブログを参照してください。)

[参考]
「CSS GridとFlexboxを使ってメディアクエリなしでレスポンシブにレイアウトする方法」
「CSS Gridを使うならマスターしておきたいauto-fillとauto-fitの違い」

Gridレイアウトはこうした「同じサイズのボックスが複数行並び、画面幅に応じてカラム数が柔軟に変わるレイアウト」でこそ普段使いのレイアウト手法として威力を発揮すると個人的には思っているので、実務で使うとしたらまずこのようなレイアウトの箇所から導入したいと思っているのですが、残念ながらIE11には「自動配置」の仕組み自体が存在しません。
したがって、上記のブログで紹介されているようなauto-fillやminmax()を活用した柔軟なレイアウトの実装はIE11では物理的に不可能となります。

ただし、ボックスを指定回数繰り返し配置するrepeat() については、v9.4.0のAutoprefixerから限定的に再現可能となっていますので、シンプルなものであればfloatやflexboxの代わりに活用することができるかもしれません。以下にIE11で自動配置機能を利用するための設定と制限事項をまとめましたので参考にしてください。

●自動配置機能を使うための設定

AutoprefixerでIEでの自動配置機能をONにするためには、css(scss)に

/* autoprefixer grid: autoplace */

というコメントを記述する必要があります。
autoprefixerを使う場合にはsassも同時に利用していることが多いと思いますが、
この機能のON/OFFは.scssファイルごとに個別に設定する形となります。
(test1.scssとtest2.scssという2枚のscssファイルがあった場合、test1.scssにだけ前述のコメントを記述すれば、test1.scssに書かれたCSSにだけ自動配置機能が適用される、ということです。パーシャルファイルに記述した場合も同様です。)

2019.6.4追記


AutoprefixerでIE向けに自動配置機能をONにする方法は、css(scss)にコメントで指定する方法以外に、gulpfile.js内で以下のように指定することでも実現できることが分かりました。


const gulp = require("gulp");
const postcss = require("gulp-postcss");
const autoprefixer = require("autoprefixer");
  
gulp.task("default", function () {
  return gulp.src("src/style.css")
    .pipe(postcss([
      autoprefixer({
        grid: "autoplace" //←★trueではなく"autoplace"にする
      })
    ]))
    .pipe(gulp.dest("dist"));
});

この方法であればcss(scss)ファイルごとに個別に指定する必要はないので、こちらの方が効率的と思われます。
詳細はこちら

●制限事項1:行と列の両方を明示しなければならない

AutoprefixerではIEの仕様の範囲内で擬似的に再現しているだけであるので、あらかじめ表示したいアイテム数に応じてそれを全て配置できるだけの行と列を事前に明示しておく必要があります。列の指定は良いとして、行数もあらかじめ指定しておかなければならないというところがこの機能を使う上での最大の難点となります。
これはつまり、「動的に要素を増減させたい場面では利用できない」ということを意味します。
CMSなどから動的にアイテムを出力しており、アイテム数が可変となるような場面では使えないので、実際問題使える場面はかなり限られてしまうと思われます。JSでなにかゴニョゴニョすればできるのかもしれませんが、そこまでやるくらいならfloatなりflexboxなりで頑張ったほうがマシなのではないかと思います。

●制限事項2:レスポンシブさせたい場合はメディアクエリで列数/行数を指定し直す

たとえアイテム数が固定であったとしても、レスポンシブのサイトで画面幅によってカラム数が変更になれば、当然必要となる行数も変わってきます。通常であればこのような時にはGridは暗黙のグリッドを作成して自動的に行数をよしなにしてくれますが、IE11ではこれができません。したがってメディアクエリを使って画面幅ごとにその都度Gridの列数/行数を指定し直す必要があります。

●制限事項3:auto-fit, minmax()などの機能は再現できない

既に言及したとおり、本来のGridレイアウトでrepeat()を活用する際に利用できるauto-fit,auto-fill,minmax()といった便利な機能は全て使用できません。再現できるのはボックスの単純な繰り返し配置のみです。諦めましょう。

●制限事項4:精神衛生上、出力されたCSSは見ない方がいい(苦笑)

IE11のGridレイアウトは、本来エリア名による配置も、gapの指定も、repeat()配置も全て非対応です。IE11にできることは、とにかく行と列を必要な分だけ区切って、行番号・列番号でアイテムをひたすら手動で配置することだけです。この不毛な作業を、Autoprefixerは人間の代わりに行ってくれているだけです。なので、出力されるIE向けのCSSは実に力技です(苦笑)。特にアイテム数が多くなるrepeat()を使った場合、CSSは :nth-child(n)の嵐となることでしょう…。(20個のアイテムをrepeat()で自動配置して、更にメディアクエリで段階的にカラム数・行数が変わるように書いた場合は、20×分岐数分だけの:nth-child(n)が羅列されることになります。)
とりあえず、実際書いたらどうなるのか以下に置いておきますので、本当に使うのかどうかは各自判断してください。

  <ul class="container">
    <li>1アイテム</li>
    <li>2アイテムアイテムアイテムアイテムアイテムアイテムアイテム</li>
    <li>3アイテム</li>
    <li>4アイテム</li>
    <li>5アイテムアイテムアイテムアイテムアイテム</li>
    <li>6アイテム</li>
    <li>7アイテムアイテムアイテムアイテム</li>
    <li>8アイテム</li>
    <li>9アイテムアイテム</li>
    <li>10アイテム</li>
    <li>11アイテムアイテム</li>
    <li>12アイテム</li>
    <li>13アイテム</li>
  </ul>
.container{
  max-width: 960px;
  margin: auto;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  grid-template-rows: repeat(7, 1fr);
  gap: 20px;
}
@media (max-width: 768px) {
  .container {
      grid-template-columns: repeat(2, 1fr);
      grid-template-rows: repeat(7, 1fr);
  }
}
.container {
  max-width: 960px;
  margin: auto;
  display: -ms-grid;
  display: grid;
  -ms-grid-columns: 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr;
  grid-template-columns: repeat(5, 1fr);
  -ms-grid-rows: 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr;
  grid-template-rows: repeat(7, 1fr);
  grid-gap: 20px;
  gap: 20px;
}

.container > *:nth-child(1) {
  -ms-grid-row: 1;
  -ms-grid-column: 1;
}

.container > *:nth-child(2) {
  -ms-grid-row: 1;
  -ms-grid-column: 3;
}

.container > *:nth-child(3) {
  -ms-grid-row: 1;
  -ms-grid-column: 5;
}

.container > *:nth-child(4) {
  -ms-grid-row: 1;
  -ms-grid-column: 7;
}

.container > *:nth-child(5) {
  -ms-grid-row: 1;
  -ms-grid-column: 9;
}

.container > *:nth-child(6) {
  -ms-grid-row: 3;
  -ms-grid-column: 1;
}

.container > *:nth-child(7) {
  -ms-grid-row: 3;
  -ms-grid-column: 3;
}

.container > *:nth-child(8) {
  -ms-grid-row: 3;
  -ms-grid-column: 5;
}

.container > *:nth-child(9) {
  -ms-grid-row: 3;
  -ms-grid-column: 7;
}

.container > *:nth-child(10) {
  -ms-grid-row: 3;
  -ms-grid-column: 9;
}

.container > *:nth-child(11) {
  -ms-grid-row: 5;
  -ms-grid-column: 1;
}

.container > *:nth-child(12) {
  -ms-grid-row: 5;
  -ms-grid-column: 3;
}

.container > *:nth-child(13) {
  -ms-grid-row: 5;
  -ms-grid-column: 5;
}

.container > *:nth-child(14) {
  -ms-grid-row: 5;
  -ms-grid-column: 7;
}

.container > *:nth-child(15) {
  -ms-grid-row: 5;
  -ms-grid-column: 9;
}

.container > *:nth-child(16) {
  -ms-grid-row: 7;
  -ms-grid-column: 1;
}

.container > *:nth-child(17) {
  -ms-grid-row: 7;
  -ms-grid-column: 3;
}

.container > *:nth-child(18) {
  -ms-grid-row: 7;
  -ms-grid-column: 5;
}

.container > *:nth-child(19) {
  -ms-grid-row: 7;
  -ms-grid-column: 7;
}

.container > *:nth-child(20) {
  -ms-grid-row: 7;
  -ms-grid-column: 9;
}

.container > *:nth-child(21) {
  -ms-grid-row: 9;
  -ms-grid-column: 1;
}

.container > *:nth-child(22) {
  -ms-grid-row: 9;
  -ms-grid-column: 3;
}

.container > *:nth-child(23) {
  -ms-grid-row: 9;
  -ms-grid-column: 5;
}

.container > *:nth-child(24) {
  -ms-grid-row: 9;
  -ms-grid-column: 7;
}

.container > *:nth-child(25) {
  -ms-grid-row: 9;
  -ms-grid-column: 9;
}

.container > *:nth-child(26) {
  -ms-grid-row: 11;
  -ms-grid-column: 1;
}

.container > *:nth-child(27) {
  -ms-grid-row: 11;
  -ms-grid-column: 3;
}

.container > *:nth-child(28) {
  -ms-grid-row: 11;
  -ms-grid-column: 5;
}

.container > *:nth-child(29) {
  -ms-grid-row: 11;
  -ms-grid-column: 7;
}

.container > *:nth-child(30) {
  -ms-grid-row: 11;
  -ms-grid-column: 9;
}

.container > *:nth-child(31) {
  -ms-grid-row: 13;
  -ms-grid-column: 1;
}

.container > *:nth-child(32) {
  -ms-grid-row: 13;
  -ms-grid-column: 3;
}

.container > *:nth-child(33) {
  -ms-grid-row: 13;
  -ms-grid-column: 5;
}

.container > *:nth-child(34) {
  -ms-grid-row: 13;
  -ms-grid-column: 7;
}

.container > *:nth-child(35) {
  -ms-grid-row: 13;
  -ms-grid-column: 9;
}

@media (max-width: 768px) {
  .container {
    -ms-grid-columns: 1fr 20px 1fr;
    grid-template-columns: repeat(2, 1fr);
    -ms-grid-rows: 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr;
    grid-template-rows: repeat(7, 1fr);
  }
  .container > *:nth-child(1) {
    -ms-grid-row: 1;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(2) {
    -ms-grid-row: 1;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(3) {
    -ms-grid-row: 3;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(4) {
    -ms-grid-row: 3;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(5) {
    -ms-grid-row: 5;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(6) {
    -ms-grid-row: 5;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(7) {
    -ms-grid-row: 7;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(8) {
    -ms-grid-row: 7;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(9) {
    -ms-grid-row: 9;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(10) {
    -ms-grid-row: 9;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(11) {
    -ms-grid-row: 11;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(12) {
    -ms-grid-row: 11;
    -ms-grid-column: 3;
  }
  .container > *:nth-child(13) {
    -ms-grid-row: 13;
    -ms-grid-column: 1;
  }
  .container > *:nth-child(14) {
    -ms-grid-row: 13;
    -ms-grid-column: 3;
  }
}

まとめと今後の課題

IE11の対応もする前提でGridレイアウトを使おうと思うと、何かと制限はありますが

・各セルに明示的にエリア名をつけて運用することが可能なレイアウト
・固定数のボックスを単純に繰り返し配置するレイアウト

であればIE11でも問題なく再現できることが確認できました。
今回はあくまで機能面での再現性の確認でしたが、今後の課題としては、実際の案件で活用していくにあたり、ベストな使い方のノウハウ(サイト全体のレイアウト制御orパーツ単位での制御のどちらが良いか、どのようにグリッド線を構築するのがベストなのか、等)を検討できればな、と考えております。
この辺は一人でウンウン言っていても拉致があかないと思うので、同じように受託の現場での活用を考えている方と率直な意見交換ができればいいなーと思っています。
既に活用していて、「こんな使い方してるよ!」とか「こういうのはうまくいかないよ!」といった経験談を聞かせていただけると嬉しいです!

* * * * * * * * * * * * * * * * * * * * *

【PR】書籍が発売されました♪

2013年の初版、2015年の改訂版に続き、2回目の改訂第2版となる『HTML5&CSS3標準デザイン講座』が2019年5月24日に発売されました♪ヨロシクー!

HTML5&CSS3標準デザイン講座【第2版】
  • タイトル:「HTML5&CSS3標準デザイン講座 【第2版】」
  • ISBN:978-4798158136
  • 出版社:翔泳社
  • 版型・ページ数:B5変・400P・フルカラー
  • 定価:本体2,580円+税
  • 刊行:2019年5月24日(金)

★Amazonでポチる★

<IE11対応>実務で使うGridレイアウト【環境構築編(gulp)】


皆さん、Gridレイアウト使ってますか?
こう質問すると割と「使ってるよー」と答える方も多いかもしれません。
では「受託制作の実務現場でGridレイアウト使ってますか?」と質問したらどうでしょう?
おそらく「バリバリ使ってるよー」という人の割合はグッと減るのではないかと思います。
私も、勉強はしていますがまだ実務での実戦投入は見送っています。

理由はいわずもがな「IE11」の呪いが解けていないからです。
事業会社のように自分のwebサービスを展開している現場であれば自己判断でIE11を切るのも自由ですが、これが受託制作の現場になると、話は別です。
IE11を切るにはクライアントの説得が必要になります。
うまく説得できれば良いですが、

  1. MicrosoftのIE11サポートが2025年まで続く
  2. 日本におけるIE11のシェアがまだ10%近くある
  3. 中国、インドなどの途上国でもまだ古いWindowsが多く使われている
  4. ChroniumベースのEdgeにIE modeが搭載される(※これは無視しても良いと思いますが)

といった状況から、なかなかOKが出ないことも多いかと思います。
少なくともここ1年くらいですぐに状況が劇的に変わるとも思えません。

では受託の現場ではGridレイアウトの導入は諦めるしか無いのでしょうか?
いいえ、我々には「Autoprefixer」という救世主があるではないですか!

というわけで、今回はIE11に対応しながら実務でGridレイアウトを導入するために必要なノウハウを、【環境構築編(gulp)】と【機能編】に分けてまとめてみたいと思います。


【環境構築編(gulp)】目次

  1. なぜautoprefixerを使うのか
  2. autoprefixerの最新版を導入する
  3. gulp-postcssとautoprefixerを使う
  4. うまく動かすための環境構築
  5. gulpfile.jsのautoprefixerの設定を grid: true にする
  6. 自動配置機能を使いたい場合

なぜautoprefixerを使うのか

まずCan I useでCSS Gridの対応状況を確認してみましょう。

IE10-11は-ms-プレフィクス付きの部分対応であることが分かります。
やっかいなのはこれが単純に-ms-をつければいいだけのものではなく、
古い仕様に基づく実装である点です。

詳細は省きますが、flexboxの時と同様、この古い仕様は他のモダンブラウザで採用されている最新の仕様と比較して「何もかもが違う」レベルだと思ったほうが良いです。
プロパティ名も、値も、行列の指定方法も違います。最新仕様で書かれたGridをIEに手動で対応させるのは不可能ではありませんが特に実務においては現実的ではありません。

autoprefixerの最新版を導入する

そこで我らがAutoprefixerの登場となるわけですが、GridレイアウトのIE11対応の恩恵を最大限に受けるためには、最新版のAutoprefixerを導入する必要があります。

Autoprefixerの最新版は現時点(2019年5月)でv9.5.1です。AutoprefixerでのIE11 Grid機能対応自体、ここ数年で様々な機能実装が追加されて段階的に進化してきているものなので、昔導入した古いAutoprefixerをそのまま使っている場合はGrid対応の機能自体が利用できない場合もあります。
特に実務での使い勝手に大きく影響する
・gap(旧grid-gap)の自動変換
・アイテムの自動配置への対応
などの最新機能を全て利用したい場合は少なくともv9.4.0以上のAutoprefixerを使った方がいいので、今回は最新版のAutoprefixerを利用する前提で話を進めたいと思います。

gulp-postcssとautoprefixerを使う

ここでひとつ注意!!
gulpでautoprefixerを利用している場合、使っているプラグインが「gulp-autoprefixer」になっている場合があります。私もそうでした。2〜3年前くらいにNode.jsやgulp、sassと言った環境を見よう見まねで構築した場合、このプラグインを使っている人も多いと思うのですが、GridレイアウトのIE対応をしたい場合はこのプラグインではダメです!
gulp-autoprefixerはしばらくメンテがされておらず、v6.1.0で止まっているからです。
v6.1.0でもgapの自動変換は使うことはできますが、「アイテムの自動配置へ対応」には非対応ですし、その他細々とした新しい機能追加もされていないので、お勧めしません。
これからAutoprefixerでGridのIE11対応しようという方は、postcss/autoprefixerを使いましょう。

うまく動かすための環境構築

今回はすでにgulpを利用した環境構築が出来ている前提でお話しますが、黒い画面の扱いが苦手な人は、最新版のAutoprefixerにしようとした時に関連する各種プログラムのバージョン依存関係等でエラーが出まくって困惑する場合があると思います。(※私がそうです)
なので、私の環境でうまく動いているツールの組み合わせを提示しておきます。

– Node.js: v6.11.2
– gulp: v3.9.1
– gulp-sass: 4.0.2
– gulp-postcss: 8.0.0
– autoprefixer: 9.5.1

また、今回テスト用に用意したpackage.jsonがこちらです。sassのコンパイルとかブラウザの自動リロードといった、autoprefixerの利用だけであれば不要なプラグインも入れていますがその辺は自分の目的に合わせて適宜編集してください。

{
  "name": "grid-ie11",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-postcss": "^8.0.0",
    "autoprefixer": "^9.5.1",
     "postcss-gap-properties": "^1.0.0",
    "gulp-sass": "^4.0.2",
    "gulp-plumber": "^1.1.0",
    "browser-sync": "^2.11.1"
  }
}

gulpfile.jsのautoprefixerの設定を grid: true にする

めでたくgulpでautoprefixerを動作させるところまで到達したら、Autoprefixerの設定でgrid機能を有効にしましょう。gulpの場合はgulpfile.jsの中で 「grid: ture」と設定します。
以下は一般的なautoprefixerを使ったCSS出力のためのgulpfile.jsの記述です。

const gulp = require("gulp");
const postcss = require("gulp-postcss");
const autoprefixer = require("autoprefixer");
 
gulp.task("default", function () {
  return gulp.src("src/style.css")
    .pipe(postcss([
      autoprefixer({
        grid: true //←★ここが重要
      })
    ]))
    .pipe(gulp.dest("dist"));
});

なお、以下は実際に私がテスト用に用意したgulpfile.jsです。

– /src/以下に開発用ファイル、/dist/に納品用ファイルを格納する
– html以外のcss,js,img,sassなど関連ファイルは全て/assets/内に格納する
– /src/assets/sass/以下の.scssファイルに変更がかかったら、autoprefixerを適用した上でsassをコンパイルして/src/と/dist/に出力し、ブラウザを自動リロードする
– エラーでタスクを止めない、gapプロパティを古いgrid-gapプロパティに変換、といった機能も追加

という前提で作ってあるものです。
(今回はテスト用なので納品用ファイル出力についてはcss以外省略してます。)

const gulp = require("gulp");
const postcss = require("gulp-postcss");
const autoprefixer = require("autoprefixer");
const postcssGapProperties = require("postcss-gap-properties");
const sass = require("gulp-sass");
const plumber = require("gulp-plumber");
const browser = require("browser-sync");

//ディレクトリ設定
const src = "./src/";
const dist = "./dist/";

//サーバー
gulp.task("server", function() {
    browser({
        server: {
            baseDir: "./src/"
        }
    });
});

//gulp-sass
gulp.task("sass", function() {
     gulp.src(src + "/assets/sass/**/*scss")
         .pipe(plumber({
            errorHandler: function(err) {
            console.log(err.messageFormatted);
            this.emit('end');
           }
          }))
         .pipe(sass({outputStyle: 'expanded'}))
         .pipe(postcss([
            postcssGapProperties(),
            autoprefixer({
            grid: true,
            cascade: false,
            browsers: ["last 4 versions", "ie 9", "ie 10", "android >= 4", "ios_saf >= 8"]
          })
       ]))
         .pipe(gulp.dest(src + "/assets/css/"))
         .pipe(gulp.dest(dist + "/assets/css/"))
         .pipe(browser.reload({stream:true}))
});

//タスクの監視
gulp.task("default", ["server"], function() {
    gulp.watch(src + "/assets/sass/**/*.scss",["sass"]);
});

自動配置機能を使いたい場合

gulpfile.jsでgrid: trueに設定した上で、IE11でもGridアイテムの自動配置機能を有効にしたい場合は、css(scss)の方に

/* autoprefixer grid: autoplace */

というコメントを追記するようにしてください。
参考:https://github.com/postcss/autoprefixer/releases/tag/9.4.0

これはAutoprefixer v9.4.0から追加された機能で、この記述を加えることにより
本来使うことのできないGridアイテムの自動配置をIE11でも擬似的に再現するようにコードを書き換えてくれます。(こちらの機能の詳細は後日【機能編】の方で解説します)

まとめ

いかがでしたでしょうか?
この記事はあくまで「すでにgulpを使ったautoprefixerの利用を行っている」人が、バージョンを上げてgrid機能を使えるようにするために必要な情報だけをまとめたものになりますので、そもそもgulpを始めとするタスクランナーを使った開発環境自体に馴染みがないという方は、頑張ってNode.jsのインストールから始めてみてください。
ちなみにちょっと古いですが、以前私がNode.jsのインストールに苦戦した時の記録がありますので参考までにどうぞ(苦笑)
・「Node.jsインストール攻略法【非エンジニア向け】

おまけ

「黒い画面使いたくない!でもGridのIE対応したい!!」というワガママさんには、
Autoprefixer online」というWeb上のツールがありますので、
普通にCSSを書いてこのツールに放り込んでみるといいと思います。
これなら環境構築しなくても最新版のAutoprefixerが使えます。(いちいちコピペしないといけないので面倒くさいですけどねー)

おまけ2

BracketsやSublime Text向けに、エディタプラグイン版のAutoprefixerも存在していますが、こちらはバージョンが古くてGrid機能自体が使えませんのでおすすめしません。

* * * * * * * * * * * * * * * * * * * * *

【PR】書籍が発売されます♪

2013年の初版、2015年の改訂版に続き、2回目の改訂第2版となる『HTML5&CSS3標準デザイン講座』が2019年5月24日に発売されます♪ヨロシクー!

HTML5&CSS3標準デザイン講座【第2版】
  • タイトル:「HTML5&CSS3標準デザイン講座 【第2版】」
  • ISBN:978-4798158136
  • 出版社:翔泳社
  • 版型・ページ数:B5変・400P・フルカラー
  • 定価:本体2,580円+税
  • 刊行:2019年5月24日(金)

★Amazonでポチる★

[コピペで簡単]repeating-linear-gradient()でストライプ!

皆さんrepeating-linear-gradient()って使ってますか?私は使ってませんでした。というか割と最近まで存在すら知らなかったです。いつの間にこんなのできてたんですかね?

最近repeating-linear-gradient()の存在を知って、「これ便利じゃん!」と思ったので、同じように存在すら知らなかった方に向けて紹介したいと思います!「そんなもん前から使い倒しとるわい!」っていう方はそっ閉じしてくださいねw

repeating-linear-gradient()とは

その名の通り「繰り返しのグラデーション」を作るための関数です。普通のlinear-gradient()だとbackground-sizeとの組み合わせで指定が煩雑になってしまいますが、repeating-linear-gradinet()なら繰り返しに特化してる分、指定がシンプルで分かりやすいためおすすめです。

repeating-linear-gradient()の書式

repeating-linear-gradient()書式

基本的な書式は上記のようにlinear-gradinet()と同じです。

カラーストップ(色 位置)の記述をする時に、繰り返しになるグラデーションパターンを1セットだけ書いておけば、後は勝手にリピートしてくれるという点だけが違います。

縦・横・斜めのストライプ

repeating-linear-gradient()の使い所はやっぱりストライプ!ということで、縦・横・斜めのストライプを作ってみました。コピペして色や幅を変えればいろんなバリエーションのストライプが簡単に作れるので試してみてください。

stripe01
<div class="stripe stripe01">縦ストライプ</div>
<div class="stripe stripe02">横ストライプ</div>
<div class="stripe stripe03">斜めストライプ</div>
.stripe {
  width: 300px;
  height: 100px;
  margin: 30px auto;
}
/* 縦ストライプ */
.stripe01 {
  background-image:repeating-linear-gradient(90deg, #fff, #fff 10px, #fcf 10px, #fcf 20px);
}
/* 横ストライプ */
.stripe02 {
  background-image:repeating-linear-gradient(0deg, #fff, #fff 10px, #fcf 10px, #fcf 20px);
}
/* 斜めストライプ */
.stripe03 {
  background-image:repeating-linear-gradient(45deg, #fff, #fff 10px, #fcf 10px, #fcf 20px);
}

[DEMO]

ギンガムチェック

ストライプを透過色で指定し、直角に交わるように複数設定すればギンガムチェック柄も簡単です。

check01
<div class="check01">ギンガムチェック</div>
.check01 {
width: 300px;
height: 100px;
margin: 30px auto;
background-image: 
  /* 横ストライプ */
  repeating-linear-gradient(
	0deg, 
	transparent,transparent 10px,
	rgba(255,153,255,0.5) 10px, rgba(255,153,255,0.5) 20px),
  /* 縦ストライプ */
  repeating-linear-gradient(
	90deg, 
	transparent,transparent 10px,
	rgba(255,153,255,0.5) 10px, rgba(255,153,255,0.5) 20px)
}

[DEMO]

ブロックチェック

複数の色で交差させるのもかわいいですね。

check02
<div class="check02">ブロックチェック</div>
.check02 {
width: 300px;
height: 100px;
margin: 30px auto;
background-color: #ffc;
background-image: 
  /* 横ストライプ */
  repeating-linear-gradient(
	0deg,
	transparent,transparent 20px, /*透明*/
	rgba(255,170,36,0.5) 20px, rgba(255,170,36,0.5) 40px, /*1色目*/
        transparent 40px, transparent 60px, /*透明*/
        rgba(153,170,36,0.5) 60px, rgba(153,170,36,0.5) 80px /*2色目*/
  ),
  /* 縦ストライプ */
  repeating-linear-gradient(
	90deg,
	transparent,transparent 20px,
	rgba(255,170,36,0.5) 20px, rgba(255,170,36,0.5) 40px,
        transparent 40px, transparent 60px,
        rgba(153,170,36,0.5) 60px, rgba(153,170,36,0.5) 80px
  )
}

[DEMO]

バーバリーチェック

頑張ればこんなのも!

check03
<div class="check03">バーバリーチェック</div>
.check03 {
width: 300px;
height: 100px;
margin: 30px auto;
background-color: #dbbb89;
background-image: 
  /*白黒しましま*/
  repeating-linear-gradient(
	90deg,
	transparent,transparent 40px,
	rgba(0,0,0,0.5) 40px, rgba(0,0,0,0.5) 44px,
        rgba(255,255,255,0.5) 44px, rgba(255,255,255,0.5) 48px,
        rgba(0,0,0,0.5) 48px, rgba(0,0,0,0.5) 52px,
        rgba(255,255,255,0.5) 52px, rgba(255,255,255,0.5) 56px,
        rgba(0,0,0,0.5) 56px, rgba(0,0,0,0.5) 60px
  ),
  /*赤線*/
  repeating-linear-gradient(
	90deg,
	transparent,transparent 20px,
	rgba(200,0,0,0.5) 20px, rgba(200,0,0,0.5) 22px,
        transparent 22px,transparent 60px
  ),
  repeating-linear-gradient(
	0deg,
	transparent,transparent 40px,
	rgba(0,0,0,0.5) 40px, rgba(0,0,0,0.5) 44px,
        rgba(255,255,255,0.5) 44px, rgba(255,255,255,0.5) 48px,
        rgba(0,0,0,0.5) 48px, rgba(0,0,0,0.5) 52px,
        rgba(255,255,255,0.5) 52px, rgba(255,255,255,0.5) 56px,
        rgba(0,0,0,0.5) 56px, rgba(0,0,0,0.5) 60px
  ),
  repeating-linear-gradient(
	0deg,
	transparent,transparent 20px,
	rgba(200,0,0,0.5) 20px, rgba(200,0,0,0.5) 22px,
        transparent 22px,transparent 60px
  )
}

[DEMO]

斜めのストライプなんかは、PSDから素材切り出す時になかなかうまくリピートできる素材にならない(下手くそか!)ので、今後はストライプさんについてはこれを使っていこうと思います( ´∀`) 皆さんの参考になれば!

HTML5.1、5.2での仕様変更点をメモ。

html5-logo

先日Twitterにこんな投稿をしたら地味に伸びたので、私も含めて案外みんな2014年に勧告された後のHTML5の仕様変更は追ってないのかなと思い、自分のための備忘録も兼ねて主な変更点をメモしておきます。

なお自分はマークアッパーなので、仕様変更点全てを網羅するのではなく、あくまでHTMLマークアップに関連する部分のみピックアップすることとします。全ての変更点を確認したい人はW3Cの仕様書をあたってください。



2016年HTML5.1勧告時の仕様変更

HTML5.1勧告時の注意すべき仕様変更点は以下の通り。

【追加】
・picture要素とsrcset属性の追加
・details要素とsummary要素の追加
【削除】
・ネストされたセクション要素の見出しに全てh1を置くこと
・tfoot要素をtbody要素の前に置くこと
【変更】
・セクション要素の中のheader/footer要素は入れ子にできる
・figcaption要素はfigure要素のどこに書いても良い
・img要素のalt属性は削除してはいけない(たとえtitle属性がついていたり、友達にe-mailを書くような場合であっても)

など…

[参考:HTML5からHTML5.1への変更点(W3C・英語)

2017年HTML5.2勧告時の仕様変更

HTML5.2勧告時の注意すべき仕様変更点は以下の通り。

【追加】
・dialog要素の追加
・link要素のrel属性値に“canonical”、“noreferrer”、“apple-touch-icon” の値が追加
・WAI-ARIA1.1に準拠
【削除】
・keygen、menu、menuitem要素が廃止
【変更】
・dl要素の直下にdiv要素を記述できる
・body要素内にstyle要素を記述できる(ただしパフォーマンス面の問題から従来どおりhead要素内に記述することを推奨)
・複数のmain要素を記述できる(ただし最初にユーザに見せるのは1つだけで、他はhidden属性で隠す)
・fieldset要素内のlegend要素の中に見出し要素を記述できる

など…

[参考:HTML5.1からHTML5.2への変更点(W3C・英語)

おまけ&まとめ

こうやってみると一部ピックアップしただけでも結構いろいろ変わってるなーという印象ですね。

特に個人的に感慨深いのはHTML5.1の時に「ネストされたセクション要素の見出しに全てh1を置くことができる」という仕様(新しいアウトライン・アルゴリズム)が廃止されたことでしょうか。

この件についてはこのブログでもこちらの記事で言及してそれなりに反響いただいたので詳しく知りたい方は読んでみてください。

あともうひとつ、5.1、5.2での変更点じゃないのですが、HTML5の仕様策定中に検討されていたhgroup要素が勧告時に仕様から削除されたことでしょうか…。

アウトライン・アルゴリズムもhgroup要素も実は勧告前には「at risk(削除される可能性がある要注意の仕様)」とされていたものの、割と目玉機能に近いものとして勧告前から盛んに事例紹介されていたので、いざ勧告時に「やっぱこれなしね!」とか言われた時のダメージが大きかったです(汗)

HTML5仕様は今後も毎年マイナーアップデートを続けるみたいなので、これからはどんなに魅力的に見えても勧告前の、特にat riskの仕様には手を出さないようにしようと心に決めました…(苦笑)