viewportを理解する
はじめに
HTMLのviewportの理解が曖昧で、コピペでやり過ごしていました。
viewportは例えば以下のようなものです。
<meta name="viewport" content="width=device-width,initial-scale=1">
この記事では、viewportの意味を解き明かして行きたいと思います。
まずは基本
viewportは表示領域のこと<meta name="viewport" content="width=480">とすると、幅480pxとして仮想的なモニターができるイメージdocument.documentElement.clientWidthも480pxになるように計算される- mediaクエリも480pxとして判定される
- ブラウザはこの仮想的なモニターをブラウザサイズに幅が合うように表示する
<meta name="viewport" content="width=device-width">と指定した場合はブラウザの幅が使用される- 解像度は考慮されない
設定できる値の説明
width
表示領域の幅を指定できる。width=device-widthで実際のデバイスの幅と一致させられる。
initial-scale
初期のズーム倍率。minimum-scale~maximum-scaleを指定することで、ズーム範囲を指定できる。
minimum-scale: 0~10 の範囲、初期値は 0.25maximum-scale: 0~10 の範囲、初期値は 1.6
user-scalable
- ズームの操作を許可するか、しないかを指定する。
注意したいところ
- モバイル端末で有効。ブラウザへのアドバイスとして使用される
- 指定しないと「ウィンドウ幅によってページコンテンツが隠されない最小の横幅」か「デフォルト値・980px」
ではどうすべきか
全ブラウザで、統一した表示をしたければwidthを指定する。
<meta name="viewport" content="width=360,initial-scale=1">
デバイスの画面サイズに応じてコンテンツの大きさを変えたい場合は、device-widthを指定する。
<meta name="viewport" content="width=device-width,initial-scale=1">
参考
Cookieのパラメータ整理
はじめに Cookieの設定をする時に、意外と色々パラメータがあります。 何度も調べては忘れるので、ここでわかりやすくまとめて調べるのは最後にしたいと思います。 パラメータの種類 GoogleChromeのDeveloperToolで調べると、以下のパラメータがあります。 Name Value Domain Path Expires/Max-Age Size HttpOnly Secure SameSite Sameparty Priority これらを対象にそれぞれのパラメータの意味と、設定される値について見ていきます。 Name/Value 早速説明を省きます。 Cookie名とCookieの値です。 Expires/Max-Age Cookieの有効期限です。 指定しない場合は、セッション終了までです。 Max-Ageの単位は秒です。 Domain どのホストの場合にCookieを送信するかを指定します。 デフォルトはCookieを保存したページのホストと同じページにアクセスした場合だけCookieを送信します。 例えば、example.com/page.htmlにアクセスした時に保存されたCookieは、同じくexample.com のホストのページにアクセスした場合に送信されます。 この時、サブドメインへアクセスしてもCookieは送信されません。 あえてDomainを指定し場合は、サブドメインを含めてCookieを送信できます。 Domainの設定は以下のように行います。 document.cookie = 'A=B; Domain=example.com'; Path PathはどのパスでCookieを送信するかを許可します。 Secure Httpsの通信でのみ使用できる。 document.cookie = 'A=B; Secure'; HttpOnly JavaScriptで生成されたCookieはこのフラグを含むことができない フラグを含む場合は、JavaScriptで取得もできない document.cookie = 'A=B; HttpOnly'; HttpとかHttpsとかに関連するCookieかと思うような名前ですが、Httpリクエスト経由でしか使用できないという意味のようですね。 SameSite 別サイトに遷移する時に、遷移先サイトのCookieを送信するかどうかを設定できます。 設定可能な値は、以下のStrict、Lax、Noneの3つです。 遷移元をAサイト、遷移先をBサイトとしましょう。 AサイトからBサイトへ遷移する時、BサイトのCookieが送信されるか設定によって以下のようになります。 Strict:BサイトのCookieを送信しない Lax:GETやHEADなど、安全なメソッドの場合だけ送信する None:制限なくBサイトのCookieを送信する Chromeでは、SameSiteが設定されていない場合は、Lax扱いになります。 また、Noneを指定する場合は、同時にSecrue属性が必須です。 つまり、制限なく別サイトにCookieを送信するには、HTTPS通信でないといけないということになります。 参考 Cookieで指定可能な属性の種類と設定方法 ...
CSSのBEMの命名規則を整理
はじめに **BEM(Block-Element-Modifier:ベム)**の理解が曖昧だったので、整理します。 BEMとは HTMLの要素をBlock、Element、Modifierで分けて命名すること。 Blockはパーツ自体を表す Elementはパーツの部品 Modifierはパーツの状態 Block__Element--Modifier の形式で書く 各名前が複数単語の場合は、-(ハイフン)で繋ぐ BEMのメリデメ BEMの特徴は、明確な要素を指定したCSSできようですが、以下のメリデメがあります。 メリット CSSの他のパーツへの影響を考えなくてよい セレクタを入れ子にしない => 優先度問題を解消 広く使われている デメリット class名が長くなる 全ての要素にclass名を付けるので面倒 Bootstrapと相性が悪い(BootstrapはOOCSSを採用している) 例 logo__company-name この例では、Block__Elementの形式で、Modifier指定していません。 .article-list { width: 100%; &__article-title { font-size: 20px; } } SASSだと、Elementを&で追加する。 .article-list { width: 100%; &__article-title { font-size: 20px; &--red { font-size: 20px; color: red; } } } Modifierも&で追加する。 命名規則がわかっていると、CSSから意図が汲み取れるので読みやすくなります。 参考 class名の命名規則BEMのルールとカスタマイズ ...