webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

Progateに出てくるHTML/CSSの文法まとめ

文法・テクニックまとめ

【目次】

  • 文法・テクニックまとめ
    • リストのドットをなくす
    • リスト含む要素の横並び
    • padding・marginの値の指定
    • border
    • 背景画像
    • 透明度
    • 文字間隔
    • ブロックスタイル
    • カーソル
    • 角丸
    • marigin: autoとtext-align: centerの使い分け
    • font-awesomeの使い方
    • 透過度(rgba)
    • アニメーション
    • 行の高さ
    • 線の太さ
    • position
    • カーソルの形
    • クリック時
    • クリック時に動くボタンのcss
    • 重なり
    • mediaクエリ
    • boxsizing
    • viewport
    • clear

リストのドットをなくす

li {
  list-style: none;
}

リスト含む要素の横並び

li {
  float: left (or right);
}
続きを読む

秘密のprivateと秘伝のprotected

Effective Rubyの勉強メモです。

オブジェクト指向はカプセル化によって公開するpublicメソッドと非公開なprivateメソッドを分けています。

最初の頃はすべて公開したら後で楽じゃないかって思っていたのですが、公開するものを制限することでテスト対象が減り、インターフェースをできるだけ変えないようにすることで修正範囲を狭くできるので、公開しないものはprivateにするようにしています。

さて、rubyでのprivateメソッドの定義は結構面白いです。

privateメソッドとして定義されたメソッドは明示的にレシーバを指定して呼び出すことができません。

privateメソッドとなるルールはこれ一つです。

単純なルールですが、確かにクラスの外からは呼び出せないのでカプセル化されています。

レシーバを指定できないので、クラスの中でもself.hogeみたいにselfを付けてしまうと呼び出せないですが、セッターメソッドの呼び出し以外はselfを付ける必要はないので不便もなさそうです。

続きを読む

あっ!UFO演算子!Comparableモジュールの実装方法をご紹介します。

Effective Rubyの勉強メモです。

13章はUFO演算子とComparableモジュールについてです。

この二つは以前記事にしたことがあるのでササっと流していきます。

www.uosansatox.biz

簡単に言うと、UFO演算子(<=>)を定義するだけでsortやminメソッドが使えるようになります。

UFO演算子は自由に実装していいわけではなく、次のルールを守る必要があります。

  • 比較できないときはnilを返す

  • レシーバ(演算子の左側)が小さいときは-1を返す

  • 逆にレシーバが大きいときは1を返す

  • 等しいときは0を返す

何をもって大きい小さい等しいのかは自分で決める必要があります。

続きを読む

4つもあるの!!Rubyの等値演算子を徹底解説

変数同士が等しいかどうかRubyで調べる手段をご存知でしょうか。

数値同士、文字列同士なら言わずと知れた==を使えばいいですね。ほかにもRubyにはeql?メソッドなどが存在します。

ですが、すべて同じ結果を返すわけではありません。何をもって等しいとするかの定義が少しずつ異なります。

"str" == "str" #=> true

"str".equal?("str") #=> false

そこで今回は4つの「等しい」について書いていきます。

equal?メソッド

equal?メソッドは比較する二つが全く同じオブジェクトであることをチェックします。

全く同じとは、参照しているオブジェクトが同じobject_idを持つかどうか、すなわち、ポインタが同じメモリ上のアドレスを指しているかどうかです。

続きを読む

名前の森で定数を見つける物語

Effective Ruby勉強メモです。

Rubyで大きなアプリケーションなどを作る場合には、どうしても既存クラスと同じ名前のクラスを定義したいときがあります。

以下のように書くとクラスを新しく定義しているかのように見えますが、実際には既存のArrayクラスを再オープンしてメソッドを追加してるだけにすぎません。

Rubyではクラスはミュータブル(可変)なのです。

class Array
  def print_first
    p first
  end
end

これでは思わぬ副作用をもたらしてしまいます。最悪、メソッドを完全に上書きしてしまいシステム全体に不具合が生じてしまいます。

そこで、新しくモジュールを定義し、その中でクラス定義をすることで既存のクラスと同じ名前の異なるクラスを定義することができます。これは名前空間と言われるテクニックです。

module Demo
  class Array
    def print_first
      p "first"
    end
  end
end

a = Demo::Array.new
a.print_first #=> "first"

呼び出す際はDemo::Arrayのようにモジュールを明示的に書くのが望ましいです。

呼び出すときにRubyがどのように定数を探すのかは後述します。

続きを読む

豚の角煮を作るときの下処理に効果があるか実験してみた

f:id:s-uotani-zetakansu:20180709205435j:plain

今回は珍しく料理ネタを書きたいと思います。

最近圧力鍋を購入してから、結構な頻度で豚の角煮を作っています。

いろんなレシピを見ながら味付けを変えたりしているのですが、意外と書かれていないのが、肉の下処理です。

主に臭みを取るのに酒や塩をかけたりするのですが、今回は塩に注目してみます。

肉に塩を振って置いておくと、徐々に中から水分が抜けていきます。水分が抜けると仕上がりがぱさぱさしそうなのですが、実は逆で、食品に塩を浸透させることで結合水(食品の成分と結びつく水分で、蒸発したり抜けたりしない)が増え仕上がりがジューシーになります。

カラカラの干物を焼くとしっとりと仕上がるのは干す前に塩漬けにすることで結合水が増えているためです。

実験

そこで、実際に塩を振っておくことでジューシーに仕上がるのか比較実験してみました。

続きを読む

即席クラス。構造化データの表現にはStructを使おう

配列ではなく、キーと値のペアで構成されているデータを扱うには、普通ハッシュを使うかと思います。

それ自体は間違いではありませんが、ハッシュにしてしまうとゲッターメソッドが使えず、オブジェクトかハッシュかを意識しながら扱わなくてはいけません。

要するに、クラスにするまでもない一時的なデータでもオブジェクトのようにゲッターメソッドを使いたいのです。

このような場合にはStructクラスを使うときれいに書くことができます。

続きを読む