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

font-awesomeとbootstrap(4.5.1)の導入

$
0
0

各種バージョン

Ruby: 2.6.5
Rails: 6.0.0
Bootstrap: 4.5.1
Font-Awesome(Free): 5.7.2

app/views/layouts/application.html.erb
<!DOCTYPE html><html><head><title>boot_and_fontawesome_app</title><%=csrf_meta_tags%><%=csp_meta_tag%><linkrel="stylesheet"type="text/css"href="http://yui.yahooapis.com/3.18.1/build/cssreset/cssreset-min.css"><linkrel="stylesheet"href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"crossorigin="anonymous"><%=stylesheet_link_tag'application',media:'all','data-turbolinks-track':'reload'%><%=javascript_pack_tag'application','data-turbolinks-track':'reload'%><script src="https://kit.fontawesome.com/d9fcea61b7.js"crossorigin="anonymous"></script></head><body><%=yield%><script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"crossorigin="anonymous"></script></body></html>

上記を貼るだけ
以下はサンプルコード。

app/views/index.html.erb
<divclass="container"><divclass="jumbotron m-3"><h1class="display-4">Hello, Bootstrap!</h1><hrclass="my-4"><p>This is the template of Ruby on Rails using Bootstrap.</p><buttontype="button"class="btn btn-primary btn-lg"data-toggle="modal"data-target="#exampleModal"><iclass="far fa-window-maximize"></i>
      Click here
    </button></div><!-- Modal --><divclass="modal fade"id="exampleModal"tabindex="-1"role="dialog"aria-labelledby="exampleModalLabel"aria-hidden="true"><divclass="modal-dialog"role="document"><divclass="modal-content"><divclass="modal-header"><h5class="modal-title"id="exampleModalLabel">Modal title</h5><buttontype="button"class="close"data-dismiss="modal"aria-label="Close"><spanaria-hidden="true">&times;</span></button></div><divclass="modal-body">
          Hello!
        </div><divclass="modal-footer"><buttontype="button"class="btn btn-secondary"data-dismiss="modal">Close</button></div></div></div></div></div>

すると以下のようなページを表示できます。
https://gyazo.com/2c476830157ce55b86000591254edc33
ブートストラップとfont-awesomeが適用できていることがわかります。

参考 https://getbootstrap.jp/docs/4.5/getting-started/introduction/


【初心者でもわかる】フォームの必須項目に(*)や(※)を付ける方法

$
0
0

どうも7noteです。必須項目と分かるように装飾を作る方法

今回はCSSで上付き文字を作ります。こんな感じです。

sample.png

作り方

index.html
<p>お名前<span></span></p>
style.css
span{color:red;/* 文字色を赤にする */font-size:0.5em;/* 文字サイズを半分にする */vertical-align:super;/* 上付き文字にする */}

上付きにしたい文字を<span>で囲み、vertical-align: super;で上に配置します。
vertical-alignはインライン要素にしか効かないので、注意が必要です。

<sup>は使うな!

似たようなことができる要素として<sup>というものがありますが、<sup>はその文字がないと意味が変ってしまうものにしか使わないというのが推奨の使い方になります。

たとえば、H2Oとか、E=mc2とかその文字が上付き文字でなくなってしまうと意味が変ってしまいます。
このような文字の場合にのみ<sup>を使います。

まとめ

勉強しはじめの頃、vertical-alignを使っていると上手く効いたり効かなかったリするので、必ずその要素がインライン要素かどうかを確認するよう注意してください。

おそまつ!

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

HTML/CSS 個人的まとめ

$
0
0

概要

レスポンシブなレイアウトをCSSで実現する方法。
キーワード。

  • ビューポート
  • メディアクエリ
  • widthのパーセント指定

ビューポート

htmlのheader内に、metaタグとして埋め込みを行う。
モバイルデバイス(スマートフォン・タブレットなど)用の設定で、レスポンシブデザインを適応する際に必要な端末情報を取得して埋め込む。
主に、後述するメディアクエリの判定基準に使用される。

<metaname="viewport"content="width=device-width, initial-scale=1.0">

device-width: モバイル端末のCSSピクセル(コーディンする際の画面横幅)
※解像度には、CSSピクセル(HTMLコーディングで気にする) と デバイスピクスセル(画像で気にする)がある
例) iPhone X : CSSピクセル => 375 x 812 / デバイスピクセル => 1,125 x 2,436

initial-scale: ベージ表示時の初期拡大倍率
適切に、メディアクエリを用いてレスポンシブ対応する場合は1.0指定で概ね問題ない。
複数デバイスへの対応を力技で拡縮率だけで乗り切ろうとすると、1.0をjsでゴニョゴニョする必要もある、

なお、ビューポートは、CSS以外では、JavaScriptのwindow.innerWidth・innerHeightにも影響がある。

メディアクエリ

Media Queries

デバイスの画面サイズ別に、適応するCSSを変える(上書きする)などの場合に使用する、
@mediaで始まり、そのあとに、max-width か min-width でCSSの適応の境界値を設定する。
境界値となる値は、 ブレークポイントと呼ぶ。
ブレークポイント前にメディタイプを挟むこともできる。
@media screen | tv | printer みたいな感じ。省略するとallになる。

なお、ブレークポイントの指定はどちらも境界値を含む。

‘min-’ or ‘max-’ prefixes to express "greater or equal to" and "smaller or equal to" 
https://www.w3.org/TR/css3-mediaqueries/#media1

以下に使用例を示す

@media(max-width:1000px){/* 最大画面サイズが1000px "まで(x <= 1000)" 適応したいCSS定義 */}@media(min-width:1000px){/* 最大画面サイズが1000px "から(x >= 1000)" 適応したいCSS定義 */}@media(min-width:1000px)and(max-width:1500px){/* 最大画面サイズが1000〜1500px まで適応したいCSS定義 */}

実践的な使い方
実践的には、 スマホ / タブレット / デスクトップPCの3つでブレークポイントを設定するケースが多い。
ブレークポイントを沢山設定し過ぎてもメンテナンスしにくいので、これくらいがちょうど良い。
どの値をブレークポイントとするかだが、昨今のスマホ画面サイズの大型化の流れなどで、変化してきているようだ。
その時の、有識者がまとめている定番の値を、ググって適応するのが良さそう。
雰囲気的には 400-600 | 800-1024 に境界値を設けているところが多そうだ。

一応、現時点での、個人的な設定を記載する。
デバイスが徐々に大型化(多様化)する流れを感じつつ、少し大きめなところで線を引いてみた。

3つに分けるケース
モバイルファーストで作成しつつタブレットやデスクトップPCにも、きっちり出し分け対応したい場合。

/* スマホ用 (<= 640px) */@media(min-width:640px){}/* タブレット用 ( <= 1024) */@media(min-width:1024px){}

2つに分けるケース
デスクトップPCの画面をメインとして、タブレットやスマホなども最低限見える程度に対応したい場合。
※ iPad Pro11の縦使用をPCとみなしたい場合は834を境界値に。

/* スマホ/タブレット用 (<= 900px) */@media(min-width:900px){}

widthのパーセント指定

メディアクエリを使って、それぞれのブレークポイント別に、コンテンツの表示件数を変える場合には、
widthをパーセント指定する。

以下に想定するケースを書く
・スマホ表示時には1つだけ newsコンテンツ を出す。
・タブレット表示時には2つ newsコンテンツ を横並びで出す。
・デスクトップ表示時には4つ newsコンテンツ を横並びで出す。

これをこうする。

.news{width:25%;}/* スマホ用 (<= 640px) */@media(min-width:640px){.news{width:100%;}}/* タブレット用 ( <= 1024) */@media(min-width:1024px){.news{width:50%;}}

box-sizing: border-box

調整をかけたいブロック要素に対して、paddingが設定された場合、
単純にパーセント指定だけだと厳しい局面がある。
なぜなら、paddingに対しては、パーセント計算が適応されないからである。
なので、画面サイズの小さい端末でみたときに、相対的に余白が大きく適応されて違和感が出てしまう。
また、floatで横並びレイアウトを組んでいた場合サイズが収まりきらなくて、箱落ちしてしまう。
これを防ぐために、 border-box指定を使う。

*{box-sizing:border-box;}

これにより、パーセント計算の時に、 余白も含めて(borderまで含めて)パーセント計算対象にしてくれるので、表示がいい感じに整う。
border-boxを使用しない場合は、旧来のcss内で、padding値を計算する方法もある。
なお、border-boxはmarginには適応されないので注意。

(´ω`) わいが清掃のお仕事してた頃に作ったアプリってのがある

$
0
0

ホテル清掃の経験ある人フォロワーになってくれないか。
3つ目の記事になるがQiitaからフォローしてくれた人は0だ。来てくれたら歓迎するよ。

何をしてたか

ホテル清掃をしていた頃、全ての作業は分担されておりベッドの人はベッドを何部屋もやる。バスルームも同じだ。おかげで某ビジネスホテルだがシングルのベッドなら3分で出来るようになったしバスルームでも7、8分で行えるようになった。
つまり、みんながキーボード触っている時期にわいは便所に手を突っ込んで掃除しながらたまに便器からはみ出た💩をキレイにしてた。それから3時間56台の勢いでベッドをひたすら組んでいた。とはいっても毎日じゃない。

何をしたいか

ただし、部屋数が増えてくればだれてくるし汚れている部屋であれば多少なりとも予定作業時間を過ぎてしまう。といったことが起こる。当たり前の話だ。そういったときにこのアプリが活かせる。自分が遅れているのか早く進んでいるか把握できるようになる。

何を作ったか

タイマーだ。部屋数と時刻を2か所入力する(作業開始時刻と作業時間)。あとは👍ボタンを押すごとに時間が記録され予定完了時刻より早ければ緑、遅ければ赤に行色が変わる。

image.png

何を使ったか

・画面は Fomantic-UI
・時刻入力は CleaveJS
・現在時刻取得は MomentJS
・部屋毎の作業時間計算は MomentDuration
・また比較演算子を関数で行いたかったから Predicate

image.png

どう作ったか

index.html
<!doctype html><html><head><title></title><metacharset='utf-8'><metacontent=''name='author'><metacontent=''name='description'><metacontent=''name='application-name'><metacontent='telephone=no,address=no,email=no,date=no,url=no'name='format-detection'><metacontent='noimageindex,notranslate,nosnippet,noarchive,nofollow,noindex'name='robots'><metacontent='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'name='viewport'><linkhref='css/fomantic-ui/2.7.8.min.css'rel='stylesheet'media='screen'><linkhref='asset/progressive-web.json'rel='manifest'><linkhref='asset/favicon.ico'rel='icon'><style name='font'>@font-face{font-family:'M+2VM+IAPG circle';src:url('asset/m+2vm+ipag-circle.ttf');}@font-face{font-family:'gidole';src:url('asset/gidole.ttf');}</style><style>/*
      * 視認
      */html,body{font-size:14px;}.ui.tabletd,.ui.tableinput{font-family:'gidole';}.ui.table>thead>tr>th,.ui.table>tbody>tr>td{padding:0;}/*
      * 入力
      */.ui.tableinput[type='number']{-moz-appearance:textfield;}.ui.tableinput::-webkit-outer-spin-button,.ui.tableinput::-webkit-inner-spin-button{-webkit-appearance:none;}.ui.tableinput{background:transparent;text-align:center;appearance:none;outline:none;border:none;width:100%;}/*
      * 見栄
      */.ui.tabletheadtr:first-child>th:first-child{width:3em;}.ui.card,.ui.label,.ui.table,.ui.buttons{border-bottom:2pxsolidrgba(34,36,38,.15)!important;box-shadow:rgba(16,36,94,0.4)02px6px0!important;}.ui.card.descriptionp{font:12px'M+2VM+IPAG circle';line-height:1.2;color:black;}/*
      * アイコン
      */i.icon.thumbs-up:before{content:'\f164';}</style></head><body><main><divclass='ui grid padded'><divclass='row'><divclass='column'><divclass='ui card fluid'><divclass='image'><imgsrc='asset/businesshotel-9956-400x400.png'></div><divclass='content'><divclass='description'><p>ホテル清掃の進捗を管理するアプリです。予定通り進んでいるか緑と赤のバランスでわかります。上のテーブルを入力して作業を開始しましょう。</p></div></div></div></div></div><divclass='row'><divclass='column'><tableclass='ui table unstackable celled fixed center aligned blue'><thead><tr><th></th><th>開始時刻</th><th>作業時間</th></tr></thead><tbody><tr><td><inputtype='number'v-model.number='rooms'></td><td><inputtype='tel'v-model='time.base'ref='v1'></td><td><inputtype='tel'v-model='time.task'ref='v2'></td></tr></tbody></table><tableclass='ui table unstackable celled fixed center aligned blue'><thead><th>No.</th><th>予定時刻</th><th>完了時刻</th></thead><tbody><trv-for='(no,i) in rooms':class="[lt(i)]"><td>{{no}}</td><td>{{estimate[i] | HHmmss }}</td><td>{{complete[i] | HHmmss }}</td></tr></tbody></table><divclass='ui buttons two blue'><buttonclass='ui button icon'@click='reset'><iclass='icon file'></i></button><buttonclass='ui button icon'@click='stamp'><iclass='icon thumbs-up'></i></button></div></div></div></div></main></body><!-- native --><script src='js/native/moment-2.24.0.min.js'></script><script src='js/native/moment-duration-format-2.3.2.min.js'></script><script src='js/native/predicate-1.2.0.min.js'></script><script src='js/native/cleave-1.5.3.min.js'></script><!-- vue --><script src='js/vue/2.6.10.js'></script><script>newVue({el:'main',data:{/*
         * 入力用のデータ
         */time:{base:null,/* 作業開始時刻        */task:null,/* 作業平均時間(作業者)*/},rooms:10,/* 作業予定個数(部屋数)*//*
         * 進捗用のデータ
         */estimate:[/* 作業完了予定時刻     */],complete:[/* 作業完了実際時刻     */],/*
         * 入力用のバリデーション(時刻と時間)
         */validation:{time:true,timePattern:['h','m','s']}},filters:{HHmmss:function(ts){if(ts!==undefined){/* 何時:何分:何秒 */returnmoment(ts).format('HH:mm:ss')}}},computed:{timeChanged:function(){/* 部屋数と時刻が修正されたことを監視 */returnthis.rooms&&this.time},},watch:{timeChanged:{deep:true,handler:function(){/* 再計算 */this.calc()}}},methods:{lt:function(i){/* 予定より遅い or 早い */return(i<this.complete.length)?(predicate.lt(this.estimate[i],this.complete[i])?'negative':'positive'):null},stamp:function(){/* 作業完了 */if(this.complete.length<this.rooms){this.complete.push(moment().valueOf())}},reset:function(){/* 初期化 */this.complete.splice(0,this.complete.length)},calc:function(){/* 計算 */varbase=moment(this.time.base,'HH:mm:ss')vartask=moment.duration(this.time.task)for(vari=0;i<this.rooms;i++){varval=base.add(task).valueOf()if(val){this.estimate[i]=val}}},init:function(){/* HH:MM:SSによる入力検証 */newCleave(this.$refs.v1,this.validation)newCleave(this.$refs.v2,this.validation)}},mounted:function(){this.time.base='11:30:00'/* 作業開始 */this.time.task='00:09:00'/* 作業時間 */this.init()/* NN:NN:NNの入力検証 */this.calc()/* 計算(作業完了時刻) */}})</script></html>

::webkit-scrollbar プロパティ一覧

$
0
0

何気に Edge が Chromium になって、出来ないのはあと Firefox だけなんですね

::-webkit-scrollbar

スクロールバー全体
角のやつ (scrollbar-corner) は含まれないっぽい

image.png

::-webkit-scrollbar-button

端にある上下左右のボタン

image.png

::-webkit-scrollbar-thumb

スクロールバー

image.png

::-webkit-scrollbar-track

スクロールバーが表示されてるとこ、トラック
スクロールバー全体 (scrollbar) からボタン (scrollbar-button) を除いた範囲

image.png

::-webkit-scrollbar-track-piece

現在のスクロール位置までで分割されてるトラック (?)

image.png

::-webkit-scrollbar-corner

縦横のスクロールバーの交差するとこ

image.png

::-webkit-resizer

textarea とかで、リサイズできる時に右下に表示されるやつ
範囲は交差するとこの (scrollbar-corner) と同じ

image.png

分かりやすいような分かりにくいようなサンプル

See the Pen scrollbar on CodePen.

Twitterクローンもどき作成までの過程

$
0
0

PC版のTwitterのようなサイトを作ろうと思って調べたことをまとめていきます

要素をきっちり3分割

target{width:calc(100%/3);}

参考:【CSSで3等分】要素をきっちり三分割するスタイルシートの書き方

画面サイズ取得

画面取得するには以下を使用する
この取得したサイズに応じて表示する内容を変更したりする
どちらもスクロールサイズを除くサイズ

縦サイズ

document.documentElement.clientWidth

横サイズ

document.documentElement.clientWidth

画面サイズ変更の監視

window.addEventListener('resize',()=>{//処理}

参考:要素のリサイズに応じてイベントを発動する方法

入力ボックス

入力ボックスはHTML5の contentEditable 属性を使う
この属性をtrueにすると編集できるようになる
inputを使うよりもシンプルな入力画面になる

<divcontentEditable="true">入力ボックス</div>

aの下線部を消す

text-decoration:none;

Twitterのようなタイムラインの形のテンプレート

<bodystyle="background-color:rgb(54, 3, 3)"><divstyle="background-color: rgb(107, 107, 2);width: 500px;display: inline-flex;"><!-- ユーザ情報 --><divstyle="background-color: rgb(104, 101, 101);"><imgsrc="image/bell.png"alt=""style="width: 50px;"></div><!-- 投稿内容 --><divstyle="display: block;"><divstyle="background-color: rgb(109, 65, 65);">あああ</div><divstyle="background-color: rgb(69, 65, 109);">いいい</div><divstyle="background-color: rgb(65, 109, 88);">ううう</div><!-- <div contenteditable="true" style="background-color: rgb(65, 109, 88);">ううう</div> --></div></div></body>

スクリーンショット 2020-09-19 23.45.22.png

block要素を上下左中央に配置

.outer{position:relative;}.inner{position:absolute;top:50%;left:50%;transform:translateY(-50%)translateX(-50%);-webkit-transform:translateY(-50%)translateX(-50%);}

引用:CSSで要素を上下や左右から中央寄せする7つの方法

フォーカスインとフォーカスアウト

addEventListenerでコントロールするものいいが特定のタグであれば
onfocusonblur属性がいい仕事をしてくれる

属性説明
onfocusフォーカスしたとき
onblurフォーカスアウトしたとき
<inputplaceholder="キーワード検索"type="text"onblur="focusOut(this)"onfocus="focus(this)">

thisでその要素自体を取得できる

気になったcssプロパティなど

flex-basis

コンテンツボックスの寸法を定義

【備忘録】CSSの+(プラス)とは

$
0
0

プログラミング勉強日記

2020年9月22日
CSSで+を見かけたが、意味がわからなかったので調べてみた。

CSSの隣接セレクタ+(プラス)

 +は隣接セレクタと呼ばれる。そのあとすぐに来る要素を表す。

HTMLファイル
<h1>こんにちは</h1><p>私の名前は田中太郎です</p>
CSSファイル
h1+p{color:blue;}

0922.png

参考文献

CSSで「+(プラス)」というセレクタの意味は何?

【初心者向け】GoogleChromeのリニューアルで目立つようになった黒い線を消す方法

$
0
0

どうも7noteです。開発していると、意図していない場所に黒い太枠線がでてくるようになって、なんだこれって思ってました。こいつを消します。

focus.png

フォームやマウスカーソルで要素を触ると出てくる・・・

どうやらクロームの初期値として、:focusがある時に出るようです。

f12.png

消し方

消したい要素にoutline: none;だけ。とっても簡単。

input{outline:none;}

まとめ

以前まではあまり気にしていなかったのですが、前回のクロームのアップデートの影響ですごく悪目立ちすることがあったので、必要ない場面では消すようにしています。

おそまつ!

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


3カラム横並びカードレイアウトのコーディング

$
0
0

はじめに

スクリーンショット 2020-09-22 23.10.01.png

WEB制作をしていると、こんな感じのカードレイアウトを作成することがあるので、コピペできるようにメモしておきます。

なるべく使い回しができるようにしていきますが、もっと汎用性高くできるわ!って人はお声掛けください。

まずはカード本体を作る

HTML

<divclass="card"><divclass="card__wrapper"><divclass="card__img-box"><imgsrc="https://cdn.pixabay.com/photo/2020/08/27/10/24/water-5521696_960_720.jpg"alt=""class="card__img-item"/></div><divclass="card__content"><h3class="card__ttl">ダミーテキスト</h3><pclass="card__txt">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストが入ります。
        </p><pclass="card__txt">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストが入ります。
        </p></div></div></div>

CSS(SCSS)

.card{&__wrapper{background-color:#fff;box-shadow:5px5px5px#999;}&__img-box{position:relative;width:100%;padding-top:55%;overflow:hidden;}&__img-item{width:100%;position:absolute;top:50%;transform:translate(0,-50%);}&__content{padding:20px;>*:last-child{margin-bottom:0;}}&__ttl{font-size:20px;margin-bottom:15px;font-weight:700;}&__txt{font-size:16px;}}

まずはカード本体を作成します。
「> *:last-child」の部分で何をしているかというと、仮にダミーテキストがなくなってタイトルだけになった場合にmargin-bottomを消してくれるようにしています。

こういうレイアウトのときに画像を背景でよく置くのですが、今回はコンテンツとして表示するという意識をもってあえてimgタグで置いています。
この方が背景よりも若干SEO的に有利になります。

また、背景でおくとCMS導入の際にHTMLにCSSで「background-image」を指定することになるのが自分的にあまり好きじゃないです…

横並びにする

<divclass="cards cards--col3">  ~繰り返す~
    <divclass="card"><divclass="card__wrapper"><divclass="card__img-box"><imgsrc="https://cdn.pixabay.com/photo/2020/08/27/10/24/water-5521696_960_720.jpg"alt=""class="card__img-item"/></div><divclass="card__content"><h3class="card__ttl">ダミーテキスト</h3><pclass="card__txt">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストが入ります。
          </p><pclass="card__txt">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストが入ります。
          </p></div></div>  ~ここまで繰り返す~
    </div></div>

.cardのスタイルはそのままで、プラスして

CSS(SCSS)

.cards{display:flex;flex-wrap:wrap;align-items:center;margin:0-15px-30px;}.cards>.card{padding:015px;margin-bottom:30px;}.cards--col3>.card{width:33.33333%;}

こんな感じです。
.cardsの部分で、ネガティブマージンを指定しているのはカード間にできるガターを打ち消すためです。
.card自体にはwidthは決めずに、親要素直下のcardに指定することで4カラムになった時でも、2カラムでもその都度対応できるかと思います。

まとめ

こんな感じで、コーディングに時間をかけて行きたくないので、ちょっとずつ貯めていきたいです。

overflow: scrollが反映されなかった原因

$
0
0

【目次】

1.overflow:scrollとは
2.原因
3.反省
4.最後に

1.overflow:scrollとは

親要素の表示範囲から、はみ出した子要素が存在する時、はみ出した分に関してはスクロール表示にすることができるというCSSの1つです。overflowというプロパティに対して様々な値を指定することができ、指定した値の種類によって、はみ出した子要素に対してどのような表示形式を指定するか決めることができます。

2.原因

widthとheightを指定していなかった為。(表示範囲を決める記述がなかった為)
「overflow」「効かない」といった単語を並べて検索したがヒットせず、初心者向けのoverflow解説記事を読んでいて気付きました。親要素からはみ出した分についての表示形式を定めるプロパティなのに、親要素のサイズが決まっていなければ、はみ出したかどうかの判定も行われていないのでスクロール表示がされないということですね。

3.反省

1.エラー原因の検索する前に、公式リファレンスや初心者向けの解説記事を読んでみる。

エラーの原因を直接的に探る検索も大切ですが、そもそもプロパティの使い方を1から読み直すこともエラーを解決する上では大切だと思います。私のような初心者のエラーは基本的な使い方に問題のある場合があります。あまりに基本的すぎるエラーは、現象を直接検索してもエラーの事例としてヒットしないことがあると思いました。

2.サイズ指定を忘れがち

検証ツールでサイズ指定していない部分を選択しても、コンテンツの分だけサイズがあるように表示されます。しかし、それはコンテンツを空にすれば表示領域は0になってしまうということです。コンテンツを入力しているとサイズが指定されていると錯覚してしまうことがあるので注意する必要があると感じました。
メモをしていなかったので例を出せませんが、サイズ指定をするだけでCSSが反映されないというエラーを解消できた例を他にも経験した記憶があるので、詰まったらサイズ指定を考えてみるというのも1つの方法かと思いました。

4.最後に

まだまだ初心者で誤った記事を投稿してしまうかもしれないので、変なことを書いている場合は指摘してもらえればと思います。
今後も自分がプログラミングをしていて気付いたことや、エラーの体験談とその解決について投稿していこうと思いますので宜しくお願い致します。

CSSのidとclassの使い分け

$
0
0

プログラミング勉強日記

2020年9月23日
よくCSSでclassを使うが、classの方が複数指定できるし便利なのでは?idを使う必要はないのでは?と思った。なので、idとの使い分けについてまとめる。

id属性とclass属性とは

 CSSのセレクタ(h1, p)などでスタイルを指定することはできるが、h1p要素は多く利用されるので、同じ要素でも別のスタイルを使用したいときにHTMLのid属性やclass属性を使う。

 CSSはHTMLのどこの部分のなにをどのようにするか指定することができ、書き方は以下のようになる。

どこの(セレクタ) {
  なにを(プロパティ): どうする(値);
}

 このセレクタをid属性とclass属性の属性値(名前)を指定することができ、自由にスタイルを変えることができる。class属性の場合は名前の前に.を、id属性は名前の前に#をつける。

HTML
<h1>こんにちは</h1><pclass="red">私の名前は田中太郎です</p><h1>こんにちは</h1><pclass="blue">私の名前は田中次郎です</p><pid="green">よろしくお願いします</p>
CSS
h1{color:orange;}.red{color:red;}.blue{color:blue;}#green{color:green;}

0923.png

id属性とclass属性の違い

 上で述べたようにid属性とclass属性を指定することで自由にスタイルを変えることができる。どちらでスタイルを呼びだしても結果は変わらないし、読み込み速度も変わらない

 ただ、class属性は1ページに何度でも使用できるのに対し、id属性は1ページに1度しか使ってはいけない。
 一見id属性は不便なように思うが、規模の大きいホームページになるとCSSが複雑になっていくので、id属性とclass属性を使い分けたほうが編集や修正に便利になる。

 ※id属性を複数使っても正しくスタイルが反映される場合があるが、文法的には間違えてるので注意する。

id属性とclass属性の使い分け

 ここで本題になります。
 class属性は何度でも使用することができるので、頻繁に呼び出すCSSはclassで定義して、一度しか使わないCSSはidで定義する。
 特にid属性は一度しか使わないヘッダーやフッターで使われることが多い。

参考文献

idとclassをわかりやすく説明!ゼロから始めるHTML/CSS講座Vol13
classとidの使い方

clearfix::afterの重要性

$
0
0

floatさせた要素が、上手く反映されない時の対処法

として、clearfix::afterを用いることが、解決法の1つとしてあります。
でもこれをきちんと理解出来てる方って少ないと思うんですよね。職業訓練校に通ってた時も、単に覚えてねーと言われた記憶があり、モヤモヤしていました。これを特に知りたくないかたは、flexboxを使いこなすことを推奨したいのですが、floatでしか再現出来ないこともあるので、これらの知識はmustだと思ってください。

index.html
<divclass="container">ここに画像が入ってるとする。
</div><divclass="text-container"> 
/*以下を、全てフロートさせようとする*/
<p>テキスト</p><divclass="text>
<p><img src="img/main-img"></p></div></div><divclass="non-float">こいつはfloatさせたくない</div>
style.css
/*ここからは、Css*/*{margin:0;padding:0;}.text{float:left;background-color:blue;}.text-containerimg{float:right;background-color:blue;}

上の状態のままにしても、
スクリーンショット 2020-09-23 17.28.41.png
画像がみにくくて、申し訳ないのですが、non-floatクラスが、text-containerクラスに覆いかぶさるようになってしまっています。あらあら、そこはfloatしなくても良いのに。という状況ですね。これが、勉強を開始したばかりの頃に、とても悩まされました涙
この不必要なfloatを解除するために、

clearfix::after

を用いる必要が大いにあります。
::afterが分からない方は、ネットで調べてください。擬似要素ってやつです。
ちなみに、clearfixはクラスになるので、float解除させたいdivクラスの直前の親要素に設定をしてあげてください。イメージしにくければ、clear:bothだけで、対処することも初めのうちは良いと思います。何度も言ってますが、Web言語の勉強で必要以上の暗記は、しないでください。応用が効かなくなるので。

index.html
/*親要素にclearfixを設定しましょう!*/
<divclass="text-container clearfix"></div>
style.css
.clearfix::after{clear:both;display:block;content:"";}

cssのコードですが、1から説明していきたいと考えています。

1:clearについて

clearは、フロートの回り込みを解除します。

1(1)clear:left

直前の要素が、左にfloatされていて、左に回り込みをしたくない時に使う。

1(2)clear:right

直前の要素が、右にfloatされていて、右に回り込みをしたくない時に使う。

1(3)clear:both(よく使う気がする)

直前の要素の影響を一切受けない。

2:display:blockについて

これは、インライン要素、ブロック要素というものです。
インライン要素の場合は文字が、
ああああああ
と横並びになります。

しかしブロック要素では、





と縦並びになります。

今回の場合、divタグの回り込みを解除したいので、
display:blockを用いています。

3:contentについて

擬似要素に入れたい文字や記号がある場合、ここに記述する必要があります。
今回は何も入れないので、空白のみ入力されています。

style.css
.clearfix::after{/*●を表現する場合*/content:"●";display:inline;}

4::afterについて

divタグの直後を表現しています。

スクリーンショット 2020-09-23 18.48.33.png
図にしてみると、分かりやすいですかね!?

他にも、overflow:hiddenを使うパターンもありますが、これは背景画像を設定した場合、はみ出た部分が、デフォルトで非表示になってしまうので、時と場合によって使い分けないといけません。
スクリーンショット 2020-09-23 18.55.33.png

いやー説明するの難しいですねー。ご意見あれば、コメントくださいね。本日は、ここまで。

Tsハロトレ25日目

$
0
0

ワイヤーフレーム

→Adobe XD
→Cacoo(オンライン)
illustrator IllustratorをPDF(最小ファイルサイズにする)

2週間に1個、1か月に2個作るようにすると良いです。

クライアントワーク

過程を残すことが大事です。その残したものをポートフォリオにします。
ページの1つ1つのアイデアが盛り込まれていて、ディレクターにもデザイナーにもなれます。

Webサイトを作るまでの流れ

①ヒアリング
②ラフ案・・・大雑把な枠組み 
③ワイヤーフレーム・・・箱だけ 
④カンプ(画像+文字)・・・画像と文字つき
⑤プロトタイプ・・・第一階層をもとに複数のページが作れる

960GridSystems

960px2.png

アートボードオプション

アートボードオプション2.png

スマホサイズ

iphonex2.png

ガイドをロック

ガイドをロック2.png

margin-bottomがイラレでもできる

mb30_2.png

flex froggy

flexの練習
flex-floggy.png

Emmet

<nav>
 ul>li*5>a[href="#"]{ホーム}
</nav><nav><ul><li><ahref="#">ホーム</a></li><li><ahref="#">ホーム</a></li><li><ahref="#">ホーム</a></li><li><ahref="#">ホーム</a></li><li><ahref="#">ホーム</a></li></ul></nav>

クラス名

OOCSSとBEM
仕事ではBEMが多いです。
海外のWordPressは、OOCSSが多いです。

CSSリセットの意味

CSSリセットとは、ブラウザが持っているブロックレベル要素の初期値をリセットという意味です。

インライン・・・a,img,br,div
はCSSリセットを行ってもリセットされないです。

initial-scale

古いiphone用の設定なので、今は必要ないです。

均等割り

均等割り2.png

justify-contentでspace-betweenをしたとき

space-between2.png

色んなタブレット

色んなモバイル2.png

footerの中のナビゲーションボタン

 ①display: inline;
文字を横並びにできるが、広げたりはできません。
 <a>に対してのpaddingはできません。

 ②display: inline-block;
 <a>paddingを付けたいときに使います。

ただ、headerやbodyは、display: flex;を使います。

最近は、display: grid;が使われています。

floatは最近使われていない

<divclass="container"><section><h3></h3></section><section><h3></h3></section></div>

row-reverse.png

【初心者でもわかる】tableのtr要素に効かないCSS

$
0
0

どうも7noteです。テーブルを作っていて、trにCSSが効かない時に確認すること

tableのtrにはいくつかうまく反映されないCSSがあります。

とくに幅やbordreなどボックスに関連するCSS効かないので注意!

tr要素にも効くCSS

効く・・・というよりも、継承されて効いているってものが多そうです。

【フォント系】

  • color
  • font-size
  • font-weight
  • font-family

【テキスト系】

  • text-align
  • line-height
  • letter-spacing

【背景系】

  • background

tr要素には効かないCSS

【ボックス系】

  • width
  • height
  • margin
  • padding
  • border

trに効かないCSSがあるのはなぜ?

そういう仕様・・・というしかないのですが、あくまで私のイメージで考察してみました。

tr自体は表組みの1行を示す時に使われるタグで、tr要素の実体はどこにもありません。

つまり、実体のないモノに横幅を指定しても効かないし、borderを引こうにもなにもないところに線は引けない。
中にtd要素などを持ってはいますが、あくまでtrの役割は1行の意味だけなのでtr自身に対して直接なにかしようとしても効かないということなのかなと思います。

ただこれでいうとbackgroundだけは効くので何かが違うのかも・・・

初心者の方がコーディングする際は無理にtrに余白をとるのではなく、thやtd、もしくはtable要素自体にCSSを書くようにしましょう。
そして、trはCSSが効かないもの。と覚えてしまったほうが楽かもしれません。覚えることが多いと思うので、tr要素にCSSを書かなくても済むような組み方ができるようになっておいたほうがのちのち楽かもしれません。好みはあるかもですが。

まとめ

幅や高さ、余白と線はtr要素には効かない!!
いっそtrに装飾を使わないで済むほうがかも楽??です。

おそまつ!

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

(´ω`) CREATE TABLEパースできて楽になって余った時間でコーヒー

$
0
0

なし水を飲みながら書いてるわ。つーわけで書く。Qiitaの記事を書き始めてからこの時点でフォロワーは1人増えたぐらいで全く効果がなかった。まったく俺の書く記事が幼稚でそもそも読み手の意識していないちゃらんぽらんの野郎だって思われているかもしれない。実際その通りだ。かつては丁寧に書いていた時期もあったが今では一日の30分をQiitaに放り込んでいる。まるでゴミのようにだ。読者はその事に絶句しているかもしれない。嘲笑しているかもしれない。それが俺だ。丁寧に書けばいけるんじゃね?...と考えたがこれは質の問題のように思える。今日も最低限の記事を書いて眠ろう。ソースコードはわいの手元にある。完璧に動作する状態だがこの分だと陽の目を見ることもないだろう。終わりだ。そこで今まで通りだらだら書くスタイルにした。文字通りダラダラ書く。帰宅したおっさんが寝ながら書いているのか?それより酷い。みたいに書くぞ。

何作ったの

昔、私はある会社にいた。ウェブ系の案件を任された時に作ったユーティリティだ。これはCREATE TABLE文をパース出来る。JSON形式で。この案件ではエクセルに全てのテーブルとそのテーブルのスキーマが書かれていた。列に対する名前・型・入力値検証・制約・備考などだ。プロジェクトを作りこむ内に整合性が合わなくなってくる。ソースコード上はこちらに変更したが「そういやエクセル更新忘れた」と言っても担当は俺一人だったから何も問題はなかった。引継時は大問題だが。特にここらへんはもうCREATE TABLEのコメント文として真横に記載しておいた方がいいんじゃないか。ぐらいのレベルに思えた。でもそれじゃいけない。やっぱりエクセルに纏めておかないと。ってことで作った。とにかく列名をコピペするのが嫌だったし手入力だと遅いで一発でエクセルにコピーするために作った。

image.png

何組み合わせたの

単純だ。エディタはCODE-MIRRORを利用している。UIはいつも通りFOMANTIC-UIだ。テーブルのCSV化とテーブルを画像化したいこともあると思ってPNG化もできる。CHROMEの拡張機能だ。html2Canvasを使っても出来るが全て自作するのはよろしくない。本末点灯だ。エラーも出るようにしてある。

image.png

どうやってパースしてるの?

NEARLEYだ。NEARLEYというコンパイラを使えばJSの解析器を作れる。NEARLEYに.NEというファイル(BNFベースのNEARLEY構文)をぶち込めばパーサ(.JS)を出力してくれる。俺はNEファイルを書いてない。実際はGITHUBで楽に作れるライブラリはないかと探してたんだ。解析 mysql create table 语句,用于通过建表语句生成 model 代码文件。を持ってきた。

5ファイルあって

image.png

構文はこんな感じ

image.png

ソースコード

sample.html
<!doctype html><html><head><title></title><metacharset='utf-8'><metacontent=''name='author'><metacontent=''name='description'><metacontent=''name='application-name'><metacontent='notranslate'name='google'><!-- GOOGLE:https://support.google.com/webmasters/answer/79812 --><metacontent='telephone=no,address=no,email=no,date=no,url=no'name='format-detection'><metacontent='noimageindex,notranslate,nosnippet,noarchive,nofollow,noindex'name='robots'><metacontent='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'name='viewport'><linkhref='css/fomantic-ui/2.7.8.min.css'rel='stylesheet'><linkhref='asset/manifest.json'rel='manifest'><linkhref='asset/favicon.ico'rel='icon'><style name='editor'>@importurl('css/code-mirror/5.49.1.min.css');@importurl('css/code-mirror/addon-5.49.1.min.css');@importurl('css/code-mirror/mode-5.49.1.min.css');@importurl('css/code-mirror/5.49.1.min.css');</style><style name='font'>@font-face{font-family:'M+2VM+IPAG circle';src:url('asset/m+2vm+ipag-circle.ttf');}</style><style>html,body{font:12px'M+2VM+IPAG circle';}/*
      * 配置(中央)
      */body{display:flex;align-items:center;justify-content:center;}main{width:999px;height:100%;}.ui.grid{height:100%;}/*
      * 見栄(凹凸)
      */.ui.label,.ui.table,.ui.segment{border-bottom:2pxsolidrgba(34,36,38,.15)!important;box-shadow:rgba(16,36,94,0.4)02px6px0!important;}/*
      * 調整(位置)
      */.ui.table,.ui.segment{margin-top:0;}/*
      * 調整(全体)
      */.ui.table>thead>tr>th,.ui.table>tbody>tr>td{padding:.2em;}/*
      * 調整(個々)
      */.ui.table>thead>tr>th:nth-child(2){width:5em;}.ui.table>thead>tr>th:nth-child(3),.ui.table>tbody>tr>td:nth-child(3),.ui.table>thead>tr>th:nth-child(4),.ui.table>tbody>tr>td:nth-child(4),.ui.table>thead>tr>th:nth-child(5),.ui.table>tbody>tr>td:nth-child(5){text-align:center;width:3em;}.ui.table>thead>tr>th{text-align:center;}.ui.table>tbody>tr:hover{cursor:pointer;}/*
      * 構造(エディタ)
      */#editor{display:flex;flex-direction:column;}#eidotr#editor-view{flex:1;}#editor#editor-controller{}/*
      * 設定(スクロールとフォント)
      */#editor,#editor.ui.segment,#editor.ui.segment.vue-codemirror,#editor.ui.segment.vue-codemirror.CodeMirror{height:100%;}#editor.ui.segment.vue-codemirror.CodeMirror{font:12px'M+2VM+IPAG circle';}#viewer{height:100%;overflow-y:scroll;}/**FOMANTIC-UI(が既に指定してる)*CREATETABLE->(sql2json):<TABLE>群は*スクロールバーがあるとみっともないので非表示*#viewer::webkit-scrollbarは効かないので上書き*/body::-webkit-scrollbar{display:none;}.ui.label>i.icon{margin-right:0;}/*
      * FOMANTIC-UI
      * 2.7.8は古いFONTAWESOMEを利用中
      * ので新しいフォントを入れ直して個々に定義する
      * path:css/fomantic-ui/themes/default/assets/fonts
      */i.icon.file-csv:before{content:'\f6dd';}i.icon.file-image:before{content:'\f1c5';}/*
       * MODEL
       * CREATE-TABLEをTABLE化したモノ
       * 画像化した際(クロームの拡張機能による要素指定キャプチャ)影を残す
       * https://chrome.google.com/webstore/search/element%20capture?_category=extensions
       */#viewerdiv.model{padding-bottom:.7em;padding-right:.7em;padding-left:.7em;padding-top:0;}/*
       * sql2json
       * エラー時の色合わせ
       */.ui.label.error-message,.CodeMirror.error-line{background:#fff0f0!important;color:#ff7373!important;}</style></head><body><main><divclass='ui grid internally celled'><divclass='row'><divclass='eleven wide column'id='editor'><divclass='ui labels blue'id='editor-controller'><divclass='ui label pointing below'>全テーブル
             </div><aclass='ui label'target='_blank'href='https://chrome.google.com/webstore/detail/html-elements-screenshot/mckfdaahjhmnchjihljdiakamamondld?hl=ja'><iclass='icon file-image'></i><divclass='ui detail'>PNG</div></a><aclass='ui label'target='_blank'href='https://chrome.google.com/webstore/detail/download-table-as-csv/jgeonblahchgiadgojdjilffklaihalj?hl=ja'><iclass='icon file-csv'></i><divclass='ui detail'>CSV</div></a><divclass='ui label error-message'v-if='hasErrSql2json'>
                {{err.message}}
             </div></div><divclass='ui segment fitted'id='editor-view'><codemirrorref='myCm'v-model='content'></codemirror></div></div><divclass='five wide column'id='viewer'><divref='models'v-for='(obj,n) in json'><modelv-model='json[n]'></model></div></div></div></div></main></body></html><templateid='model'type='text/x-template'><divv-ui><divclass='ui divider horizontal'>
       {{table.name}}
    </div><tableclass='ui table attached top single line unstackable celled fixed green'><thead><th></th><th></th><th></th><th></th><th></th></thead><tbody><templateref='models'v-for='(obj,i) in table.columns'><!-- ここ修正 --><trv-if='hasName(obj)':class="[{'positive':highlight[obj.name]}]"@dblclick='highlightRow(obj)'><td><span>{{getName(obj)}}</span></td><td><span>{{getDataType(obj)}}</span></td><td><span>{{getDataTypeParam(obj)}}</span></td><td><span><templatev-if='getNullType(obj)'><iclass='icon check'></i></template></span></td><td><span><templatev-if='getAutoIncrementType(obj)'><iclass='icon check'></i></template></span></td></tr></template></tbody></table></div></template><!-- native:code-mirror --><script src='js/native/code-mirror/5.49.1.min.js'></script><script src='js/native/code-mirror/addon-5.49.1.min.js'></script><script src='js/native/code-mirror/mode-5.49.1.min.js'></script><!-- native:sql2json --><script src='js/native/lodash-4.17.15.min.js'></script><script src='js/native/nearley/2.19.0.min.js'></script><script src='js/native/nearley/grammar.js'></script><!-- vue --><script src='js/vue/2.6.10.js'></script><script src='js/vue/code-mirror-4.0.6.min.js'></script><script>Vue.directive('ui',function(el,binding,vnode){el.classList.add(vnode.context.$options.name)})Vue.component('model',{template:'#model',model:{prop:'table',event:'input'},props:{table:{required:true,type:Object,default:{}}},data:function(){return{highlight:{}}},methods:{/*
        * 行色
        */highlightRow:function(obj){if(this.hasName(obj)){varname=obj.namevartoggle=(nameinthis.highlight)?!this.highlight[name]:truethis.$set(this.highlight,name,toggle)}},/*
        * 取得
        */getName:function(column){returncolumn.name},getNullType:function(column){if(this.hasNullType(column)){returncolumn.allow_null}},getDataType:function(column){if(this.hasDataType(column)){returncolumn.data_type.type}},getDataTypeParam:function(column){if(this.hasDataTypeParams(column)){returncolumn.data_type.params[0]}},getAutoIncrementType:function(column){if(this.hasAutoIncrementType(column)){returncolumn.auto_increment}},/*
        * 検証
        */hasAutoIncrementType:function(obj){return'auto_increment'inobj},hasDataTypeParams:function(obj){returnthis.hasDataType(obj)?'params'inobj.data_type:false},hasDataType:function(obj){return'data_type'inobj},hasNullType:function(obj){return'allow_null'inobj},hasName:function(obj){return'name'inobj}}})/*
    * view-source:https://codemirror.net/mode/sql/
    */Vue.use(VueCodeMirror,{options:{scrollbarStyle:'simple',theme:'default',mode:'text/x-mysql',firstLineNumber:1,tabSize:2,indentUnit:2,matchTags:{bothTags:true},htmlMode:true,autoCloseTags:true,foldGutter:true,lineNumbers:true,lineWrapping:true,styleActiveLine:true,styleActiveSelected:true,extraKeys:{'Ctrl-A':'autocomplete','Ctrl-Q':function(cm){cm.foldCode(cm.getCursor())},'F11':function(cm){cm.setOption("fullScreen",!cm.getOption("fullScreen"))}}}})newVue({el:'main',data:{err:{message:'',line:0,col:0},json:[],content:`
CREATE TABLE action_protocol (
  id int(11) NOT NULL AUTO_INCREMENT,
  createdbyuserkey varchar(40) NOT NULL DEFAULT '',
  userkey varchar(40) NOT NULL DEFAULT '',
  dt_created datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  servicekey varchar(40) NOT NULL DEFAULT '',
  information text NOT NULL,
  objectkey varchar(40) NOT NULL DEFAULT '',
  action varchar(50) DEFAULT '',
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE crm_reports (
  id int(11) NOT NULL AUTO_INCREMENT,
  entrykey varchar(40) NOT NULL,
  userkey varchar(40) NOT NULL,
  reportname varchar(255) NOT NULL,
  description varchar(255) NOT NULL,
  tablekey varchar(40) NOT NULL,
  dt_created datetime NOT NULL,
  dt_start datetime NOT NULL,
  dt_end datetime NOT NULL,
  date_field varchar(100),
  displayfields text NOT NULL,
  specials text NOT NULL,
  interval varchar(255) NOT NULL,
  filter text NOT NULL,
  defaultreport int(11) NOT NULL DEFAULT '0',
  basedonaddressbook int(11) NOT NULL,
  allow_select_fields int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE adminactions (
  id int(11) NOT NULL AUTO_INCREMENT,
  dt_created datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  userkey varchar(50) NOT NULL DEFAULT '',
  urlvariables text NOT NULL,
  formvariables longtext NOT NULL,
  resellerkey varchar(50) NOT NULL DEFAULT '',
  companykey varchar(50) NOT NULL DEFAULT '',
  href text NOT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

       `},watch:{content:{/*
          * 監視(入力)
          */deep:true,handler:function(newSQL,oldSQL){ /*
            * 保存
            */localStorage.setItem('cache',this.content)/*
           * 解析
           */varself=thisvareditor=self.$refs.myCm.codemirror/*
           * 保存間隔は850ms
           */varprocessing=_.throttle(function(){// 消去:前回のエラーeditor.removeLineClass(self.err.line,'wrap','error-line')try{// 変換self.sql2json()// 変換:正常self.err.message=''}catch(exception){// 取得:エラーの情報と内容varerrInfo=exception.message.split('\n')[0]varerrContent=exception.message.split('\n')[2]// 整形:エラーとして表示するメッセージself.err.message=errInfo+':'+errContent// 取得:エラーの発生した行と列(https://www.regextester.com/97589 "Syntax error at line 111 col 1:: test")self.err.line=parseInt(errInfo.match(/line\s[0-9]+/g)[0].replace('line ',''))-1self.err.col=parseInt(errInfo.match(/col\s[0-9]+/g)[0].replace('col ',''))// 追加:今回のエラー(https://codemirror.net/doc/manual.html#removeLineClass)self.$refs.myCm.codemirror.addLineClass(self.err.line,'wrap','error-line')}},850)/*
           * 処理
           */processing()/*
           * 表示
           */console.dir(this.json)}}},computed:{hasErrSql2json:function(){returnthis.err.message.length>0}},methods:{init:function(){if('cache'inlocalStorage){this.content=localStorage.getItem('cache')}},sql2json:function(){this.json=newnearley.Parser(grammar).feed(this.content).results[0]}},created:function(){this.init()this.sql2json()}})</script>

備考

CODE-MIRRORはmode/, addon/ とか別個に読み込まずにモジュール事に全ての*.jsをuglifyjs-folder使って1ファイルに纏めてる。SQL以外にも何かできたらええよな。というお話でしたとさ。


vhと%の違い

$
0
0

※主に自分の振り返り用です。

クレジットカード登録画面の下部に空白が生じるのをなんとかしたい。
写真ではわかりにくいですが、黄色で囲んだところに生じている空白を
無くしたいと思い奮闘しました。

スクリーンショット 2020-09-23 10.21.22.png

いろいろ調べて、htmlやbodyに

height: 100%;

を当てる方法を試したところ、他のページのビューにも影響が出てしまい
この方法は断念。。。

このあと2時間ほど奮闘しましたが、
card_addクラスに

height: 100vh;

これであっさり解決。

要素の高さ指定で%とvhの違いがよく理解できていなかったので
ここにたどり着くのに時間がかかったようです。

vhと%の違い

【vh】
ページの表示領域に依存する。

height: 100vh;

と指定すれば、高さがページの表示領域いっぱいに表示される

【%】
親要素に依存する。

height: 100%;

と指定すれば親要素の大きさまで表示される。

【初心者でもわかる】CSSだけ。カーソルを載せたら補足説明のミニモーダルを出す方法

$
0
0

どうも7noteです。?マークにカーソルを当てると、補足説明が出るやつ作ります。

こういうやつ、作ります。

sample.png

最初はdisplay: none;で非表示にしておき、hover時に表示するような作りにします。

作り方

1) ハテナ(?)を用意。

index.html
<divclass="box"><divclass="ques">?</div></div>

簡単に装飾を入れます。

style.css
.ques{background:#EEE;/* 背景色に灰色を指定 */width:1.5em;/* 横幅を1.5文字分にする */line-height:1.5em;/* 文字が上下中央にくるように工夫 */text-align:center;/* 文字が左右中央にくるように工夫 */border-radius:50%;/* 円形に変更 */}

今こんなかんじ↓
?.png

2) 補足説明のミニモーダルを作る。(動きはまだ。)

index.html
<divclass="box"><divclass="ques">?</div><!-- 以下の1行を追加。 --><divclass="ex">ここに補足説明文を入れる</div></div>
style.css
.box{position:relative;/* 表示位置の基準値とする */}.ex{position:absolute;/* boxを基準にする */top:0;       /* 自由に調整 */left:30px;     /* 自由に調整 */color:#fff;/* 文字色を白にする */font-size:14px;background:rgba(0,0,0,0.5);/* 黒バックを半透明にするため、rgbaで指定 */padding:2px5px;/* 余白を少々 */}

3) hover時の動きを入れる。

style.css
.ques:hover{cursor:pointer;/* カーソルを指の形にする。 */}.ex{display:none;/* 最初は非表示にする。 */}.ques:hover+.ex{display:block;/* quesの上にカーソルが乗っている時だけ表示 */}

+α)ふわっと出したい場合は、以下のように変更。

.ex{display:none;/*↓に変更*/opacity:0;transition:all.3s;}.ques:hover+.ex{display:block;/*↓に変更*/opacity:1;}

完成!

movie.gif

まとめ

結構簡単に作れます。
表示位置だけtopとleftでpx指定しているので、実際に運用レベルで使うには表示位置の指定方法は少してを加えたほうがよいかも。
ハテナ(?)の位置がかわらなければ今回の方法で十分対応可能。

おそまつ!

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

プログラミング初めて3ヶ月

$
0
0

はじめまして!
shikichanと言います。

未経験でWEB系企業に転職する為、6月半ばからプログラミングを始めました!
まずは、progateでHTML&CSSを始めました。初学者にはこれがいいそうです。
54798AC7-69BB-4987-999F-81D39159C1C7_1_201_a.jpeg
これは7月途中のものです。ボチボチ受講しています。

1ヶ月半でだいたいlev.200までいけました。そろそろアウトプット出さないといけないと思い、8月からポートフォリオの作成に取り掛かっています。

これからも引き続きよろしくお願いします。

CSSのみでタブとタブコンテンツの表示・非表示を切り替える

$
0
0

HTMLコーダーさんのJSを使わないタブ切り替えが、シンプルな実装で素晴らしかったので忘備録的にメモ。

概要

  • タブは『インプットボックス』+『ラベル』を使用
  • コンテンツエリアは常時非表示にしておく
  • コンテンツエリアは選択されたときのみ表示する

サンプルコード

動かしてないので不具合あるかもですが、こんな感じでした。

<divclass="tabs"><!-- タブ --><inputid="tab_1"type="radio"name="tab"checked=""><labelclass="tab_label"for="tab_1">月別</label><inputid="tab_2"type="radio"name="tab"><labelclass="tab_label"for="tab_2">週間別</label><inputid="tab_3"type="radio"name="tab"><labelclass="tab_label"for="tab_3">曜日別</label><divclass="tab_content"id="content_1">コンテンツ1</div><divclass="tab_content"id="content_2">コンテンツ2</div><divclass="tab_content"id="content_3">コンテンツ3</div></div>
input[name="tab"]{display:none;}.tabs{width:100%;}.tab_label{border-top:1pxsolid#999999;border-bottom:1pxsolid#999999;}.tabsinput:checked+.tab_label{border-bottom:2pxsolid#55C501;}#tab_1:checked~#content_1,#tab_2:checked~#content_2,#tab_3:checked~#content_3{display:block;}.tab_content{display:none;}

Tyハロトレ26日目

$
0
0

CSS

タイピング練習で月一回提出

P検ーマナビジョン

疑似要素

<p><ahref="#">未閲覧は青色</a></p><p><ahref="#">閲覧済みは灰色</a></p><p><ahref="#">マウスポインタが重なっている</a></p><p><ahref="#">クリックされている(押されている)間は赤色</a></p>

疑似要素2.png

優先順位

読み込まれる順番で最新のものが優先される
外部CSS < ヘッド < 本文

!important

index.html
<pstyle="color: blue;">山田</p>

 !importantは、index.htmlに書いたCSSよりも優先されます。
important2.png

font-family

font-family3.png

text-align

text-align.png

vertical-align

vertical.png

line-height

line-height.png

おうちをイラレで描く

オブジェクト2.png

オブジェクト>パス>平均
平均2.png

連結2.png

全てを表示2.png

平行四辺形2.png

尖り2.png

はさみ、消しゴム、ナイフツール

hasami2.png

Viewing all 8492 articles
Browse latest View live


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