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

[Rails][file_field]画像のアップロードのボタンデザインを変更する

$
0
0

Railsのアプリを作っている際に画像アップロードボタンのデザインを変えたかったが、
クラス名をつけるだけでは上手くいかなかったのでメモ。

初めの状態

普通にコードを書いた場合はこのようなデザインになるかと思います

=p.file_field:image_file

 2019-12-26 11.40.24.png

もっとかっこいいデザインにしたいので、変更していきます。

変更するとき

file_field以外にlabelを追加します。

=p.label:image_file,"画像をアップロード",class: "image_input_btn"=p.file_field:image_file,class: "image_form"

どちらにもクラス名を追記します。

そして、CSSで

   .image_input_btn{
        display: block;
        background-color: #228B22;
        width: 180px;
        height: 30px;
        margin-top: 10px;
        margin-left: 10px;
        border-radius: 5px;
        padding-top: 2px;
        color: white;
        text-decoration: none;
        text-align: center;
      }

      .image_form{
        display: none;
      }

file_fieldのクラス名は非表示にし、labelに装飾していきます。

このように書くと

 2019-12-26 15.13.26.png

このようなボタンが出来上がります。

少しかっこよくなりました!!


position:sticky;について

$
0
0

position: sticky;とは

スクロールに応じて要素を固定表示にすることができます。
他のpositionプロパティ(static, relative, absolute, fixed)の違いは、DOMのフローで閉めるスペースです。
staticとrelativeはドキュメントのフローで自然なスペースを保ちますが、absoluteとfixedの場合本来配置されるべきスペースは取り除かれ、フロートしているような振る舞いをし、周りの要素はabsoluteとfixedがそこに存在しないかのような挙動をとります。

stickyはこれらの両方の特性を持ったプロパティといえます。

See the Pen oNgwvGN by arichel (@arichel_unt) on CodePen.

CSSのstickyには、sticky itemとsticky containerという2つの主要部分が必要となります。

sticky item

sticky itemとは、position: sticky;でスタイルを定義した要素です。ビューポートのポジションが定義したポジションと一致すると、その要素はフロートします。

sticky container

sticky containerとは、sticky itemをラップする親要素です。これはsticky itemがフロートすることができる最大のエリアになります。
position: sticky;で要素を定義すると、自動的に親要素がsticky containerとして定義されます。sticky containerはsticky itemの範囲であり、アイテムはsticky containerから出ることはできません。
headerをフロートさせて使う場合は、headerのフロートの終着地点までラップする要素をsticky containerとなるよう指定する必要があります。

要素の位置関係による挙動の違い

stickyにより固定させる要素のDOM上の位置関係によって、挙動の違いが生まれます。

同じブロック内にある兄弟要素

stickyが2つ、同じsticky containerの中に存在する場合、sticky要素が覆いかぶさるように表示されます。
bodyをsticky containerとした、各セクションがsticky itemのデモです。


See the Pen
WNbOzBB
by arichel (@arichel_unt)
on CodePen.

異なるブロックにある場合

1つ目のsitcky itemを2つ目のsticky itemが上に押し上げているように表示されます。
sticky itemはsticky containerの中でしかフロートができないので、1つ目のsticky itemのフロートが切れた瞬間に2つ目のsticky itemが到着するのでこのように見えます。
各セクション内のh2タグをsticky itemとしたデモです。


See the Pen
dyPReeq
by arichel (@arichel_unt)
on CodePen.

問題点

position: sticky;を定義した要素がコンテナの内側にある唯一の要素の場合、うまく機能しません。
その要素のコンテナが要素を貼り付けることができる唯一のエリアだからです。その要素は兄弟要素上でしかフロートできないため、唯一の要素である場合にはフロートすることができなくなります。
また同じ理由として、position: sticky;を指定した要素より、親要素の方が高さが短い場合も、意図したフロートの挙動にはならないので注意が必要です。


See the Pen
vYEZRwR
by arichel (@arichel_unt)
on CodePen.

そのほか

  • 先祖要素にoverflow:hidden;もしくはoverflow:auto;がかかっていると効かない
  • overflow:scroll;で高さの指定がないと効かない(高さの指定があると効く)

ブラウザ・サポートはこちらをご覧ください。

【CSS Hover】CSSだけで、円のアニメーションを表現する

$
0
0

CSSだけで、円のアニメーションを表現する

今回のこの記事のゴール
要素のHover時に、動く円を再現できるようになる
ことです

以下が、デモになります

See the Pen Circle Animation by Kazuhito Nakayama (@kazuhito-nakayama) on CodePen.

ポイントは、
@keyframes

border-radius: 40% 40% 50% 40%/30% 50% 50% 50%;

の部分。

@keyframesとは,
animationプロパティとセットで使うプロパティで、
animationは「設定」、
@keyframesは「動き」を形作ります。

今回では、
circle:hoverセレクターに対して、

border-animation(animation-name:適用させたい動きの名前)、
3s(animation-duration:アニメーション一回分の時間の長さ)と、
infinite(animation-iteration-count:アニメーションの繰り返し回数を指定する)、
liner(animation-timing-function:アニメーションのタイミング・進行割合)

を定義しています。

その上で、@keyframes上で、transformプロパティを用いて、360回転のバリューを設定しているので、永遠にぐるぐる楕円が回転し続けるのです

詳しいanimationプロパティ
https://sterfield.co.jp/designer/css3%E3%81%AEanimation%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%89%E4%BA%88%E6%83%B3%E4%BB%A5%E4%B8%8A%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%A0%E3%81%A3%E3%81%9F%EF%BC%81/

また、

CSS
border-radius: 40%40%50%40%/30% 50% 50% 50%;

こちらのコードについては、「え、こんなborder-radiusの書き方あるんだ!」と驚かれる方も中にはいらっしゃるかと思います。
しかし、不規則な丸を描く際には、このような記述方法も用いたりします!
この書き方はつまり、

CSS
border-top-left-radius: 40%30%;border-top-right-radius: 40%50%;border-bottom-right-radius: 50%50%;border-bottom-left-radius: 40%50%;

と同義で、それぞれの四辺に対して、楕円形を描くように角をborder-radiusで表現しているのです

参考

webクリエイターボックス
https://www.webcreatorbox.com/tech/border-radius

HPコード
https://haniwaman.com/css-animation/

Chrome拡張機能開発の公式チュートリアルを解説+補足 後編

$
0
0

はじめに

この記事は

の続きです。
前編を読んでから、こちらを読むことをおすすめします。
前編では、チュートリアルの

  1. マニフェストを作成
  2. アップロード
  3. Backgroundファイルを作成

の部分を解説しました。

後編では、

4. Popupファイルの作成
5. Contents Scriptへの反映
6. オプションの設定

を行います。

チュートリアル

前回の記事までのチュートリアルはうまくいったでしょうか?
今回はユーザからの見た目の部分を中心にやっていきます。

4. Popupファイルの作成

ポップアップとは、Chromeの右上あたりに追加されるChrome拡張のアイコンを押すことで表れるUIのことです。
下の画像では、「YouTube™のための自分好み」という、YouTubeの広告をブロックしてくれる拡張機能のポップアップの例です。
ポップアップ
ここにラジオボタンとかを追加して、ユーザに拡張機能を使いやすくさせるわけです。

4-1. popup.html

見た目はHTMLとCSSで制御しています。
早速Popup.htmlを書いてみましょう。
ここもファイル名は何でも良いですが、公式に乗っ取って「popup.html」にしておきましょう。

popup.html
<!DOCTYPE html><html><head><style>button{height:30px;width:30px;outline:none;}</style></head><body><buttonid="changeColor"></button></body></html>

書けたら保存して、フォルダに保存してください。
このpopup.htmlを使うということを、マニフェストファイルに教えてあげましょう。

manifest.json
{"name":"Getting Started Example","version":"1.0","description":"Build an Extension!","permissions":["storage"],"background":{"scripts":["background.js"],"persistent":false},"page_action":{"default_popup":"popup.html"},"manifest_version":2}

書けたら保存しましょう。

4-2. アイコンの設定

加えて、右上に表示されるアイコンも設定しましょう。
公式が準備してくれてるデータを使います。
↓ここからダウンロードしてください

フォルダを解凍したら、imagesフォルダの中に4つの画像が入っているかと思います。
そのimagesフォルダをそのままいつものフォルダにぶちこんじゃってください。
現在、フォルダの中はこうなっているはずです。
Popupファイル&アイコン画像保存
マニフェストファイルに、アイコンとして保存した画像を使うということ教えましょう。
また、次に使うdeclarativeContentのAPIを許可するために、permissionsに書き込んでおきます。

manifest.json
{"name":"Test Chrome-Extension","version":"1.0","description":"これはChrome拡張機能のテストです。","permissions":["declarativeContent","storage"],"background":{"scripts":["background.js"],"persistent":false},"page_action":{"default_popup":"popup.html","default_icon":{"16":"images/get_started16.png","32":"images/get_started32.png","48":"images/get_started48.png","128":"images/get_started128.png"}},"icons":{"16":"images/get_started16.png","32":"images/get_started32.png","48":"images/get_started48.png","128":"images/get_started128.png"},"manifest_version":2}

カンマとか付け忘れないように注意してください!(コピペすれば大丈夫だと思いますが。)
なぜ二つアイコンの設定が書かれているのかというと、

  • page_actionの中のdefault_icon→ ポップアップのアイコン
  • icons→ ファビコンや拡張機能の管理画面でのアイコン

の2種類を設定したためです。

4-3. declarativeContent

さて、先ほどdeclarativeContentのAPIを使うといいましたが、これは一体なんなのかというと、Contents Scriptの構成を取得できて、指定した要素の有無に応じてポップアップを表示させるか否かを指定できるようにするものです。

background.jsに下記のコード追加して保存してみましょう。

background.js
chrome.runtime.onInstalled.addListener(function(){chrome.storage.sync.set({color:'#3aa757'},function(){console.log('The color is green.');});chrome.declarativeContent.onPageChanged.removeRules(undefined,function(){chrome.declarativeContent.onPageChanged.addRules([{conditions:[newchrome.declarativeContent.PageStateMatcher({pageUrl:{hostEquals:'developer.chrome.com'},})],actions:[newchrome.declarativeContent.ShowPageAction()]}]);});});

上の公式の例で言うと、

  • conditionspageUrlところで、URLにdeveloper.chrome.comが含まれているかを見ています。
  • 含まれていると判断されたとき、actionsShowPageAction()(ポップアップを表示させるように)しています。

4-4. popup.jsを作成

最後に、宣言したAPIを用いて、PopupからContents Scriptを動かすコードを書きます。
popup.jsというファイルを作って、下記のコードを書いて保存してください。

popup.js
letchangeColor=document.getElementById('changeColor');chrome.storage.sync.get('color',function(data){changeColor.style.backgroundColor=data.color;changeColor.setAttribute('value',data.color);});

ここでは、単純にボタンの背景色をJSから変更することを書いています。
そして、今度はこのファイルを使うということを、popup.html</body>の直前に書き込んできださい。
ここはいつものHTMLとJSを繋げるのと同じですね。

popup.html
<!DOCTYPE html><html>
...
  <body><buttonid="changeColor"></button><script src="popup.js"></script></body></html>

できたら保存して、拡張機能の管理画面で更新してみましょう!
ここまでのファイル構成

左がdeveloper.chrome.comがURLに含まれているサイトでも表示で、右が含まれていないサイトでの表示です。
ポップアップ
declarativeContentで指定したように、developer.chrome.comがURLに含まれていないサイトでは、アイコンが白黒になりポップアップが表示されないようになっています。

ここまでうまくできたら、最後の章へ進みましょう。

5. Contents Scriptへの反映

ポップアップでボタンを押したら、ウェブサイトの背景の色を変更するような機能を作っていきます。
そのためには、PopupとContents Scriptの世界どうしで通信を行う必要があります。
それを可能にするために、まずはマニフェストファイルのpermissionactiveTabを追加しましょう。
これは、tabs.executeScriptという、別の世界からウェブサイトのスクリプトを操作できるコードを使えるようにできるAPIです。

manifest.json
{"name":"Getting Started Example",..."permissions":["activeTab","declarativeContent","storage"],...}

書いて保存したら、popup.jsに下記のコードを書きましょう。

popup.js
letchangeColor=document.getElementById('changeColor');...changeColor.onclick=function(element){letcolor=element.target.value;chrome.tabs.query({active:true,currentWindow:true},function(tabs){chrome.tabs.executeScript(tabs[0].id,{code:'document.body.style.backgroundColor = "'+color+'";'});});};
  • chrome.tabs.query ...→ 操作するウェブサイトのタブのIDを取得
    • chrome.tavs.executeScript ...→ 取得したIDのタブのスクリプトを操作
      • code: ...→ 実行するスクリプト、この場合背景の色を変更している

補足ですが、PopupからContents Scriptへ通信をするにはchrome.tabs.queryで行けますが、他の世界どうしではこの方法でできるとは限りません。

この方の記事に世界どうしの通信方法が分かりやすく書いてありますので、見てみてください。

これでポップアップのボタンを押すと、そのサイトの背景色が変わるようになりました。
今の所、URLにdeveloper.chrome.comが含まれているサイトじゃないと実行できないので注意です。
変更.gif

6. Optionsの設定

Optionsとは、ユーザが拡張機能のより詳細な設定をさせたいときに追加する世界です。
Popupとはまた別のページを作ります。
拡張機能詳細ページから開けます。
スクリーンショット 2019-12-26 17.52.04.png
スクリーンショット 2019-12-26 17.52.24.png
まだOptionsを設定してないので、②は表示されていないと思うので、これから設定していきましょう。

まず、options.htmloptions.jsを作ります。
チュートリアルでは、オプションページで背景色を変更できるようなオプションを追加します。

options.html
<!DOCTYPE html><html><head><style>button{height:30px;width:30px;outline:none;margin:10px;}</style></head><body><divid="buttonDiv"></div><div><p>Choose a different background color!</p></div></body><script src="options.js"></script></html>
options.js
letpage=document.getElementById('buttonDiv');constkButtonColors=['#3aa757','#e8453c','#f9bb2d','#4688f1'];functionconstructOptions(kButtonColors){for(letitemofkButtonColors){letbutton=document.createElement('button');button.style.backgroundColor=item;button.addEventListener('click',function(){chrome.storage.sync.set({color:item},function(){console.log('color is '+item);})});page.appendChild(button);}}constructOptions(kButtonColors);

ボタンを4つ作り、ボタンによってstoragecolorを変更します。

オプションページを使うということをマニフェストファイルに教えてあげましょう。

manifest.json
{"name":"Getting Started Example",..."options_page":"options.html",..."manifest_version":2}

ここまでできたら、拡張機能を更新して、先ほどの②の「拡張機能のオプション」ページを開いてみましょう。
スクリーンショット 2019-12-26 18.09.38.png
オプションページで赤のボタンを押すと、ポップアップで背景色を赤に変更することができました!
スクリーンショット 2019-12-26 18.09.46.png

おわりに

うまくチュートリアルを実行することができたでしょうか。
意外と簡単にChrome拡張機能が開発できますね。

不足あったらコメントください。

前編はこちら

公式のチュートリアルページはこちら

cssうんちにこっちみんなさせてみた

$
0
0

こっちみんな

今回はうんちの目をマウスの動きに合わせて動くようにしたぞ!

Let's Try

See the Pen kocchiminna-unchi by petapetapeta (@petapetapeta) on CodePen.

ポイント

html(pug)& css(stylus)

左右の目を動かしたいので、黒目はそれぞれ要素を作成して中央に配置します。

javascript

今回もvue.jsを使ってます。
mousemoveイベントで座標を取得し、その座標によって目の位置を変えてやります。
白目をはみ出さないように注意しましょう!

いつでもうんちに見られてる感じがして良いですね💩

日本語小説向きのCSSフォント指定

$
0
0

小説向きのCSSフォント指定

 おすすめの「フォント指定」みたいな記事を見て、何も考えずにそれをコピペして使用していませんか。
 特に「小説」を中心とした、日本語用サイトの場合、かなり気になるある問題があるのです。

 それは「……」「三点リーダー」が上下中央に来ない問題。
 そして「――」「ダッシュ(ダーシ)」がつながらなかったり、太い細い、長さがおかしいなど見た目が悪い問題、というのに直面することになります。
 もちろん他にも「○×」がなんか小さかったり大きかったりする、などの問題として、表面化してきます。

 他にも問題として「\」半角の円マークが、バックスラッシュになるというのもあります。

原因

 端的に言えば「英語フォントを優先指定しているため」に「アルファベット」と「日本語」両方で「やや違う意味で」使う文字があり、それらが英語優先になるため、日本語用の文字の一部が英語用表記になってしまっています。
 これはUnicodeが作成された当時、似た意味の文字を同一のコードポイントに集約し「細かい見た目などにこだわらないで一緒にしたから」です。
 昔の英語フォントはASCIIの範囲内だったので、ぶつかることはありませんでしたが、現在のフォントはUnicode化が進んできており、ぶつかる文字の数はどんどん増えています。
 「ASCII フォント」などと呼んでいますが、実際のところASCIIの範囲を大幅に超えているのが現在の有名フォントです。
 似たような問題として、中国語のフォントと日本語フォントで漢字のデザインに差がある場合などが知られています。多くの投稿サイトは言語指定が実装されていないので、日中台混在文章などでは、違和感なく記事を投稿できるユーザー投稿型サイトはほとんどありません。

body{font-family:"Segoe UI",Meiryo;}

抜きだすと、こういう指定ですね。
これを極論ですが

body{font-family:Meiryo,"Segoe UI";}

 こうしてほしいな、と思うのです。
 特に「小説家になろう」や「カクヨム」といった大手投稿サイトでは、そういう文字も普通っぽく表示されています。日本語フォントを優先しているのです。
 しかしそれ以外の振興サイトや日本語へのこだわりの少ないサイトでは、なかなかそうではないパターンが多くみられて、閲覧する際にももやもやする思いです。

英語を妥協する

 もし、日本語文章の見た目にこだわりたいのであれば、英語の見た目をこだわるのをあきらめる必要があります。
 はるか昔のフォント指定と違い、Meiryoや遊ゴシック以降のフォントは、言われるほど英語の表示が汚いということもありません。というかMSゴシック、ビットマップフォント時代の話を、現在でも引きずっているのではないでしょうか。大半のユーザーはそこまで気にしていません。

 しかし一部のユーザーは「……」三点リーダーが上下中央に来るかどうかなど「小説を中心としたサイト」では非常に気にするのです。

 古くからweb開発に携わる人や強いこだわりがある人は、英語を妥協するなんて、と思うかも知れません。Qiitaのような日英、ソースコード混在のような環境ならそれも理解できます。しかし「小説」等日本語を読ませるサイトにおいては、英語以前に日本語がおかしいのは気にならないのでしょうか。ちょろっと日本語も気にしてほしいなと思うしだいです。

 「日本語文章」には「日本語のフォント優先指定を」今こそ、決断の時です。よろしくお願いいたします。

display:flex;は正しく使いな〜

$
0
0

はじめに

どうも、NISHIKIです。
私ごとですが、ついに
テックエキスパート卒業しました。


卒業後の打ち上げで
終電逃したんで
Qiita書いてます(笑)


今日はテックエキスパートの
最終課題のチーム開発で
某メルカリサイトを作っているときに


全てのクラスにdisplay:flex;かけて
「あはは〜ちゃんとならんわ、教えて〜」
という強者がいたので


それについて
書いていこうと思います。


じゃあいきまーす。

flexboxとは?

まず、flexboxとは、何かと言うと
簡単にいうと横並びとか縦並びが
簡単にできるようになるというものです。


ものすごくざっくりいうと
この縦に並んだboxを
Image from Gyazo
display:flex;をかけることにより、
下記のように横に並べることができます。
Image from Gyazo

他にもこんなことも
出来ちゃいます。
Image from Gyazo

逆にも出来ますね。
Image from Gyazo

このようにflexboxが
自在に使えるようになれば
レイアウトの幅が広がるので
押さえておきたいですね。

2, flexboxを使うときはこの図を思い出して

flex boxを理解するには
下図を見ると分かりやすいと思います。
早速どんな図かというと、
これです。
Image from Gyazo

おそらくflexboxを理解できていない人は
この図を見たことがない人が
大半なんじゃないかなと思います。


この図はMDNというサイトにも
載っているので見てみてください
MDN


図について解説していきます。


flexboxを理解する上で
大事になってくるのが
flex containerとflex itemです。

Image from Gyazo

flex containerは
レイアウトしていきたい要素、
flex itemの親要素に当たる要素です。


この親要素にdisplay flexで
flex containerを定義すると
flex-directionというプロパティが設定されます。


これは何かと言うと
言葉のまんまなんですが
方向のことです。


これはデフォルトでrowに設定されています。
これがrowの時の方向の名前が
x軸方向はMain axis、y軸方向はCross axisと言います。
Image from Gyazo

そして、flex itemはこのMain axisに沿って
並べられていきます。
したがって、flex itemが増えると
flex directionがrowの時は
どんどん右側に並べられていきます。


隙間とかはちょっと違うんですけど
ざっくりこんな感じです。
Image from Gyazo
そして次に
flex-direction: column;としたときは
main axisとcross axisが入れ替わります。

こんな感じです。
Image from Gyazo
先ほど説明したように、
flex itemはmain axisに沿って
並べられるのでflex itemは縦方向に並びます。


新たにflex itemを増やしていくと
今度は下に並べられていきます。
Image from Gyazo
こんな感じです。
ここまで理解できれば大丈夫です。


あとは、flex container、flex item
それぞれにつけられるプロパティが決まっているので
それを知っておくだけです!

3-1, flex containerに使えるプロパティ

flex containerに使えるプロパティ
はい、こちらです。
・flex-wrap
・justify-content
・align-items
・align-content


これ以外ももちろんいっぱいありますが、
とりあえず知っといたら良いのは
この辺りかと思います。


特にjustify-contentはよく使いますね。
最初に出した例も


これはjustify-content: space-between;で
両端に寄せてます。
Image from Gyazo

ちなみに上下左右中央に配置したいときは、


justify-content: center;
align-items: center;


とすると、真ん中になります。
Image from Gyazo

3-2, flex itemに使えるプロパティ

flex itemに使えるプロパティ
はい、こちらです。


order
flex-grow
flex-shrink
flex-basis
align-self


こちらも他にも色々ありますが
とりあえずはこのくらい
知っておけばって感じです。


orderは個別に要素の並び替えの
順番を指定することができます。


デフォルトの値は0で小さい方から
順番になります。


ちなみに上の真ん中に寄せた
boxの1の方に


order: 1;


とすると、box2はデフォルトで0なので
順番が入れ替わります。
Image from Gyazo
こんな感じです。
他のプロパティについても
説明していきたいところでは
ありますが、長くなりそうなんで
また気が向いたら書きます。


最後まで読んでいただき
ありがとうございました。

SCSSでより簡単でスタイリング

$
0
0

SCSSに@mixinを使えば、クラスを定義することができます。

@mixin定義
@mixinthemable($theme-name,container-bg,$left-bg,$right-bg,$innertext,$button-bg){.#{$theme-name}{.container{background-color:$container-bg;border:1pxsolid#000;display:flex;justify-content:space-between;margin:0auto;width:50%;}*{color:$innertext;font-size:1rem;}.left{background-color:$left-bg;height:100%;width:69%;}.right{background-color:$right-bg;height:100%;position:relative;width:29%;}.button{background-color:$button-bg;border:0;border-radius:10px;bottom:10px;cursor:pointer;font-size:1rem;font-weight:bold;padding:1em2em;position:absolute;right:10px;}input{outline:none;background:none;border:none;border-bottom:1pxsolidwhite;box-shadow:none;}}}

これでthemableというクラスが定義できました。

それでは、@includeで実際にthemableを定義してみます。

@includeでmixinを継承
@includethemable(dark-theme,#898989,#454545,#252525,#ffffff,#e5e5e5);@includethemable(light-theme,#ffffff,#ffa3a3,#ffa3d1,#000000,#ffd1a3);
dark-theme
<bodyclass="dark-theme"><divclass="container "><divclass="left d-flex justify-content-center align-items-center"><span>LEFT</span></div><divclass="right d-flex flex-column justify-content-center "><spanclass="align-self-center">RIGHT</span><buttonclass="button">BUTTON</button></div></div></body>

image.png

light-theme
<bodyclass="light-theme"><divclass="container "><divclass="left d-flex justify-content-center align-items-center"><span>LEFT</span></div><divclass="right d-flex flex-column justify-content-center "><spanclass="align-self-center">RIGHT</span><buttonclass="button">BUTTON</button></div></div></body>

image.png
dark-themeとlight-themeで宣言するだけで、簡単でスタイリングできようになりました。

これによってデサイントレンドのダークモードも手軽に実装できます。
皆さんもぜひ日常のフロント設計やコーディングの中にSCSS(またはSASS)を使ってみてください!


FlexBox でスクロールさせたいアイテムが潰れちゃうやつ

$
0
0

FlexBox で横並びリストを作った時に以下のようにアイテムが潰れて、しばらく手こずってたメモ

こんな

解決方法

flex-shrink が原因
0 を指定すれば潰れなくなる

flex-shrink
アイテムの縮小度を設定するプロパティ
アイテムの寸法がコンテナより大きい場合このプロパティに従って縮小される

サンプル

See the Pen flex-shrink by cano (@canoypa) on CodePen.

【CSS】filterのみを使用して黒い画像を任意の色に変更する

$
0
0

やりたいこと

黒のみで書かれている下記png透過画像をcssのみを利用して色変更させたい
test.png

やったこと

filterでがんばってもらう

color.html
<hr><divalign="center"><imgsrc="/img/test.png"/>元画像
</div><hr><divalign="center"class="red"><imgsrc="/img/test.png"/></div><hr><divalign="center"class="green"><imgsrc="/img/test.png"/></div><hr><divalign="center"class="blue"><imgsrc="/img/test.png"/></div><hr>
color.css
.red{filter:invert(15%)sepia(95%)saturate(6932%)hue-rotate(358deg)brightness(95%)contrast(112%);}.green{filter:invert(17%)sepia(91%)saturate(7085%)hue-rotate(128deg)brightness(100%)contrast(106%);}.blue{filter:invert(8%)sepia(99%)saturate(7044%)hue-rotate(247deg)brightness(100%)contrast(145%);}

その他の色達

other.css
filter:invert(88%)sepia(61%)saturate(0%)hue-rotate(229deg)brightness(107%)contrast(101%);灰色filter:invert(50%)sepia(0%)saturate(11%)hue-rotate(143deg)brightness(101%)contrast(93%);黄色filter:invert(81%)sepia(81%)saturate(633%)hue-rotate(359deg)brightness(106%)contrast(105%);オレンジfilter:invert(72%)sepia(26%)saturate(6428%)hue-rotate(1deg)brightness(105%)contrast(102%);水色filter:invert(88%)sepia(100%)saturate(2929%)hue-rotate(104deg)brightness(99%)contrast(104%);filter:invert(11%)sepia(71%)saturate(5170%)hue-rotate(293deg)brightness(87%)contrast(111%);

結果

このCSSだけで別の色の画像データを用意しなくても色々変えられます

css.png

また、filterは縦並びにすると効かなくなるので注意です

【CSS】border

$
0
0

border

:sunny:要素に枠線をつける
:sunny:枠線の太さ、種類、色を指定して使用

例.html
<p>枠線だよーん</p>
例.css 
p {
  width: 300px;
  border: 3px solid red;
}

スクリーンショット 2019-12-27 18.55.38.png

3px・・・線の太さ
solid・・・実線
red・・・赤

ちなみに・・・

border・・・上下左右に線をつける
border-top・・・上に線をつける
border-bottom・・・下に線をつける
border-left・・・左に線をつける
border-right・・・右に線をつける

【css】IEと戦うためのTips集

$
0
0

おはこんばんちは、ゆるすぎて投稿を忘れていたちーずです。(反省)
本日は、IEと戦うためのTipcsを、IE滅びろという気持ちを抑えて書きます。

なぜこの記事を書く?

新卒として働き初めてから、新規立ち上げサイトのCSS設計を担当させていただいた経験がありましたが、
その中で一番失敗したこと、反省したことがIE対応だったからです。
自戒の念を込めて、この記事を書こうと思いました。

基本的なIE対応

まずはじめに、基本的なIE対応をする際に考えるべきことをざっくりと説明します。

1. Can I useでプロパティがIEに対応しているかを調べる

caniuse

Can I useとは、HTMLやCSSなどのブラウザ対応状況が調べられるサービスです。
自分が使用したいプロパティがIEに対応しているかを簡単に調べることができるため、ブラウザ対応しているか不安なプロパティを使う際は必ず調べましょう。

  • 緑  : 対応
  • 黄緑 : 部分的に対応 (hoverすると詳細が見れます。)
  • 赤  : 未対応

2. Autoprefixerでベンダープレフィックスを自動で付与する

ベンダープレフィックスとは、-moz--webkit-などのプレフィックス(接頭語)をプロパティや値につけることで、わりと新しめなCSSの機能を特定のブラウザで使用できるようなものであり、Autoprefixerは、指定したブラウザ対応に必要なベンダープレフィックスを自動で付与するツールです。

ツール自体の導入は今回は割愛させていただきます。下記記事がわかりやすいと思います。

CSSベンダープレフィックス-webkit-を今この瞬間に辞める為のAutoprefixerの導入

また、対応するブラウザの対象を設定するには、browserlistを用いて設定すると良いでしょう。
設定の書き方は下記記事が分かりやすかったです。

.browserslistrcで対象ブラウザを指定する

また、browserl.istで、browserlistの設定から対応ブラウザの一覧を確認できます。

browserlist

見落としがちなIE対応

ここからはCan I useautoprefixerも教えてくれなくて、自分がまんまとハマってしまったIE対応をご紹介します。

flexショートハンドでdefault値を省略するとIEで崩れる

flexプロパティのショートハンドでは、以下のような順で指定ができます。

.example{flex:flex-growflex-shrinkflex-basis;}

省略してflex: 1と書くこともできますが、default値を省略するとIEでバグります。

/* NG */.example{flex:1;}/* OK */.example{flex:11auto;}

私はこれで、MVが大幅に崩れる不具合を出してしまいました。
(GAを確認したら、なぜかCVR上がってましたが...)

imgタグでsvgを指定すると崩れる

imgタグでsvgを指定し、IEで確認してみたら、なんと指定範囲からはみ出たサイズ表示になっていました。

解消法

下記記事を参考に、svgタグにwidth,height,viewboxを指定したらなおりました。

SVGをimgで表示した場合にIEだけサイズが変になる現象を直す

svgをbackgroundで設定すると、background-positionが効かない

背景画像にsvgを大量に用いていて、left: 0で見出しのアイコンとして用いていたのですが、
IEで確認したところ、中央によっていました...

解消法

svgタグにwidth,height,preserveAspectRatio="xMinYMid"を指定したらなおりました。

IE11で背景に指定したSVGが正しく表示されない件

最後に

IE対応で不具合を起こさないようにするには、実機確認がマストだと感じました。
MacでIE確認できる機能もありますが、スタイル崩れが再現できるとは限りません。
なるべくユーザーと同じようにWindowsで、IEを開いて確認するよう徹底しましょう。

また、アドベントカレンダーは指定の日にちに投稿しましょう.........

HTML内での戻る、進む、更新ボタン

$
0
0
<inputtype="button"value="戻る"onclick="modoru()"><inputtype="button"value="進む"onclick="susumu()"><inputtype="button"value="更新"onclick="koushin()">
//戻るfunctionmodoru(){history.back();}//進むfunctionsusumu(){history.forward();}//更新functionkoushin(){location.reload();}

進むボタン、戻るボタンは該当するページがなければ反応しない。

【CSS】複数の要素に対して同じCSSを指定

$
0
0

スクリーンショット 2019-12-28 2.25.48.png

例.html
<h1>文字赤くしてー</h1><p>ここも赤くしてー</p>

このような場合、CSSでは

例.css
h1{color:red;}p{color:red;}

このように記入しなければならなかった。
もちろんこれでも間違いではないのだけど
h1 も p も同じ内容。
こういうときは・・・

例.css
h1,p{color:red;}

h1 と p のあいだを , で区切って記入しても・・・

Web

スクリーンショット 2019-12-28 2.25.48.png

同じ表示:laughing:
コードも見やすくなりました:laughing:

【CSS】背景画像の設定

$
0
0

background-image

:sunny:背景画像を指定する。
:sunny: background-image: 画像のURL;

background-color で背景色は設定できたけど、それだけではなんだか味気ない・・・:sweat:
というときは背景画像を入れてみよう:smile:

例.html
<div><p>海はいいねぇ</p></div>
例.css
div{color:white;width:100%;height:500px;background-image:url(https://www.pakutaso.com/shared/img/thumb/RED19515A006_TP_V.jpg);}

一番下に background-image: 画像のURL; を入れてみました:smile:

Web

スクリーンショット 2019-12-28 3.17.49.png

画像の左上に文字と写真が入りました:raised_hands:
文字で記入したとおり
海はいいねぇ〜:relaxed:
・・・とおもいきや!
海ではなく空しか写っていない!!:scream:

原因は私が高さを height: 500px; にしているため入り切らない画像は切り取られてしまったんだと思います:sob:

かといって高さは変えたくない:disappointed_relieved:

そんなときは・・・!:point_up::bulb:
background-size: cover; を加えてみよう:smile:

例.css
div{color:white;width:100%;height:500px;background-image:url(https://www.pakutaso.com/shared/img/thumb/RED19515A006_TP_V.jpg);background-size:cover;}

Web

スクリーンショット 2019-12-28 3.27.48.png

表示されました!:smile:

:sunny: background-size: cover;・・・画像をぴったりサイズに表示してくれる


「CSS完全に理解した」に見るposition: absoluteの考え方

$
0
0

こちらは2019 あなたが学んだ「チョットデキル」を発信する Advent Calendarの記事です。
あれ?何日遅れてるのかなぁ???

Twitterで以前バズっていた「CSS完全に理解したTシャツ」というものがあります。
知らないって方はこちら:「CSS完全に理解した」Tシャツが完全にツッコミ待ち なぜこのデザインに?作者に聞いた

あれを実際にCSSで再現してみました。
再現して分かったのですが、この課題はHTML,CSSの基礎を学んで実際にページを作ろう!ってくらいの初心者にはよい課題になるのではと思いました。

要素を作成する

html
<divid="content"><p>CSS<br>完全に理解した</p></div>
css
#content{border:2pxsolid#000000;width:380px;height:160px;border-radius:16px;}#contentp{font-size:40px;line-height:1.3;font-weight:500;}

なにも難しいことはしていません。大枠はボックスに枠線をつけてborder-radiusで角丸にしています。
大きさはお好みのサイズで作成してください。

ここまで作成したら、こんなかんじになっているはずです。
CSSちょっと理解している
ここから、正しい位置にテキストを移動させます。

positionを使用し位置を移動

元画像のように真ん中より少し左の位置からテキストが開始されるように調整します。
いろいろなやり方がありますが、今回はpositionを使用して位置を調整します。

基準となる要素にposition: relative;

まず基準となる要素(今回でいうと#content)にposition: relative;という記述を書きます。
※relativeは相対的という意味です。

css
#content{border:2pxsolid#000000;width:380px;height:160px;border-radius:16px;position:relative;/* 追記 */}

動かしたい要素にposition: absolute;

そして動かしたい要素(今回でいうとp)にposition: absolute;という記述を追記します。
これによりrelativeを指定した要素の範囲内で、自由な位置に配置できます
今回はだいたい上から10%、左から40%くらいの位置なので、top,leftを使用して位置を調整します。

css
#contentp{font-size:40px;line-height:1.3;position:absolute;/* relativeの範囲内で好きな位置に配置 */top:1%;/* 上から1%の場所に配置 */left:42%;/* 左から42%の位置に配置 */font-weight:500;}

ここまで作成したら、こんなかんじになっているはずです。
CSSちょっと理解している
あれ?はみ出ませんね?

テキストの改行を防ぐ

テキストが枠内で折り返されてしまっています。
ここでは改行を防ぐためにword-breakを使用します。
word-breakを使用することで、コンテンツからテキストがあふれそうなときでも、強制的に改行します。

完成!

See the Pen CSS Kanzen-Rikai by saki matsushita (@seahorse-design) on CodePen.

position要素は初心者が躓きやすいポイント(私調べ)なので、
簡単な課題としては良い難易度かと思いました。
枠からはみ出させるレイアウトもたびたび遭遇するので、ほかにも色々な方法を試してみるといいかもしれませんね:)

アイディアに困ったらCodePen!!

$
0
0

こんにちは
日々、UIについて勉強しています!そんな私が今回紹介したいのは CodePenです。
もしかしたら他の記事にもあるかもしれませんが使いやすかったので紹介させてください。

CodePen

CodePenとは、Webブラウザ上でHTML/CSS/Javascriptのコーディングができるサービスです。
世界中のプログラマーがこんなのいいよ!と投稿しています。
codepen-ec.png

codepen2.png

   
   

   

特徴として

  • 沢山のアイディアを参考にできる
  • 既存のコードをその場で編集、反映してくれる
  • 自分の作品を公開することができる                   

変更を加えるとすぐにプレビューが更新されて反映されるので、リアルタイムでデザインを確認しながらコーディングできます。
実際私も作ってみました ネオンVer.のQiitaロゴです↓↓
スクリーンショット 2019-12-28 17.29.06.png

CodePen公式↓
https://codepen.io/

ネオンロゴ↓
https://codepen.io/takaharatoru/pen/LYEjyMw

皆さん興味は湧きましたか?
このサイトを観ると、 html、cssでこんなことまでできるのと感じると思います!!
今回紹介仕切れていないくらいCodePenにはまだまだ機能があります。
ナビゲーションやボタンのデザイン、スライダー、他にも様々なアイディアが紹介されていますので皆さん是非使用してみてください!!

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

$
0
0

100日チャレンジの197日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

197日目は

Roboto Monoは通常体とイタリック体の幅が等しくない

$
0
0

「ほう、Roboto Monoですか、たいしたものですね。Roboto Monoは可読性がきわめて高いらしく、OSのクリーンインストール直後にインストールするプログラマーもいるくらいです」

といいたいところだが、実はRoboto Monoは通常体と筆記体(以下イタリック体)の幅が等しくない。なので並べると以下の様になってしまう。

image.png

ウェブ上で通常体とイタリック体が同じ幅で表示されるようにするためには、以下のように@font-faceを設定してやればよい。

@font-face{font-family:'Roboto Mono';font-weight:100;src:local('RobotoMono-Thin');}@font-face{font-family:'Roboto Mono';font-weight:300;src:local('RobotoMono-Light');}@font-face{font-family:'Roboto Mono';font-weight:400;src:local('RobotoMono-Regular');}@font-face{font-family:'Roboto Mono';font-weight:500;src:local('RobotoMono-Medium');}@font-face{font-family:'Roboto Mono';font-weight:700;src:local('RobotoMono-Bold');}

こうすればイタリック体の表示に使われるリソースが通常体でオーバーライドされる。

image.png

ちなみにこの問題はすでにIssueとして具申されている。

overflow の罠。 overflow-x か overflow-y が効かないのは仕様らしい。

$
0
0

概要

同じ要素に対して、overflow-x, overflow-yのどちらも指定するといったことを実現したかったが、効かなかったので、調べてみました。

CSS Overflow Module Level 3の仕様書によると、「overflow-xとoverflow-yのどちらかがvisible以外に指定されていると、もう片方はvisibleを指定しても、内部ではautoとして扱う」ということになっています。

つまりは、思っていることをそのまま実現することは不可能そうです。

だがしかし解決策はある

良いかどうかは別として、以下のような解決方法がある模様です。

  1. 要素を適当なタグでラッピングして親要素、子要素にそれぞれ overflow-x, overflow-y を片方ずつ指定する

そのほかにもありそう?後々困ったら調べることにします。

参考

https://triple-underscore.github.io/css-overflow3-ja.html#overflow-properties
https://teratail.com/questions/138138

Viewing all 8764 articles
Browse latest View live


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