Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all 8498 articles
Browse latest View live

CSSだけで幅を自動調整できる、横並びナビゲーションメニューの作り方

$
0
0

どうも7noteです。jsを使わなくても個数に合わせて自動で幅が調整されるメニューを作ります。

親要素の幅は固定で、子要素の数が変動しても子要素の幅が自動調整されるメニューの作り方。

作り終わったorある程度作ったホームぺージを修正・更新していると、よくメニューの数が変動したりすることがあります。
あとで追加や削除が起こると、その都度その都度CSSを調整する必要がでてきますよね。

・・・大変なので、1つ1つ自動調整するように書き換えていくように変えてしまいましょう。

CSSで要素1つ1つの幅を自動調整させる方法

みんな大好きflexboxで作っていきます。

index.html
<ulclass="menu"><li>あいさつ</li><li>私達について</li><li>あいさつ</li><li>あいうえお</li><li>かきくけこ</li></ul>
style.css
.menu{width:100%;display:flex;border:solid1px#333;}.menuli{width:100%;/* 可能な限り最大で表示 */background:#fff;border:solid1px#333;text-align:center;}

rei.png

これで要素が4個や5個でも自動的に幅が調整されるようになります。

解説

横並びにする方法はflexboxを使います。
display: flex;を指定することにより、要素が横並びになります。
特徴として、幅いっぱいに要素を等分する性質があるので、これを利用し子要素にあたる<li>を5等分にしたり、4等分にしたりすることができます。

ただ、あまり極端に数が2個から8個とかになると、デザイン的にあまり綺麗にならない可能性などがあるので、基本的には5~7個など、変動しても2個か3個くらい変動する可能性がある場所に使うのがいいと思います。

phpなどでif文をかませて要素の数がページによってかわる場合など、使える箇所はちょくちょくあるかなと思います。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ


【翻訳】wordpressのプラグインで毎月5万収益を得ている話

$
0
0

この記事はConverting My WordPress Solution into a $500/Month Side ProjectのIgor Benićさんのご本人の許可を得て翻訳をしたものです。

簡単に内容をまとめると

  • wordpressのpluginを開発して毎月5万円弱の収益を得ている。
  • 開発のきっかけはちいさな不満から
  • 低コストでもプロダクトを売り込める方法はたくさんある
  • もしプロダクトを始めたばかりなら、諦めないことが一番重要

自分の小さな不満から始まったプロダクトで、この収益を得るまでに挫折しそうになったことも多々垣間見える内容だったので似たような個人開発者の方(自分含め)だととても共感できるような内容になっているかと思います。
是非最後まで読んでみてください。

(補足)どういうプロダクト?

メールアドレスで応募できるプレゼント企画をwordpress上で簡単に始められるプラグインです。
無料だと複数の景品タイプを選べたり、メール通知やフォームを編集出来たりします。
また有料では、デザインの変更や他サービスとの連携(MailChimpとか)のカスタマイズ要素が多いですね。
screenshot-1.png

はじめに

Simple Giveawaysは、私の最初の取り組みです。これは、メールアドレスを収集しアルゴリズムを使用してプレゼントの勝者を選択するかなりシンプルな製品で幅広く色んなところで使われています。

simple-giveaways__homepage.jpg

またSimple Giveawaysはサイドプロジェクトで、ゆっくりと成長していますが、しっかりと伸びています。

コメント 2020-09-11 014041.png

作ろうと思ったきっかけ

ブログを始めたときに、トラフィックを増やす方法をググりまくっていたら、プレゼントのアイデアについての記事をたくさん見つけました。
しかし、$99でプレゼントのシステムを使えましたがそんな余裕はありませんでした。
なので、自分で作ろうとおもったのが最初のきっかけです。

実際、自分のために開発をしていただけなので、このプラグインが収益化できるとも思っていなかったですし、どちらかといえばwordpressのテーマを販売したかったと思っていたのを覚えています。

初期バージョンはどんなものだったか

最初は本当にシンプルで、メールアドレスを入れたら保存されるくらいでテンプレートも1つだけでした。
開発期間は約1か月くらいで、フルタイムの仕事の合間にやっていました。

技術的にはHTML, PHP, CSS, jQueryのDateTimePickerを使っていました。

初期バージョンができた後、さらに4つのテンプレートや、勝者を自動で選択できるようなオプションを加え、4か月後くらいにプレミアバージョンを公開しました。

どのようにユーザーを集めましたか?

まずは公式のwordpressのプラグインリポジトリに登録をしました。
今でもトラフィックの大部分はここからきます。検索をすると私のプラグインが上位に表示されています。

他に新しいユーザーを引き付ける方法はたくさんありますが、ふつうは予算が必要で、自分はそれがなかったので無料や低コストでできることをしました。

  • プラグインの使用方法を説明する記事を出した
  • 自分のサイトでプラグインを使って、体験させてみる。
  • wordpressのプラグイン紹介をしてくれるpodcastに売り込んだ
  • facebook広告
  • twitter活用
  • 開発者インタビューに答える
  • 活用方法などをまとめた動画のチュートリアルコースを作成した

facebook広告については、1日単位などで固定予算を設定できるので、$5の広告を打ったところCVは低く、18クリックしかされなかったです。しかし表示回数ははるかに多かったためプロダクトを周知できたと思っています。

結局、今でも口コミやtwitterや公式プラグインレポジトリのトラフィックに頼っています。
最近Google analyticsを入れたので、流入経路を探ったりしています。
SEOを伸ばしてみようと考えたりもしています。

どのように収益化しているのか

ビジネスモデルは、複数種類のサブスクプランを作っています。

  • 1つのウェブサイトで使用可能:
    • 年間$49
    • 永久$149
  • 2つのウェブサイトで使用可能
    • 年間$59、
    • 永久$179
  • 無制限のウェブサイトで使用可能
    • 年間$99
    • 永久$189

決済はpaypalかStripeで行っているので、ほぼ管理はいりません。

実際の2019年の内訳はこのようになっていました

1月:年間92%、永久8%
2月:年間78%、永久22%
3月:100%年間
4月:年間83%、永久17%
5月:年間72%、永久28%

もし永久プランを用意する場合は、常に新しいユーザーが必要になることを覚えておくのが大切です。

一番難しかったこと

1つはトラクションを集めることで、最初の100インストールを達成するのがとても困難でした。達成してからは緩やかに成長しました。

もしあなたが、プロダクトを作るとき、辛抱強くがんばらないといけません。最初はあなたがそのプロダクトを紹介し、広めていかないとユーザーが勝手に見つけて、使ってくれることはほぼありません。また成長を維持する為に改善を怠らないのが重要です。

2つめに、適切なキャッチーで分かりやすいプロダクト名を付けたほうがいいです。最初の100インストールをもっと早く到達できてたかもしれないです。

個人開発者へのアドバイス

もし始めたばかりなら、諦めないことが一番重要です。
それで稼ごうと思うと1年以上かかるのが普通だと思います。(私は3年以上)

あとは最初からマーケティングに力を入れます。
WEBサイトを構築したり、ビデオを投稿したり、記事を書いたりしてユーザーを様々な方法で集めます。

また、最初のバージョンはユーザーが使い始められる最低限の製品を作成して、フィードバックをもらって改善をすればいいと思います。

良い開発者ライフを!

 最後に

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない海外のマーケティング事例や個人開発のアイデアなどもツイートしているので、よかったらフォローお願いします

きりしま@個人開発

HTML、CSSの実践の書き方

$
0
0

BEMとSMACSSを組み合わせる
※Sassを覚えたらSassも取り入れる

【BEM】

{Block}__{Element}
{Block}-{Modifier}
{Block}__{Element}-{Modifier}

----- 例 -----

.archiveItem {
  margin-bottom: 20px;
}
.archiveItem__inner {
  display: flex;
  padding: 10px;
}
.archiveItem__thumb {
  margin-right: 20px;
}

【SMACSS】

– Base
– Layout
– Module
– State
– Theme

----- 例 -----

body {}
html {}

/*---------- Layout ----------*/

.l-header {}
.l-footer {}
.l-main {}
.l-sidebar {}

/*---------- Module ----------*/

.button {}
.is-button-warning {} 
.label {}
.is-label-hidden {} 
.is-label-error {}
.heading {}

/*---------- Theme ----------*/

.dark-mode {}
.light-mode {}

※BEMが使えるものはレイアウトに入れ、BEMを使わないものはモジュールに入れる

【初学者向け】TECH:CAMPに通って、WEBアプリ制作までの記録

$
0
0

自己紹介

私は、平日は会社に勤務している23歳のサラリーマンです。
自動車のエンジン関係の仕事に従事しており、
仕事では、会社既存のソフトを扱ったりエクセルで資料作ったりする程度。
当時、キーボードは人差し指と中指のみで入力していたくらいで
パソコンはあまり得意ではありませんでした。

そんな男性のWEBアプリ制作までの記録です。

.
当記事は、WEBアプリを初めて作成される方に向けて参考になればと思い書きました。
技術的なことは、ほとんど載せていません。
「へー、こんな感じで取り組んだんだー」 程度に見ていただければ幸いです。

なんでTECH:CAMPに入ったの?

1度、プログラミングの独学に挑戦したのですが、1週間で挫折してしまったからです。

2019年の8月に、あるプログラミングに関する動画を何気なく見たときに、
「あれ、これ俺にも出来そうじゃね」
とか動画を見ただけで「できそう」と勝手に思ったのが始まりです。

書店にあったJavaScriptの参考書を購入し、
最初のページからちまちまと取り組んでいきました。
学習1、2日目は、今までで知らなかったことを手を動かしながらできる感覚が
面白いと感じていたのですが、3、4日目からだんだんとやる気がなくなっていきます。

結局、人生初のプログラミング独学は、1週間で幕を閉じてしまいました。

.
それから2020年3月、マコなり社長の動画を何本か見た時に
「プログラミング学習、再開してみようかな」と思っていたのですが、
なかなか思い切ってやってみよう!と言う気にはなれませんでした。

しかし、この動画が決め手となり、入会を決意します。
:point_right:人生おもしろくない人が「今すぐ」やるべきこと

動画の中で「ポチる」と言う言葉の矢が胸に刺さり、
刺さった勢いでTECH:CAMPのスクールまで飛んで行きました。

.
ちなみに私が入会したのは
プログラミング教養コースです。
エンジニア転職コースとは別なので
ガチで転職を考えている方は下記の記事を参考にしていただければと思います。

:point_right:テックキャンプに通ってエンジニア転職した人の感想

WEBアプリ制作までにやったこと(基礎〜応用)

基礎カリキュラム

TECH:CAMPのWEBコースにあるカリキュラムを順番に取り組んでいきました。
やってきた言語は大きく以下の3つです。

  • HTML
  • CSS
  • Ruby(Ruby on Rails)

これらをカリキュラムの順番通りに進めていきました。

TECH:CAMPでは「学習進捗表」という、
1日の学習時間の記録やカリキュラムの進捗を「見える化」したシートが用意されています。
大体どのくらい取り組んだか振り返ってみると以下の通りです。

  • HTML/CSS     :15+10 = 25時間
  • Ruby(Ruby on Rails) :28+49 = 77時間

足算になっているのは、カリキュラムを2周したからです。

1周目は「プログラミングはこんな感じなんだー」
という感じで、さらっと流す程度に取り組んでいきました。

と、言いたかったのですが、これは1周目 後半の話し。
実は、1周目の前半は一言一句覚えようとなかなかクレイジーなことをしていました。

何をしていたかというと、
「これは覚えられそうにないな…」と思ったことをメモ帳に書き込んでいたのです。
スクリーンショット 0002-09-11 午後7.49.57.png

画像をよくみると、左上のスクロールバーが豆粒になるくらい
書き込んでいました。

「え、別に何の問題もないんじゃ・・・」
.

断言します。
ダウンロード.jpeg

『メモ、ちょーいらん』

メモと言うより、「覚え書き」と言う方が適切ですかね。
義務教育でやってきた、先生が黒板に書いたことを
そのまま書き写すような行為は、無駄だと言うことに気付きました。
考えてみれば、昔書いたノートを見返すのは、テスト前くらいで
毎回、見返すことって全くなかったです。
このメモは5ヶ月ぶりに開きました。(ナンテコッター)

書いてあることを写すやり方は、
「あー勉強したー」と学習の充実感を味わえるのですが、
記憶の定着が少ししかできないことに加え、
見返さないので、意味がない行動だったと言えます。

.
では、どのようにして覚えていたか?

私の場合は、コードを書きながら覚えていきました。
例えばこんな感じです。

「スクレイピング」を覚えようとした時…
(ウェブサイトから情報を取得し、その情報を加工して新たな情報を生成すること)

ダウンロード (1).gif

このように、ある機能や仕組みについて覚えようとするときは、
実際にやってみて、それがどういうものなのか「やりながら、覚える」ようにしてきました。
実装して「できた」という感覚に、できたことの概要をリンクさせるイメージです。
スライド1.jpeg

1周目の後半からは、カリキュラムに書いてあることを2〜3割程度わかればいいや 
と言う感覚で進めました。

.
2周目は、
1周目で理解できていなかったところを復習していきました。
2周目はざっくりとしたことは覚えているから、スムーズにいけるだろう
と思っていたのですが、そうはいきませんでした。

「わからないところありすぎて、全然理解できでないじゃん…」

前、覚えたところを、もう忘れてる。
そんな自分を情けなく思う時がありました。

このようにネガティブに思っていた時は、
学習の意欲が沸きにくくなり、思うように進まない日も…

TECH:CAMPには、メンターと呼ばれる、学習のコーチが学習のサポートだけでなく、
進捗のサポートや学習の悩みを解決する手助けをしていただけます。

そのメンターに相談をして、自分なりに導き出した解決策は、

「わからないところ多くてもいいじゃん、人間だもの」
と考えることです。

わからない「もやもや感」から生まれるストレスは、これもまた義務教育でやってきた
「テスト対策の暗記学習」が根付いていたからです。
覚えていないと点数が取れない のと似たように、
覚えていないと学習が進まない と思っていたことが原因でした。

プログラミングはわからないことがあっても
「カンニングOK」なのです。

わからないことは頭を抱えてうーんって悩むよりも
Googleでカンニングをして解決する方が時間の効率化と悩む時間の削減に繋がります。

もっと気楽に学習してもいいと言うことを学びました。

応用カリキュラム

ここでは、カリキュラムで用意されたWEBアプリのお手本を参考にしながら
なるべく自分の力で実装する学習をやってきました。
スクリーンショット 0002-09-12 午前8.59.13.png

学習時間は、復習も兼ねて約135時間かけてカリキュラムを終えました。
応用という言葉通り、基礎よりも内容が難しくなり、
出来た時の嬉しさ2倍に対して、悩む時間2倍といった感覚です。

悩む時間が2倍と言うことは、メンターに質問することも2倍になった?
かと言うと、逆に1/2に減りました。

応用カリキュラムに入ってからは、エラーの原因が大体これかなーと
「仮説」をたてて解決できるようになるからです。

エラーの解決をどのようにしてきたか に関しては、
この後のWEBアプリ制作過程の中でお伝えします。

基礎、応用学習を終えて

ここから、いつか実現させたかったWEBアプリの制作に取り組みました。

私が制作したオリジナルWEBアプリはコチラです。
:point_right:Unsung:hero
image.png
image.png
image.png

どんなWEBアプリかというと、「企業を簡単に紹介する」WEBアプリです。
Wikipediaのページから指定した物だけをスクレイピングしてデータベース(以下DBと省略)
に保存、一覧に表示させたり、編集、検索したりできます。

WEBアプリを作る前に

WEBアプリをつくる前に、
そもそもの目標(この学習を通してどうなりたいか)を振り返ってみます。

私の目標は2つありました。

1つは、「自分の手でプログラミングをして何か作ってみたい。」
もう1つは、「学んだスキルを仕事に活かしたい。」

この2つの目標が、プログラミングに取り組む「原動力」でもありました。
パソコンに向かった時にいつも「目標」を思い出していました。

私の場合、
「このスクレイピングってやつを使いこなしたら、めっちゃいいもの出来そう!」
「このアプリ制作で学んだスキルが、きっと誰かの役に立つアプリやツールが作れる!」
と言った感じですかね。

実を言うと、目標ではないのですが、
目的に「モテたい」という思いがちょっとあったのも事実です。(←おい)

(心の声)
.
「プログラミングできる俺、超イケてる。」
「スタバでMac広げて、ブラインドタッチしてる俺、まじかっこうぃぃ」

thmb-0l.png

あれ、なんでWEBアプリなんか作っているんだっけ?
とやっていることの目的を見失ってしまうことがあります。
主に解決できないエラーにつまづいたり、明確なビジョンが浮かばなかったり
した時がそうだと思います。

私は、行き詰まったとき、自分のなりたい姿を思いだしていました。

目標のイメージは、創作活動の「原動力」に繋がります。

どんなWEBアプリを作るか

ここからは、どのような制作過程で取り組んだかまとめました。
.

最初から、これを作りたい!とアイデアがあればこのステップは問題ないですが、
0から作ろうとするといろいろなことを考えてしまいます。

「途中で挫折しないように、自分が製作できる程度のWEBアプリにしよう!」
「でも、自分ができる程度ってどんな程度? これなら? あれなら?」

頭がガッチガチに固まってたので、メンターに助けを求めた時に
このような回答が返ってきました。

『作りたいもののアイデアがない時は、身近な問題解決に着目するのがよいと思います。』

例えば、
「近くのキャンプ場は行きつくしたから、穴場のキャンプ場とかないかな…」
→と思っている方向けに、キャンパー同士で情報交換ができる掲示板のサービス

「明日は彼女とドライブデート! でも、俺って流行りの音楽とか良くわからないからな…
流石に俺の好きなオペラとか流したら引かれるよな… どうしよう…」
→と困っている方には、Youtubeから流行りの音楽を自動で取り込み、
 シャッフルして再生するサービス

と、日常の中で起こりうる問題や困りごとを解決するものに着目します。 

.
.
なるほど…

私の場合は、「あれ、この企業って何してる会社だっけ? 知りたーい」
と思うことがあったので、簡単に企業を紹介、閲覧できるWEBアプリの制作に着手しました。

もし、アイデア出しの段階で躓いている方は、
『困っている人の役に立ちそうなもの』を作ってみてはいかがでしょうか?

私の作ったWEBアプリは正直、人の役には立っていません。
ですが、もしこれを使ってくれる人がいて、何かの役に立っているところを想像しながら
取り組むことで、モチベーションの維持、向上に繋げてきました。
picture_pc_1654cd691caca499314fe530f62c98b7.jpg

設計

どのようなアプリにするか考えがまとまったら、画面の設計に移りました。

まずは、お手本を探す

「画面の設計かー。とりあえず、雰囲気を掴むためにいろんなウェブサイト見て回ろう!」

…うん
.
.
…なるほど、

スクリーンショット 0002-09-06 午後3.45.10.png
「たくさんアリスギィ!!」

初心者だった私には、参考にするものが多過ぎて
何を参考にしたらいいかわかりませんでした。

ここで、問題だったのが『複雑なサイト』ばかりを参考にしていたことです。
取りあえず、超シンプルなサイトを参考にすることにしました。

ちなみに、私が参考にしたサイトはコチラです:point_down:

.
私は、設計のお手本探しの段階では、

  • 自分が制作できそうなシンプルなサイトを調べまくる。
  • 作れそうなのレイアウトのイメージが決まったら、参考にするサイトを1個に絞る。

という流れで取り組みました。

参考にするサイトを1個に絞った理由としては、
「あ、このサイトお洒落だしここを取り入れたいな!」
「うわ、この写真が動くやつかっこいいやん! これもいいなー」

とお手本にする候補が定まらなくて、めちゃくちゃ時間が掛かったからです。
決めるのはあくまで「大まかなレイアウト」です。

…細かい機能は後から追加できることに、途中で気づきました。

レイアウトを紙に書き出す

レイアウトのイメージが思い浮かんだら、整理しやすくするためにアウトプットが重要です。
デザインツールやワイヤフレームを作るアプリを活用してみようと思ったのですが、
すぐに取り掛かりたかったので、紙に書き出すことにしました。
78F6AB65-B5ED-4979-A6B6-6FE7CBFDD7A4.png
IMG_0527.jpg

写真のように、紙1枚につき、1つの画面を書いて整理していきました。

データベースの設計

まず、アプリを制作する前にどんなデータが必要か整理しました。
image.png
:point_up:1度廃案にしたWEBアプリのデータベース設計時につくった
 必要になりそうな情報リストです。
(紹介したWEBアプリの設計図はほとんど描いていなかったので、これで勘弁してください)

これは、キャンプ道具のレビューアプリの構想なのですが、
どんな情報が必要になるかまとめると以下の通りです。

  • アプリに登録したユーザーの情報
  • キャンプ道具の情報
  • キャンプ道具に対する各ユーザーからのレビュー(評価☆)情報
  • キャンプ道具に対する各ユーザーからのコメント情報

このように、どんな情報が必要になってくるか、どんな情報があったらユーザーは嬉しいか
紙やPCのメモ帳になどに「言語化」して書き出していきました。

必要な情報を整理

ここでは、グループ分けをして

例のキャンプ道具レビューアプリには大きく「キャンプ道具」「ユーザー」「レビュー」
でまとめられます。
スライド1.jpeg
それぞれのテーブルにどんなカラムが必要になるか考えていきました。
スライド2.jpeg
スライド3.jpeg
今まで上げてきた情報の関係性を紐付けしていきます。
スライド1.jpeg

テーブル同士の関係性をまとめて、テーブル設計を完成させました。

プログラミング(HTML、Ruby篇)

いよいよ、ぽちぽちタイムがやってきました。
振り返ってみれば一番問題に遭遇したのはこの時だったと思います。

「これはうまくいったな」と実装、テストしては”エラー”
「これで解決したな」と修正しては”エラー”
エラーエラーエラー…

まるで、ジャイアンに殴られるかのように「ボッコボコ」にされました。
image.png

綺麗なジャイアンが言っている通り、エラーの連発で辛かった日は指の数じゃ収まりきらず、
心が折れかけることがありました。

そんな中でどのようにエラーの解決に立ち向かったか、
.

いろいろやった結果、大きくこの3つの方法で解決していきました。
やっていった手順は以下の順番通りです。

1、エラーメッセージの解読、検索方法を工夫し原因を探る
2、teratail、Twitterを活用して助けを求める
3、直接人に会って助けを求める

1、エラーメッセージの解読、検索方法を工夫し原因を探る

エラーメッセージに遭遇した時は、ラッキーです!
なぜなら、どこが間違っているのか、ちゃんとヒントを教えてくれるからです。

でも、エラーメッセージさんが「この列のここが間違っているよ」と教えてくれても、
「こんなに英語いっぱい表示されても、悪いかわからんわい!!」と最初はよく思っていました。
EefyEpUUwAcJiYm.png

まあまあ、落ち着いて。
まずは、エラーの読み解き方や接し方に関する情報を参考にして向き合うことにしました。

下記のリンクに参考にさせていただいた、エラーの解決に役立つ記事を載せておきます。

エラーの対処のほとんどは、これで解決していきました。

最初は、エラーに苦手意識があったのですが、
日々、原因探しをこなす内に、ある変化が起きてきます。

ある日、エラーが発生しました。
.

「よっしゃ!エラーが来たぜ! 今日はどんな子が悪さをしてるんだ〜? うへへへぇ…」
「おらあああああああ!! 貴様だな!! 俺は見逃さないぞ!! ううぃいいいいっ!!」

そうです。

エラーを見つけると興奮する変態になりました。
DMvsI3QW0AYq3Yj.jpeg

2、teratailを活用して助けを求める

しかし、自分の力ではどうしても解決できなかったこともありました。

何かいい解決方法がないか探していた時に、teratailに出会います。

.
teratailは本当に凄いんです!
脳味噌が沸騰するくらい考えて調べていたことを
1日も掛からない内に、的確な回答と問題解決方法が返ってくるのです。

人生で初めての投稿で緊張しながら、投稿内容に不備がないか何度も何度も確認し
1日分のエネルギーを込めて押した「投稿ボタン」

数時間後、teratailから通知が来て、回答欄のコメントが目に入った時、
「こんなに優しい世界があったんだな…」
と天にも昇る気持ちになったのを今でも覚えています。
25240286-天国の門のイラスト.jpg

この経験から、「自分で解決できないことは人に頼ってもいい」
と言うことを学びました。

正直、投稿する前は恥ずかしい、怖いと言う気持ちがあり、投稿をためらっていました。
過去に投稿されていた、ある質問の回答を目にした時、
「調べてください。」「理解していますか?」という回答もあったからです。

私は、思い切って投稿することを決心をしました。
解決しなければ、前進しないと思いました。

.
(心の声)
「ああ 神よ、この無知なわたくしに御慈悲を…」
ggrksとか どんな冷たい言葉もご褒美として受け止めます。」
(↑ちょっとこれは考えすぎ)

実際に、質問をしてみると指摘を受けることもありましたが、
問題の解決に必要な情報を、もう少し詳しく教えてほしいということがほとんどでした。

質問に答える側の立場になって
「こんな質問だったらスムーズに回答できそうかな」と
考えて質問することを、普段の仕事でもこの気持ちは常に持っておこうと思いました。

もし、悩み事があったら1度teratailを使ってみてください。

私は人に何かを伝えることは得意な方ではありませんが、
参考に私の投稿一覧を載せておきます。
goffee555

3、直接人に会って助けを求める

この解決方法は、本当にいきづまった時の最終手段としていました。
私の人脈だと、プログラミングをやっている友人や先輩が近くに居なかったため、
メンターに頼るしかありませんでした。

初めから、メンターに質問することも最初の頃は考えていましたが、
「相手の立場になってこんな質問だったら回答しやすくなるかな」と一度思考します。

思考する際にも、紙に書き出して考えをまとめていきました。
IMG_0532.jpg
紙に書き出すことは、以下のようなことです。

  • 何をやっていた時にエラーが出たか
  • どんなエラーコードが出力されていたか
  • エラーの内容に基づき、どんなことを調べたか
  • 調べたことを実施した結果
  • 「もしかしたらAを操作したから、影響をうけるBが問題なのでは」というような仮説

このように、とりあえず考えつくことを言語化することで、思考を整理させていきました。

思考の整理ができたら、メンターに質問をしていきます。
私はこのような流れで質問をしていきました。

▷ホニャララさん、今〇〇を実装しているところでエラーが発生して困っています。
(やっていることの認識を一致させる)

▷××をインストールした後に、サーバーを起動をしました。
(エラーが起きる前と後の状態を伝える)

▷そしたら、このようなエラー文が出力しました。
(エラー文の内容を認識してもらう)

▷エラー文から〇〇を検索して、〇〇を操作しましたが解決できませんでした。
(やったことを報告する)

▷今日1日中、解決できずに困ってて、辛いです。どうか、みてもらえないでしょうか?
(本当に困っている顔で伝えると効果抜群!)

この質問の仕方だと、まだまだ甘いところもあると思いますが、
「相手の理解が追いつかない状態をつくらない」
ことを質問する前に意識していました。

これを意識するのには、
物覚えが良くなく、人の話を最後まで理解できない私だからこそ、
「理解に徹してもらえるコミュニケーション」をしないといけないと思っていたからです。

例えば、Siriに
「ヘイ、Siri! 天気。」と聞いたら、
「キョウノテンキハ、ハレ トキドキクモリ。サイコウキオン28ド…」と返ってきますが、

人に聞く場合は
「太郎! 天気。」と聞いたら、
「は?」って返ってくること間違い無いですよね。

今日の天気という質問の中に、いつの? どこの? なんで?と
いろいろ情報が不足していていることが問題ですよね。
または、天気を聞き間違えて 元気? と聞きとれられて
「うん、元気!」と返ってくることもあると思います。(Siriも例外でない)

このような日常的なコミュニケーションでも認識のズレを少しでも減らすためにも
「理解に徹してもらえるコミュニケーション」は今後も続けていきます。

プログラミング(CSS篇)

CSSの実装に関しては、モヤモヤを乗り越えるまでが結構大変でした。
そのモヤモヤというのは、
「正しい実装の方法がわからない」ことです。

例えば、usersテーブルにskillという名前のカラムを追加する場合は、

$ rails g migration AddSkiliToUsers skili:データ型(stringやtextなど)
$ rails db:migrate

というように、決まったやり方があるので、なんとかできるのですが、

CSSは「これが正解」というものがないので最初はあたまピヨピヨ状態でした。
例えば、要素を横並びにさせたい時の例です。
image.png

下記の方法で実現できます。

  • float
  • inline-block
  • table-cell
  • flexbox

「いや、どれ使ったらいいんですか!?」
とにかく、やってみないことには進まないので、適当にやってみました。

.
.
.

ダウンロード (2).gif

すごい、嫌がらせをするメニューバーができました。

試行錯誤しているうちに、CSSの実装は何とか完成させることはできたのですが、
「この実装が正解」と言うものは今でもわかりません。

この、わからないだらけの状況のなかを どのように乗り越えたのか?

それは、
「レイアウト崩れてもいいから、とにかく完成させよう」
という気持ちでやり切りました。

そうです。問題は解決していないのです。(なんてこった)

作ったWEBアプリはブラウザの画面を全部広げて、かつズームが100%の状態でなければ
成立しない仕様になっているのです。
拡大(ズーム100%以上)、縮小(100%以下)にするとレイアウトが崩れてしまします。

でも、よいのです。
このWEBアプリ制作は収入をもらって、完璧なものを納品しているわけではなく、
自分の目標の達成に向けた1手段だからです。

もし、CSSの実装で、
「ブラウザの表示範囲によってレイアウトが切り替わるレスポンシブなのを作りたい」
「でも、難しくてうまくできない…」
と2つの理想と現実に板挟みになることがあれば、

「とりあえずできる所からやっちゃえ」

と気楽にやっていきましょう。

デプロイ、修正

ローカルで開発したWEBアプリを完成させたあとは、全世界に公開します。
アプリの公開はHerokuという無料で使えるクラウドサーバーを使用しました。
カリキュラム内で、デプロイ(作ったプログラムを使える状態にする)の方法が
載っているので、手順通りにやっていきました。

デプロイが完了した後、バグの修正や検索機能の追加など
しこしこやって、なんとか完成させることができました。

いやー、アプリが完成した時の達成感はもちろんあったのですが、
それ以上に、使ってくれた人がいたことが何よりもうれしかったです。

ここまでたどり着くのに、支えて下さったメンターの方々、teratailの回答者、
同じスクールの受講生に助けられたからだと思っています。

本当にありがとうございました。

今後どうするか

私は、「プログラミング講師になる」という夢ができました。
新しい技術を学び、活かしていくことも楽しいのですが、
多くの人に、「できた」という成功体験を味わって欲しいからです。

私の欠点は、「物覚えが良くなく、人の話を最後まで理解できない」ことですが、
この欠点は最大の武器だと思っています。

「物覚えが良くなく、人の話を最後まで理解できない」からこそ
理解できるまで、相手の困っていることに耳を傾けることができる、
理解できるまで、深く調べ解決することができる自信があります。

現在、転職活動に向けて活動をしていくところです。

WEBアプリ制作完了というゴールを迎え、新たなスタートラインに立ちます。
次回は、転職活動の記録を載せていこうと思います。

それでは、私の夢が叶う日まで…

.
.
P.S. 約9400文字書きました。疲れたー

【初心者でもわかる】画像の上に半透明の背景と文字を乗せる方法

$
0
0

どうも7noteです。画像の上に文字を表示させたい時の方法

こんな感じに写真の上に文字が乗ったデザインを作ります。

sample.png

作り方

作り方は、画像と文字をくくる親要素を作り、position指定で好きな位置に文字をもってきます。

index.html
<divclass="onimg"><imgsrc="sample.jpg"alt="画像名"><p>画像の名前が入るよ</p></div>
style.css
.onimg{width:300px;/* 画像の横幅(自由に指定) */position:relative;/* 帯の表示位置の基準とする */}.onimgimg{width:100%;}.onimgp{color:#fff;text-align:center;width:100%;/* 画像の幅に合わせるため */padding:10px0;position:absolute;/* relativeの要素を基準にする */left:0;/* 基準からみて左寄せ */bottom:0;/* 基準からみて下寄せ */background:rgba(0,0,0,0.5);/* 半透明の背景。 */}

解説

親要素の.onimgに対してposition: relative;を指定します。
そのうえで子要素のpに対してposition: absolute;を指定することで、画像の上に半透明の背景付きで文字を表示することができます。

また、半透明にする時にopacityを使ってしまうと文字も半透明になってしまうので、rgba()で半透明の背景を指定します。
rgba()は左からrgba(赤色,緑色,青色,透明度)の順番で指定します。今回は黒の透明度50%にしたのでrgba(0,0,0,0.5)となります。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ

VS CodeとMarkdownで書いた技術同人誌に導入したCSS組版

$
0
0

技術同人誌を書きました

クリエイティブコーディングに関する技術同人誌を書きました。
「できるだけ〜」の方は第2版ということで、初版よりも読みやすくしたい!ということでCSS組版を導入しました。

EfYmwMTUMAIqzeF.jpeg

上が初版、下が第2版です。見出しのデザイン、余白の大きさなどに違いがあります。

結論をいうと自分で色々カスタマイズできてめちゃくちゃ楽しかったのですが、
かえって凝りすぎて時間がかかってしまった印象です。
先人たちが公開している便利なツールの使用も検討すべきだったなと思います。

VS CodeでMarkdown原稿を書く準備

以下の記事に執筆にあたり便利な拡張機能をまとめてあります。

VSCodeとMarkdownで技術同人誌書いたので拡張機能とかまとめ - Qiita

CSS組版の導入方法

こちらの記事を参考にしました。
【Visual Studio Code】Markdown PDF のスタイル(CSS)を変える方法 - Nekonote

大まかな流れとしては
VS Codeでワークスペースを作成→CSSファイルを作成→ワークスペースの記述ファイルにCSSファイルのパスと余白の設定を書く
…という感じです。

ワークスペースの設定について、私は以下のように書きました。

{"folders":[{"path":"."}],"settings":{"markdown-pdf.styles":["./style.css"],"markdown-pdf.margin.top":"2.5cm","markdown-pdf.margin.bottom":"3.5cm","markdown-pdf.margin.right":"2cm","markdown-pdf.margin.left":"2cm",}}

CSSファイルの記述

色々組み合わせていたら最終的にこのようになりました。

body{font-family:"游明朝体";font-size:11pt;}h1{font-family:"游ゴシック体";padding-bottom:0.3em;line-height:1.2;border-bottom:2pxsolid#A4CA68;position:relative;padding-left:18px;font-weight:bold;}h1:before{background:#A4CA68;content:"";height:28px;width:8px;left:0;position:absolute;top:3px;}h2{font-family:"游ゴシック体";padding-bottom:0.3em;line-height:1.2;position:relative;padding-left:18px;font-weight:bold;}h2:before{background:#A4CA68;content:"";height:20px;width:5px;left:0px;position:absolute;top:3px;}h3{font-family:"游ゴシック体";text-decoration:none;font-weight:bold;}ol{counter-reset:li;list-style:none;}olli{padding-left:1em;text-indent:-1em;margin-bottom:0.5em;}ol>li::before{content:counter(li)".";counter-increment:li;font-weight:bold;}p{text-indent:1em;}.no-jisagep{text-indent:0em;}code{margin:02px;padding:1px5px;white-space:nowrap;background-color:#f8f8f8;border-radius:3px;color:#4271ae!important;border:1pxsolid#cccccc;}precode{margin:0;padding:0;white-space:pre;border:none;background:transparent;color:#000!important;}blockquotep{text-indent:0em;}

こだわりポイントは以下のとおりです :

  • 見出しはゴシック体、本文は明朝体と別のフォントを指定しました。
  • 見出し(特に一番大きい見出し)に装飾をつけてアクセントとしました。
  • 順序付きリストで付与される数字を太字にしました。
    また、リストが2行に渡った際に2行目以降を記号の下に来るように調整しています。
  • 各段落の冒頭は字下げしました。引用文では字下げしない設定にしています。
    意図的に字下げしてほしくない時はno-jisageクラスを指定すればok(名前は適当)
# 奥付<divclass="no-jisage"><p><strong>本のタイトル</strong><br>本のサブタイトル</p><p>XXXX年X月XX日 初版発行</p><p>著者 : @reona396</p></div>

【厳選8個】フロントエンド開発でちょっとした時に役立つCSS Tips集

$
0
0

Webアプリのフロントエンド開発をしているときによくあるケースのCSSのTips集です。

私はWebエンジニアをしていてCSSもたまに書くのですがたまにしかないため、「こういう時どうやってCSSを書けばいいんだっけ?」となることが多く、都度、調べています。

自分の備忘録的な目的でまとめていますが、もし同じような問題に遭遇してやり方がわからないという方のお役に立てれば幸いです。

環境

以下の環境で確認をしています。(2020年9月時点で最新版の環境です。)

  • macOS Catalina :10.15.6
  • Chrome:85.0.4183.102

1. 一行に収まらない長さのテキストの場合は「...」で切る

やりたいこと
テキスト1行_説明付き.png

解決策

テキストのスタイルにoverflow-x: hidden;text-overflow: ellipsis;white-space: nowrap;を指定する

HTML

<divclass="cut-long-text">一行に収まらない長さのテキストの場合は、途中でテキストを切って「...」で表示する
</div>

CSS

.cut-long-text{overflow-x:hidden;/* はみ出る部分は非表示 */text-overflow:ellipsis;/* はみ出る部分を...で表示 */white-space:nowrap;/* 行の折り返しをしない */}

参考:APIリファレンス

2. タグ内の最後のスペースを表示する

やりたいこと

<div>I agree to </div><a>Terms of Service</a>

のように、テキストの後ろにaタグのリンクテキストをつなげる場合。
この場合、toの後ろにスペースを入れたい。
(よくあるケースとしては下にある図のように、利用規約部分だけをリンクにしたい。)

タグ内スペース_説明付き.png

解決策

white-space: pre;を指定する

HTML

<div><divclass="text-show-space">I agree to </div><a>Terms of Service</a></div>

CSS

.text-show-space{white-space:pre;}

参考:APIリファレンス

3. 文字とアイコンの位置を揃える

やりたいこと

テキストとSVGアイコンを同じ行に表示するときに、テキストとアイコンの上下方向の位置を揃えたい
アイコン位置揃え_説明付き.png

解決策

アイコンのline-heightをテキストと同じ高さに指定し、vertical-align: middle;を指定する

HTML

<divclass="text-with-icon">新規作成</div><divclass="icon-wrapper-alignment"><divclass="icon"><svgwidth="16px"height="16px"aria-hidden="true">
            ...
    </svg></div></div>

CSS

.text-with-icon{line-height:30px;}.icon-wrapper-alignment{line-height:30px;/* テキストと同じline-heightにする */}.icon{vertical-align:middle;/* 上下中央に配置する */}

参考:APIリファレンス

4. SVGアイコンの色をCSSから指定する

やりたいこと

SVGアイコンの色をCSSで指定したい
(テキストの色が状態によって変わるのでそれに合わせてアイコンの色も変えたい場合など)

svgアイコンの色指定.png

解決策

svgアイコンのfillやstrokeの値にfill="currentColor"を指定する

HTML

<divclass="text-info-color">新規作成</div><divclass="icon-wrapper"><divclass="icon text-info-color"><svgwidth="16px"height="16px"aria-hidden="true"focusable="false"data-prefix="fas"data-icon="plus-circle"class="svg-inline--fa fa-plus-circle fa-w-16"role="img"xmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><pathfill="currentColor"d="..."></path></svg></div></div>

CSS

.text-info-color{color:turquoise;}

参考:APIリファレンス

5. 両端にボタンを配置する

やりたいこと

Flexboxを使ってボタンを両端に配置したい

ボタン両端揃え_説明付き.png

解決策

ボタンを囲む親要素にjustify-content: space-betweenを指定する

HTML

<divclass="flex-container"><button>キャンセル</button><button>OK</button></div>

CSS

.flex-container{display:flex;justify-content:space-between;width:100%;}

参考:APIリファレンス

6. ポップアップメニューを表示する

やりたいこと

ボタンを押したらそのすぐ横にポップアップメニューを表示したい。そのような場合のpositionの指定方法。

ポップアップあり.png

解決策

getBoundingClientRectでボタンの位置を取得して、ポップアップメニューの位置をabsoluteにする

HTML

<buttonclass="button"id="button-menu">メニュー</button><divclass="box menu"id="menu"><divclass="menu-item">新規作成</div><hr><divclass="menu-item">削除</div><hr><divclass="menu-item">設定</div></div>

CSS

.menu{visibility:hidden;position:absolute;}.menu-item{line-height:40px;}

JavaScript

constbuttonMenu=document.getElementById('button-menu')constmenu=document.getElementById('menu')buttonMenu.addEventListener('click',()=>{// ボタンの座標を取得するconstbuttonPosition=buttonMenu.getBoundingClientRect()// メニューの座標を設定するconststyle=menu.style;style.visibility='visible'style.top=`${buttonPosition.top+window.scrollY}px`style.left=`${buttonPosition.right+20}px`})

参考:APIリファレンス

7. 画像の縦横比を変えずに表示する

やりたいこと
画像を縦横比を変えずに表示させたい。

画像だめ_説明付き.png

画像OK2_説明付き.png

画像OK1_説明付き.png

解決策

object-fitを利用する

HTML

<!-- 縦横比が変わってしまう --><imgclass="img-fill"src="images/hot-air-balloon-5390487_1920.jpg"><!-- 縦横比を維持 --><imgclass="img-contain"src="images/hot-air-balloon-5390487_1920.jpg"><!-- 縦横比を維持(はみ出る部分はトリミング) --><imgclass="img-cover"src="images/hot-air-balloon-5390487_1920.jpg">

CSS

.img-fill{object-fit:fill;/* 縦横比が変わる */width:300px;height:300px;}.img-contain{object-fit:contain;/* 縦横比を維持 */width:300px;height:300px;}.img-cover{object-fit:cover;/* 縦横比を維持(はみ出る部分はトリミング) */width:300px;height:300px;}

参考:APIリファレンス

8. 画面全体を半透過でオーバーレイする

やりたいこと

ローディングやモーダルダイアログなどを出したいときに、背景となる画面全体を半透過でオーバーレイする

オーバーレイ元_説明付き.png

オーバーレイあり_説明付き.png

解決策

疑似要素(::before)を使用する

HTML

<divclass="overlay"></div>

CSS

.overlay{position:fixed;top:0;left:0;background-color:rgba(0,0,0,0.6);}.overlay::before{content:"";display:inline-block;height:100vh;width:100vw;}

参考:APIリファレンス

【初心者でもわかる】hover時に、画像の上に半透明の背景と文字を乗せる方法

$
0
0

どうも7noteです。画像の上に文字を表示させたい時の方法パート②

※パート①、常に上に文字を乗せる方法はこちら

こんな感じに写真の上に文字が乗ったデザインを作ります。

sample.gif

作り方

作り方は、画像と文字をくくる親要素を作り、position指定で好きな位置に文字をもってきます。

index.html
<divclass="onimg"><imgsrc="sample.jpg"alt="画像名"><p>画像の名前が入るよ</p></div>
style.css
.onimg{width:300px;/* 画像の横幅(自由に指定) */height:225px;position:relative;/* 帯の表示位置の基準とする */}.onimgimg{width:100%;margin:0;}.onimgp{color:#fff;width:100%;height:100%;margin:0;position:absolute;left:0;bottom:0;background:rgba(0,0,0,0.5);opacity:0;display:flex;align-items:center;justify-content:center;}.onimg:hoverp{opacity:1;}

解説

細かい方法については前回の記事で書いたので割愛。

変更点としては、文字の表示位置を上下中央にもってくるためdisplay: flex;を使って上下中央寄せにしています。
そしてopacity: 0;を指定しておき、hoverした時にだけopacityを1にすることでマウスをのせたときにだけ表示することができます。

また、ふわっと表示させたい場合はpに対してtransition:all 0.2s ease;を指定することでできます。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ


初心者でも、これを読めばOK!簡単にSNSボタンを作れる方法!【Bootstrap/HTML/CSS】

$
0
0

SNSボタンを表示させたい

プログラミングを学び始めて、もうすぐ2ヶ月。
Webアプリを作ることが増えてきました。

そこで、よく思うことが「SNSボタンを綺麗に表示させたい・・・」

image.png

▲こーゆーやつを、ページ下部にキレイに表示させるのが初心者には大きな一歩なのだ!!!

ということで、自分への備忘録も兼ねて、作り方をまとめておきます。

作り方

「Bootstrap」というCSSフレームワークを使う

あくまで簡単に作るのが目的なので、「Bootstrap」を使います!
初心者の方に説明すると、htmlに一文ちょこっと追加するだけで、CSSが楽になる魔法のツールです!

では、以下のページにSNSボタンを追加してみましょう!

image.png

html

まず、htmlの

部分に以下を挿入します。
<linkhref="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"rel="stylesheet"/>

こんな感じになります。

<!DOCTYPE html><html><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>プロフィール</title><linkhref="style.css"rel="stylesheet"/><linkhref="https://fonts.googleapis.com/css?family=Roboto"rel="stylesheet"/><linkhref="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"rel="stylesheet"/></head>

なんと、これだけで「Bootstrap」が使えるようになりました!簡単!

次に、ボタンを入れたいところのhtmlに、以下のコードを挿入します。

<ulclass="profile-social-links"><li><atarget="_blank"href="#"><iclass="fa fa-facebook"></i></a></li><li><atarget="_blank"href="#"><iclass="fa fa-twitter"></i></a></li><li><atarget="_blank"href="#"><iclass="fa fa-instagram"></i></a></li><li><atarget="_blank"href="#"><iclass="fa fa-linkedin"></i></a></li></ul>

htmlは以上!

css

続いて、CSS!
下記をコピペでドーン

/*ボタン全体が入ってるブロック*/.profile-social-links{width:218px;display:inline-block;float:right;margin:0px;padding:15px20px;background:#FFFFFF;margin-top:50px;text-align:center;opacity:0;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-animation:moveIn1s3.1seaseforwards;animation:moveIn1s3.1seaseforwards;}/*ボタンを横一列で表示する*/.profile-social-linksli{list-style:none;margin:-5px0px0px0px;padding:0px;float:left;width:25%;/*今回4つなので25%です*/text-align:center;}/*ボタンの設定*/.profile-social-linkslia{display:inline-block;color:green;/*ボタンの色はここで変えてね!*/width:24px;height:24px;padding:6px;position:relative;overflow:hidden!important;-webkit-border-radius:50%;border-radius:50%;}.profile-social-linksliai{position:relative;z-index:1;}

以上です!簡単ですね!

できたもの

image.png

良い感じにできた~~~~~嬉しい~~~~

ちなみに、ボタンのラインナップはこちら!Youtubeとかもあればいいんですけどね~

image.png

<iclass="fa fa-XXXX"></i>

ここの、XXXX部分をgoogleやyahooに変えるだけで、ボタンは変わります♪

私のような初心者さんのお役に立てれば嬉しいです!

CSSで作る必須マーク

$
0
0

「*」のマーク

スクリーンショット 2020-09-13 20.43.46.png:arrow_left:でこんな感じになる :arrow_right:スクリーンショット 2020-09-13 20.43.33.png

<!-- classで「required」を付けた文字の後ろに必須マークが出る --><h:outputTextstyleClass="required"value="好きな生き物"/>
.required::after{content:" *";color:red;vertical-align:middle;}

「必須」文字のマーク

スクリーンショット 2020-09-13 20.22.58.png:arrow_left:でこんな感じになる :arrow_right:スクリーンショット 2020-09-13 21.02.24.png

.required::after{content:"必須";background-color:#f0ad4e;color:#fff;font-size:12px;font-weight:bold;min-width:10px;padding:3px7px;margin:0px5px;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;border-radius:10px;display:inline-block;}

これだけはおさえておきたいCypressコマンド集

$
0
0

はじめに

【初心者向けワークショップ】Cloud9+Docker Compose+CypressでE2Eテストを書いてみよう!の記事でCypressを使ったE2Eのテストを書くワークショップの記事を書きました。
この記事では、こういう検証をしたい場合Cypressではどう書くのかを記していきます。
コマンド集は公式ドキュメントにもあります。
本記事ではその中からよく使いそうなこれだけはおさえておきたいものをピックアップして、要素の操作と検証など実践に使いやすい形のサンプルを用意してみました。
また、CypressのテストコードだけでなくHTMLも合わせて載せておりますので参考にしていただけたらと思います。

ページ遷移

以下、前提として baseUrlがcypress.jsonに定義されているものとします。

e2e/cypress.json
{"baseUrl":"http://localhost:8080","reporter":"junit","reporterOptions":{"mochaFile":"cypress/results/output.xml"}}
cypress/integration/spec.js
it('open page',()=>{// ページ遷移(パスを指定)cy.visit('/')// Qiitaのページを開く(URLを指定)cy.visit('https://qiita.com')}

要素の取得、要素の値を取得

要素の取得

cy.get('[セレクタ]')で要素を取得できます。

<divid='header'></div>
it('Get element',()=>{cy.visit('/')// 要素の取得cy.get('#header')})

親・子要素の取得

<ulclass='parent'><liclass='active child'>list1</li><liclass='child'>list2</li><liclass='child'>list3</li></ul>
it('Get child and parent element',()=>{cy.visit('/')// 子要素の取得cy.get('ul').children('.active').should('have.text','list1')cy.get('ul').children().should('have.length',3)cy.task('log','== 子要素の取得 ==')cy.get('ul').children().each(($li,index,$list)=>{cy.task('log',$li.text())})// 親要素の取得cy.get('.child').parent().should('have.class','parent')

※ ログの出力方法は、後述の ログの出力をご覧ください。

コンソールログ(抜粋)
apache | 172.20.0.3 - - [13/Sep/2020:05:05:16 +0000] "GET / HTTP/1.1" 200 254
cypress | == 子要素の取得 ==
cypress | list1
cypress | list2
cypress | list3
cypress | 
cypress |   (Results)
cypress | 

ページタイトルの取得

cy.title()でページタイトルを取得できます。
要素の取得でも説明した通り、cy.get('title')でも取得できます。

<title>sample page title</title>
it('Verify title',()=>{cy.visit('/')// ページタイトルを取得して検証するcy.title().should('eq','sample page title')cy.get('title').should('have.text','sample page title')})

要素の操作

クリック、チェック操作

チェックボックスにチェックを入れたり、ラジオボタンを選択したりボタンをクリックすることができます。

<form><div><inputtype='checkbox'name='check'value='check_1'checked='checked'><inputtype='checkbox'name='check'value='check_2'></div><div><inputtype='radio'name='feedback'value='good'checked='checked'>良い
    <inputtype='radio'name='feedback'value='bad'>悪い
  </div></form><buttontype=buttononclick='alert("clicked button")'>Click here</button>
it('Click or check an element',()=>{cy.visit('/')// 要素をチェックするcy.get('[value="check_1"]').check()// チェックボックスcy.get('[type="radio"]').first().check()// ラジオボタンの1番目// 要素をクリックするcy.get('[type="button"]').click()})

入力操作

テキストボックスに文字の入力することができます。
また、入力されたテキスト内の文字を削除することもできます。

<textarea>hoge</textarea>
it('Delete text and type text',()=>{cy.visit('/')// テキストエリアの文字列を検証(消去前)cy.get('textarea').should('have.value','hoge')// テキストエリアの文字を消去cy.get('textarea').clear()// テキストエリアの文字列を検証(消去後)cy.get('textarea').should('have.value','')// テキストエリアに文字を入力cy.get('textarea').type('Hello, World')// テキストエリアの文字列を検証(入力後)cy.get('textarea').should('have.value','Hello, World')})

検証

要素の値の検証

cy.get('[セレクタ]').should('have.id')などhave.xxxで指定します。
また、cy.get('[セレクタ]').should('have.attr', '[属性名]', '[値]')でも各属性の値は取得できます。

<divclass='title'><divid='main_title'>Content title</div><divclass='sub_title'>Sub title</div></div><inputtype='number'name='numberbox'value='1'>
it('Verify element values and attributes',()=>{cy.visit('/')// 要素のテキストを検証するcy.get('#main_title').should('have.text','Content title')// 要素のid属性の値を検証するcy.get('.title div:first-child').should('have.id','main_title')// 要素のclass属性の値を検証するcy.get('.title div:last-child').should('have.class','sub_title')// 要素のvalue属性の値を検証するcy.get('[name="numberbox"]').should('have.value','1')// 要素のtype属性の値を検証するcy.get('[name="numberbox"]').should('have.attr','type','number')// 要素のname属性の値を検証するcy.get('[type="number"]').should('have.attr','name','numberbox')})

テキストの部分一致、完全一致の検証

<title>sample page title</title><divclass='title'><divid='main_title'>Content title</div><divclass='sub_title'>Sub title</div></div>
it('Verify title',()=>{cy.visit('/')// ページタイトルを取得して検証する// 完全一致cy.title().should('eq','sample page title')cy.get('title').should('have.text','sample page title')// 部分一致cy.title().should('include','sample')cy.get('title').contains('sample')// ページ内のどこかに文字列が存在することを検証するcy.contains('Sub')})

要素が表示されている・いないことの検証

<divclass='title'><divid='main_title'>Content title</div><inputtype='hidden'name='userid'value='12345'></div>
it('Verify element display',()=>{cy.visit('/')// 要素が表示されていることを検証するcy.get('#main_title').should('be.visible')// 要素が表示されていないことを検証するcy.get('.title > input').should('not.be.visible')})

ロケーションの取得

it('Get location',()=>{cy.visit('https://qiita.com')// ロケーションの取得cy.location().should((loc)=>{expect(loc.href).to.eq('https://qiita.com/')expect(loc.hostname).to.eq('qiita.com')expect(loc.pathname).to.eq('/')expect(loc.port).to.eq('')expect(loc.protocol).to.eq('https:')})})

現在のページのURLの取得はcy.url()でも可能です。

it('Get current url',()=>{cy.visit('https://qiita.com')// URLの取得その1cy.location().should((loc)=>{expect(loc.href).to.eq('https://qiita.com/')})// URLの取得その2cy.url().should('eq','https://qiita.com/')})

ログの出力

cypress/plugins/index.jsを以下のように編集します。

cypress/plugins/index.js
module.exports=(on,config)=>{on('task',{log(message){console.log(message)returnnull}})}
cypress/integration/spec.js
it('Log',()=>{cy.visit('/')// ログの出力cy.task('log',"*** ログ開始 ***")cy.task('log',"hoge")cy.task('log',"fuga")cy.task('log',"*** ログ終了 ***")})
Cypressのコンソールログ(抜粋)
cypress |   Running:  spec.js                                                                         (1 of 1)
apache | 172.20.0.3 - - [13/Sep/2020:02:41:17 +0000] "GET / HTTP/1.1" 200 152
cypress | *** ログ開始 ***
cypress | hoge
cypress | fuga
cypress | *** ログ終了 ***
cypress | 
cypress |   (Results)
cypress | 

pictSPACE店舗説明文の装飾タグ

$
0
0

はじめに

同人専用自家通販サービスの pictSPACEさんで設置できる店舗スペースの説明文に、htmlが使用できるとのことだったので、装飾タグを作成してみました。
ご自由にコピー&ペーストしていただき、オンライン同人イベント参加の際の店舗設営の際にお役立てください。
※店舗の設置方法については pictSPACEさんのサイトをご覧ください。

免責事項

※本記事に記載された内容については、正確性を保証しません。
※本記事の内容を用いたあらゆる結果について、著者はいかなる責任も負いません。記事のコードの使用は自己の判断、責任において行ってください。
※再配布はご遠慮ください。

店舗装飾タグ(全部のせ)

頒布物管理>説明文の部分に以下のソースを入れると画像のようになります。
※改行を入れるとbrタグが挿入されてしまう仕様のため、このようなコードになっています。

一度説明文にこのタグをこのままコピー&ペーストして、不要な部分を削っていくとよいと思います。
(後述の各パーツ対応ソースを参照して、削ってみてください。)

 

<div style=" padding: 0.1em 0.6em; color: #fff; font-weight: bold; background: -moz-linear-gradient(left, #ff5e63, #ff9964); background: -webkit-linear-gradient(left, #ff5e63, #ff9964); background: linear-gradient(to right, #ff5e63, #ff9964); margin-bottom: 0.5em;">New!</div><span style="color: #fffafa; background-color: #ff1493; display: inline-block; padding: 0.1em 0.6em; font-weight: bold; border-radius: 0.5em; margin-right: 0.5em;">R-18</span><span style="color: #fffafa; background-color: #2196f3; display: inline-block; padding: 0.1em 0.6em; font-weight: bold; border-radius: 0.5em; margin-right: 0.5em;">全年齢</span>
<p>ここにテキストここにテキストここにテキストここにテキストここにテキストここにテキストここにテキストここにテキストここにテキスト</p>
<p style="margin-bottom: 2em;"><a href="ここに通販URL1" target="_blank"><span style="background-color: #ffc107; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border-radius: 0.5em; border: solid 3px #d82329; margin-right: 0.5em;"><font color="#d82329">某通販</font></span></a><a href="ここに通販URL2" target="_blank"><span style="background-color: #fff; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border: solid 3px #000; margin-right: 0.5em;"><font color="#c72c3c">Hoge</font></span></a><a href="ここに通販URL3" target="_blank"><span style="background-color: #dc4d50; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; margin-right: 0.5em;"><font color="#fff">Hoge</font></span></a></p>

各パーツ対応ソース

New!

新刊ではない時は以下を削除してください。
image.png

<div style=" padding: 0.1em 0.6em; color: #fff; font-weight: bold; background: -moz-linear-gradient(left, #ff5e63, #ff9964); background: -webkit-linear-gradient(left, #ff5e63, #ff9964); background: linear-gradient(to right, #ff5e63, #ff9964); margin-bottom: 0.5em;">New!</div>

年齢制限

どちらかを削除して使用してください。(全年齢の時は両方削除でもいいかも)

image.png

<span style="color: #fffafa; background-color: #ff1493; display: inline-block; padding: 0.1em 0.6em; font-weight: bold; border-radius: 0.5em; margin-right: 0.5em;">R-18</span>

image.png

<span style="color: #fffafa; background-color: #2196f3; display: inline-block; padding: 0.1em 0.6em; font-weight: bold; border-radius: 0.5em; margin-right: 0.5em;">全年齢</span>

外部通販リンク

それっぽい色味のものを用意しました。
ご自身が使われている通販サイト様に合わせてどうぞ。

image.png
ここに通販URL1に通販ページURL
某通販の部分に表示させたい文字を入れてください。

<a href="ここに通販URL1" target="_blank"><span style="background-color: #ffc107; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border-radius: 0.5em; border: solid 3px #d82329; margin-right: 0.5em;"><font color="#d82329">某通販</font></span></a>

image.png
ここに通販URL2に通販ページURL
Hogeの部分に表示させたい文字を入れてください。

<a href="ここに通販URL2" target="_blank"><span style="background-color: #fff; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border: solid 3px #000; margin-right: 0.5em;"><font color="#c72c3c">Hoge</font></span></a>

image.png
ここに通販URL3に通販ページURL
Hogeの部分に表示させたい文字を入れてください。

<a href="ここに通販URL3" target="_blank"><span style="background-color: #dc4d50; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; margin-right: 0.5em;"><font color="#fff">Hoge</font></span></a>

外部通販を使用しない場合

以下を削除してください。

<p style="margin-bottom: 2em;"><a href="ここに通販URL1" target="_blank"><span style="background-color: #ffc107; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border-radius: 0.5em; border: solid 3px #d82329; margin-right: 0.5em;"><font color="#d82329">某通販</font></span></a><a href="ここに通販URL2" target="_blank"><span style="background-color: #fff; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; border: solid 3px #000; margin-right: 0.5em;"><font color="#c72c3c">Hoge</font></span></a><a href="ここに通販URL3" target="_blank"><span style="background-color: #dc4d50; padding: 0.5em 1em; margin-right: 0.5em; font-weight: bold; margin-right: 0.5em;"><font color="#fff">Hoge</font></span></a></p>

この記事が少しでもオンラインイベントのお役に立てれば嬉しいです。

SCSSのrandom関数で最小値を設定する

$
0
0

ランダムな値を生成したいけど最小値は設定したい
というときのためのSCSS

// 指定した最小値($min)と最大値($max)の間のランダムな数を返す
// 単位は$unitに指定(px,%,vw,vh,vmax,vmin)
// minMaxRandom(80, 100, 1%)
@function minMaxRandom($min: 1, $max: 100, $unit: 1%) {
  $num: random($max);

  @while ($num/($num * 0 + 1) < $min) {
    $num: random($max);
  }
  @return $num * $unit;
}

使い方

(例)div100個に幅と高さが100pxから200pxのランダムな数値を指定する

@for $i from 1 through 100 {
  div.nth-child(#{$i}) {
      $rondomNum: minMaxRandom(100, 200, 1%);
      width: $rondomNum;
      height: $rondomNum;
  }
}

参考
SCSSでランダムな値を扱う方法

デフォで最小値も設定できたらいいのに。。
と思った次第でした。

おしまい。

セレクター・擬似要素・擬似クラスまとめ

$
0
0

CSSセレクター

セレクター.png
セレクターにはタグや id・class 以外にも、指定する方法があります。

全称セレクター

すべてのセレクターをまとめて指定したいときは全称セレクターと呼ばれる *を使います。

*{color:#000;}

このように記述すると、すべての要素に対してfont-size:16が設定されます。

複数のセレクター

2つ以上のセレクターを指定したいときは , で区切ることで指定できます。

h1,h2,h3{font-weight:bold;}

子孫セレクター

2つ以上のセレクターを半角スペースで区切ると、下の階層の子孫要素を指定することができます。

ullia{color:#f00;}

子セレクター

2つ以上のセレクターを > で区切ると、直下の階層の子要素を指定することができます。

ul>li>a{color:#00f;}

※ 子孫セレクターと子セレクターは微妙に指定できる要素が違います。子孫セレクターは親要素の中にある子要素全てに対して指定することができます。子セレクターは親要素の直下の子要素しか指定することができません。

※ CSSでは親子関係になっているセレクターの「子」を指定することはできますが、「親」になっている部分を指定することはできません。

隣接セレクタ

2つ以上のセレクターを + で区切ると、直後にあるセレクターを指定することができます。

p+div{width:100px;}

※直後にあるセレクターを指定することはできますが、直前にあるセレクターを指定することはできません。

擬似クラス

擬似クラスとは、選択されたセレクターが特定の状態を指定するものです。例えばマウスのカーソルが上に乗っているときだけ色が変わるボタンをよく目にすることがありますが、これは擬似クラスの:hoverという状態を指定して記述することができます。擬似クラスは :◯◯ のような形で、◯◯にはその状態が記述されます。

hover

マウスカーソルが上に重なった状態の時を表すのがhoverです。

a:hover{color:#f00;}

linkとvisited

linkは未訪問、visitedは訪問済みのリンクを指定するものです。<a>に指定するもので、何も指定をしていないと未訪問は青、訪問済みは紫になっています。

a:link{color:#f00;}a:visited{color:#0f0;}

first-child・last-child・nth-child()

兄弟要素の◯番目を指定できる擬似クラス。first-childは一番最初、last-childは一番最後、nth-childは () 内に数字を入れると指定することができます。nth-childに関しては偶数(even)・奇数(odd)・倍数(n)が指定できます。

ulli:nth-child(3){color:#0f0;}

疑似要素

疑似要素は選択したセレクターの特定部分を整形して表示するためのものです。擬似クラスと同じく:◯◯というふうに記述します。

first-letter

最初の1文字目を変化させることができる疑似要素です。

p:first-letter{color:#ff0;font-size:40px;}

before・after

要素の直前と直後に擬似要素を作成します。プロパティにはcontentというものを用意して、内容を書き込みます。

p:before{content:"直前の疑似要素";color:#0f0;}p:after{content:"直前の疑似要素";color:#0f0;}

属性セレクタ

HTMLタグの中には「属性」と呼ばれる部分があります。例えば<img src="hoge.jpg" width="300" height="300" alt="hogehoge">の中の、src="hoge.jpg" width="300" height="300" alt="hogehoge"の部分は属性にあたります。

この属性の部分を指定することができるのが属性セレクタです。例えば<a href="#" target="_blank">というHTMLタグがあったときに、ページの中でtarget="_blank"となっている<a>を指定したいときは以下のように記述します。

a[target="_blank"]{color:#f00;}

このように [ ]で囲って属性を記述すると指定することができます。

参考

この記事は以下の情報を参考にして執筆しました。N予備校

画像にマウスオーバーすると背景をグラデーションにしてメニューが出るようにする

$
0
0

Youtubeの動画やfreepikのように、画像にホバーすると画像にオーバレイすると、メニューが出てきて、メニューの背景にはグラデーションが掛かったデザインがありますが、それを実現するサンプルです。

See the Pen QWNxvgW by emesh (@emesh) on CodePen.

定義要件としては、
1.ホバーすると画像がグラデーションになる
2.下にメニューが表示される
3.画像からでもリンクできると言う点が必要でした。

まずグラデーションはHTMLにマスクの要素を用意し、それをCSSで調整するようにしています。画像のリンクはそのままではできないのでよくある要素全体に拡大するコードを使っていますが、そのコードではメニューにも影響を及ぼし、文字が一つの場所に集合してしまうというバグにも影響が及ぼすので下記のコードでpositionをキャンセルさせることにしています。

    figcaption a {
            position: initial !important;
            color: #fff;
        }

参考になりましたらどうぞ。

おまけ

ホバーするとメニューが表示するのではなく常時メニューを表示させたい場合にはこちらを。

See the Pen メニューを常時表示したいとき by emesh (@emesh) on CodePen.

参考サイト

CSSのみで実装できる、画像と相性が良さそうなホバーエフェクト 15
Hover Effect Ideas


【初心者でもわかる】ふちに模様がついてるデザインの時、模様の大きさをキープしたまま可変に対応させる方法

$
0
0

どうも7noteです。左右などに模様がついたデザインを作る時のちょっとしたコツについて

今回は以下のようなデザインを作る方法です。

sample_bg.png

文字の右上と左上に模様が入った場合のデザイン。

まず、1枚の背景画像として画像を設置した場合の書き方はこうなります。

index.html
<h2>ここに見出しが入ります</h2>
style.css
h2{width:300px;text-align:center;background:url(sample_bg.png)no-repeat;}

結果

sample_bg.png

上手に入れる事ができました。

ではもし横幅がもっと長くなればどうでしょうか。

sample_bg2.png

このように意図しないような広がり方になってしまい、模様が切れてしまいます。
画像の横幅に依存してしまっては表示が崩れてしまうのです。

横幅が可変でかわったとしても崩れないようにする方法

模様の画像を左右それぞれ分けて用意し、CSSを以下のように書き換えてください。

style.css
h2{width:300px;text-align:center;background-image:url(sample_bg_left.png),url(sample_bg_right.png);background-repeat:no-repeat;background-size:50px50px;background-position:lefttop,righttop;}

結果

sample_bg3.png
sample_bg.png

このように横幅が変化しても、模様自体は常に同じ大きさをキープすることができます。

まとめ

背景画像にはカンマ(,)で区切ることで複数画像を指定することができます。これを利用して常に同じ大きさの画像を左上・右上に配置することで横幅に依存することなく可変にも対応することができます。

ちょっとした工夫が他のWEBサイトとの差になるので、このような所にも丁寧さが現れるサイト作りを意識したいものですね。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ

Beautiful Soupで数字始まりのidをselectする

$
0
0

急いでいる人用

  • BeautifulSoup 4.7.0 以降で以下の処置が必要です。
  • cssエスケープで記述します。
  • 先頭の1\\31にエスケープすると記述できます。
  • 0〜9までの数字は \\30〜 \\39のようにエスケープします。
  • 1234の場合は \\31 234として、先頭の1桁をエスケープしてスペースを入れます。
from bs4 import BeautifulSoup
html = '<h1 id="1">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('#\\31')
# >>> [<h1 id="1">test</h1>]
from bs4 import BeautifulSoup
html = '<h1 id="0123">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('#\\30 123')
# >>> [<h1 id="0123">test</h1>]

BeautifulSoup 4.6.xでの動作

  • cssエスケープなしでヒットします。
  • cssエスケープをするとヒットしません。
from bs4 import BeautifulSoup
html = '<h1 id="1234">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('h1#1234')
# >>> [<h1 id="1234">test</h1>]

BeautifulSoup 4.7.0以降の変更

BeautifulSoup 4.7.0からcss slector のparserの実装がBeautifulSoup独自からsoupsieveに変更になりました。
これにより、複雑なcssセレクタや最新のcssセレクタに対応できるようになっているようです。
https://github.com/facelessuser/soupsieve

cssエスケープ

こちらの記事が大変参考になりました。
https://qiita.com/ka-ko/items/feacb4d3ff22666d51b1

cssエスケープを行うツールも紹介されています。
https://mothereff.in/css-escapes

スマホの時、htmlをfont-size:62.5%;にしないと画面に余白ができる

$
0
0

iPhone(safari)では大丈夫なのに、Androidは余白が!!!

パソコンでの開発では出なかったのですが、
実機チェックした時、
Android端末では、以下のような空白ができました。。。
chromeだけでなく、chatworkやslackのプレビューでもこの空白ができました。
スクリーンショット-2020-09-15-14.24.58.png

原因

スマホの時、html「font-size: 62.5%;」にしていなかったためです。

これは「ルートのフォントサイズ」で、
あるサイトにはこう書いていました。

font-size: 62.5%;は呪文みたいなもの」

[引用][css]html, bodyのfont-sizeはいくつにしてる?~よく見る62.5%ってなに!?~

有無を言わずに入れとけ!ということですね。

対処法

とはいえ、全部のフォントサイズを変えるのは大変なので、
以下のように応急処置しました。
ポイントは、htmlとbody両方にoverflow-x: hidden;を入れること。
※overflow:hidden;にすると、スクロールできなくなります。

@mediascreenand(max-width:768px){//スマホ時html{font-size:90%;//自分が設定したい大きさでoverflow-x:hidden;}body{overflow-x:hidden;}}

Udemyの人気講座「フルスタック・Webエンジニア講座」を受講してみた(その1)

$
0
0

はじめに

今回はUdemyの講座の1つである、【世界で30万人が受講】フルスタック・Webエンジニア講座(2019最新版)を受講してみる事にしました。
内容としては、以下を学習しながらウェブサイト・ウェブアプリを作成していく、というものになっております。

  • HTML5
  • CSS
  • javascript
  • jQuery
  • BootStrap4
  • WordPress
  • PHP
  • MySQL
  • Python

もちろんこの講座を受けるだけでフルスタックエンジニアになれるとは思っておりません。
今回はフロントエンドの技術を浅く広く体系的に触る事が主な目的です。

セクション1から15まである為、概要を記載していきます。

目次

セクション1:はじめに

講座の概要説明と環境セットアップがメイン。

  • Chrome
  • Brackets(エディター)
  • MAMP(ApacheやMySQL等をパッケージしたもの)

セクション2:HTML5

セクション2はHTML。HTMLの説明及び、記載に必要なタグやリンクの挿入等について学習。
以下は学習内容の一例。

  • ウェブページの基本構造
  • 基本的なタグ
    • ヘッダー(見出し)タグ
    • パラグラフタグ
    • テキストのフォーマット
    • リスト
    • イメージ
    • フォーム
    • テーブル
    • リンク
  • ウェブページを作ってみる

セクション3:CSS

セクション3はCSS。HTMLと同じく、説明及び記載方法等について学習。
以下は学習内容の一例。

  • スタイルシート
  • インラインCSSと外部CSS
  • 各種スタイリング
    • インラインCSS
    • 内部CSS
    • Class・id・span
    • Div要素
    • Color属性
    • Floatレイアウト
    • Position属性
    • マージン(margin)
    • パディング(padding)
    • ボーダー(border)
    • フォント(Fonts)

おわりに

まだ序盤ですが、動画を見ながら手を動かして実装していくので、理解しやすいという印象です。
9月中に完了するペースで進めていきます。

【初心者でもわかる】PCとスマホで表示非表示を切り換える共通CSSを作ると効率UP!

$
0
0

どうも7noteです。レスポンシブで表示非表示を切り換える簡単な方法。

「スマホの時はこのブロックを非表示にして、違う場所にこのブロックを表示する」
「スマホの時は改行を非表示にする。」

など、レスポンシブサイトを作る際によくあるシチュエーションの対策方法についてまとめていきます。
インライン要素にも対応させますよ。

共通のCSSを作成し、出し分け専用のクラスを作る方法。

common.css
/* PC専用 */.pc{display:block;}.sp{display:none;}/* スマホ専用 */@mediascreenand(max-width:820px){.pc{display:none;}.sp{display:block;}}

これだけだと、インライン要素に対応できなくなってしまうので・・・

改common.css
.pc{display:block;}.sp{display:none;}/* インライン要素の時 */.pcinline{display:inline;}.spinline{display:none;}@mediascreenand(max-width:820px){.pc{display:none;}.sp{display:block;}/* インライン要素の時 */.pc{display:none;}.sp{display:inline;}}

これで、出し分けたい要素にpcspinlineのクラスを付けるだけで簡単に出し分けが可能になります。
CSSで出し分ける際は画面サイズによって切り分けています。

SEOに注意!!

一般的にPCとスマホは同じ内容が記載されている定なので、あまりにも出し分けが多くなり、PCとスマホで全然異なる内容になってしまうとSEOに影響がでる可能性があるらしい・・・

デザイン上必要で使う分くらいは大丈夫だろうなと思いますが、必要最低限の使用回数で済むようにCSSで工夫して作れるところはCSSで頑張りたいところ。

他の方法は?

javascriptを使う方法

phpを使う方法

これらの方法はユーザーエージェント(訪問者のデバイスの種類)によって切り分ける方法になります。
開発環境(PC)で確認するには、ユーザーエージェントを切り換えられる拡張機能等が必要になるので注意!

まとめ。

これは本当によく使うので常にcommon.cssに入れてます。

ただ、displayがblockやinline以外の要素を出し分けしたい時にたまに困る。無理やり.hoge.pc { display: flex; }とか書けば別に問題はないのですが、なんとなく負けた気分になってしまう・・・。せっかく共通化したのに結局個別で指定しているのが腑に落ちない感じが。親要素を1つ追加するとか対策はいろいろあるんですけどね。
いい方法ご存知の方がいればぜひコメントなどで教えてください!

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ

Viewing all 8498 articles
Browse latest View live


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