<title>テキストテキストテキストテキストテキストテキスト</title>
AI曰く28~35文字程度が目安?他のサイトを見るとPCは30文字、スマホだと幅375pxで37文字だった。(英語混じりのやつで)
なので、30文字に収めるって事を意識すべきかと思われる。
<meta name="description" content="テキストテキストテキストテキストテキストテキスト">
検索結果に表示されるのは、PCだと130文字、スマホだと60~90文字とのこと、出典により差があるので、最低60文字程度で考えるべき?
→デバイス幅により変動する、vw375pxで見た所日本語で66文字だった、60文字程度を基準に考えるべきか。
『Open Graph Protocol』の略、SNSにURLが投稿された時に表示されるタイトル、画像、説明文を表示する為に記述。
<meta property="og:url" content="ページのURL"/> <meta property="og:type" content="ページの種類(website または blog または article)"/> <meta property="og:title" content="ページのタイトル"/> <meta property="og:description" content="ページの概要"/> <meta property="og:site_name" content="ページのサイト名"/> <meta property="og:image" content="サムネイル画像のURL"/>
Twitter用には上記に加えて他に設定出来るタグがある
<meta name="twitter:card" content="カードの種類"> <meta name="twitter:site" content="@ユーザー名"> <meta name="twitter:title" content="ページのタイトル"> <meta name="twitter:description" content="ページの概要"> <meta name="twitter:image" content="サムネイル画像のURL">
twitter:cardの種類は『summary』と『summary_large_image』の2つ、
twitter:imageの画像サイズについてはSummaryの場合は『1:1で144 × 144px以上』、『summary_large_image』の場合は、『1.91:1で600 × 314px以上』
→800 × 800pxと1200 × 627pxとかで作ったほうがいいかも。
運用しているサイトのURLをノートに貼ったところ、でOGPタグが読み込まれず、トラブル。
原因は、海外からのサーバーのアクセスを遮断してた事によるもの。
OGPタグはクローラーで読みにくるものなので、アクセスを遮断してると読み込みがされなくなってしまう。
解決方法としては、.htaccessに海外アクセスを除外する設定を書き込んでいたので、そこに『notebot』からのアクセスを許可する記述『SetEnvIf User-Agent "notebot" allowbot』を追記したらいけた。
前後の設定の流れがあるから留意!
######### 海外IPを許可しないための設定 #########
### 検索エンジンをまとめて許可するためにenv化する (Must)
SetEnvIf User-Agent "Googlebot" allowbot
SetEnvIf User-Agent "msnbot" allowbot
SetEnvIf User-Agent "bingbot" allowbot
SetEnvIf User-Agent "Slurp" allowbot
SetEnvIf User-Agent "notebot" allowbot
### いったん全てを拒否する (Must)
order deny,allow
deny from all
### 検索エンジンからのアクセスを許可 (Must)
allow from env=allowbot
### SearchConsoleのプロパティが確認出来るためにの対策 (使っていなければ不要)
### https://support.google.com/webmasters/answer/80553?hl=ja
allow from googlebot.com
allow from google.com
order deny,allow
deny from all
allow from 1.0.16.0/20
........
基本の形は下記?
<link rel="icon" href="favicon.ico"> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
一般的なfaviconとスマホ用のfaviconで2つ。
| サイズ | 用途 |
| 「16px × 16px」 | ブラウザファビコン |
| 「32px × 32px」 | ブックマークやショートカットファビコン |
| 「96px × 96px」 | デスクトップショートカットファビコン |
| 「180px × 180px」 | Apple デバイス(iPad)用ファビコン |
| 「192px × 192px」 | Chrome 推奨ファビコンサイズ |
| 「256px × 256px」 | Android ホーム画面表示用ファビコン |
バキッと用意するならこれかな?
<link rel="icon" href="/favicon.ico" sizes="32x32"> <link rel="icon" href="/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="/apple-touch-icon.png">
普通のfaviconは32px×32px、『apple-touch-icon』は180px×180pxで製作する。
2025年10月の数字まとめ
↓参考URL
https://gs.statcounter.com/screen-resolution-stats/desktop/japan
スマホ375と390が横並びトップ的な?ただ、他とのバランスを考えると、375~415位でしっかり表示させる感じで作るのがよろしいかと?リキッドリキッド
割合から見ると、どちらを優先するともなくPC、スマホ両方のシェアが同等なので同様に対応すべきっぽいように見えるが、自分が作るサイトを見る人の属性を考えて対応すべき。
日本のブラウザシェア率ではレガシーなブラウザはもう完全に無視してもよかろうという状況、というかすでに皆気にはしてないだろうね、うん。
参考リンク:https://gs.statcounter.com/browser-market-share/all/japan
スマホ(携帯電話)が圧倒的みたいだぁね。
何か気が付かないうちにめっちゃ成長してた…
2023/04/05にChromeがサポートし始めたらしい。
scssで基本メインで使ってたのがネストの機能だから、もう要らんやん…、sass…。
という事でこのメモもscssを捨てた。元々機能を使ってなかったし。
hoge {
hagu {
margin-bottom: 0;
margin-top: 15px;
&:first-child {
margin-top: 0;
}
}
fuga {
margin-bottom: 0;
&:before {
content: 'ー';
color: #ccc;
padding-right: 0.2em;
}
}
}
いわゆるモダンブラウザでは全部対応できてるので心配なく使って良さそうだ。
参考リンク:https://caniuse.com/css-nesting
参考記事:https://coliss.com/articles/build-websites/operation/css/css-nesting.html
えぇ~、めっちゃええやん…
※スコープがあるよ
/* どこでも使用可能 */
:root {
--text-color: #444;
}
/* セレクタ内で使用可能 */
.hoge {
--hoge-color: red;
}
/* どこでも使用可能 */
:root {
--text-color: #444;
--margin: margin;
}
.hoge {
color: var(--text-color);
}
/* プロパティ名を変数にすることはできない */
.fuga {
var(--margin): 30px;
}
:root {
--gradient-start-color: #e66465;
--gradient-end-color: #9198e5;
--bg-gradient: linear-gradient(var(--gradient-start-color), var(--gradient-end-color));
}
.hoge {
background: var(--bg-gradient);
}
const hogeStyleVal = hogeStyle.getPropertyValue('--text-color');
console.log(hogeStyleVal);
いい加減グリッドレイアウトと向き合おう、目を背けてばかりではいかん。
縦横でグリット状のレイアウトが作れちゃうよ~ってやつ、そのまんま言ってるだけやん。
スクロール位置をパシッと決めることが出来る…?cssらしいです。
/* スナップなし */
scroll-snap-type: none;
/* スナップ軸のキーワード値 */
scroll-snap-type: x;
scroll-snap-type: y;
scroll-snap-type: block;
scroll-snap-type: inline;
scroll-snap-type: both;
/* スナップの厳格さに関するオプションのキーワード値 */
/* 任意の mandatory | proximity*/
scroll-snap-type: x mandatory;
scroll-snap-type: y proximity;
scroll-snap-type: both mandatory;
「mandatory」が厳格、「proximity」はちょっとゆるめ
「scroll-snap-align: center;」はスナップする位置で、start、center、endがある
.css_test.test251212_01 {
.section {
overflow-x: auto;
scroll-snap-type: x mandatory;
-webkit-overflow-scrolling: touch;
scroll-padding: 1rem;
white-space: nowrap;
}
.section__item {
display: inline-block;
width: 400px;
height: 150px;
margin-right: 15px;
scroll-snap-align: center;
background-color: #ccc;
}
}
<div class="css_test test251212_01">
<div class="section">
<div class="section__item">Item 1</div>
<div class="section__item">Item 2</div>
<div class="section__item">Item 3</div>
<div class="section__item">Item 4</div>
<div class="section__item">Item 5</div>
</div>
</div><!-- .css_test -->
おお…、ピタピタと動く…、すごい…
疑似クラスの一種、何回か見たことある
()の中で指定した子孫要素を持つ親要素に対してスタイルを適用出来る。
/*
img要素を子孫に持つ
a要素のカラーを変更
*/
a:has(img) {
color: red;
}
これ欲しい時、ある気はするんだけど、本能でそうなるシチュエーションを避けてしまう節があるからなぁ…。
@starting-styleは、display: none;が指定されている要素に対して、cssプロパティの開始値を定義する為のプロパティ
display: none;があるとtransitionが効かない為。
<style>
.css_test.test251212_02 {
/* 基本スタイル */
dialog {
padding: 0;
width: 300px;
height: 300px;
position: fixed;
top: 50%;
left: 50%;
margin-left: -150px;
margin-top: -150px;
}
/* ここから本番 */
/* トランジションと透過を設定 */
dialog#test251212_02_modal02 {
transition: opacity 1s;
}
/* 開始時のopacityを定義、これでdisplay: none;からblockに変わった時の値が定義できる */
@starting-style {
dialog#test251212_02_modal02 {
opacity: 0;
}
}
/*
この時、表示される時には効くけど、消えるときには効かない。
なので、次に使うのが「transition-behavior」の「allow-discrete」。
displayやoverlay等の「離散プロパティ(?)」に対してトランジションを効かせる
*/
dialog#test251212_02_modal03 {
/* 初期状態のopacityを定義しておかないとtransitionした時に
戻って来る値がないので正常動作しない */
opacity: 0;
transition:
/* 各transitionにallow-discreteを効かせる
「overlay」はTop Layerに表示されているか否かを示すプロパティ、
これもスタイルを付けておかないと、closeし始めた瞬間にTop Layerじゃ
なくなるのでtransitionし始めた時に他の要素の裏に隠れたりする。 */
opacity 1s allow-discrete,
overlay 1s allow-discrete,
display 1s allow-discrete;
}
dialog#test251212_02_modal03[open] {
/* transitionした先のスタイル */
opacity: 1;
}
@starting-style {
dialog#test251212_02_modal03[open] {
/* openになった瞬間に適用される@starting-style */
opacity: 0;
}
}
/* 「::backdrop」にも同様にスタイルを付けておくと、
背景の薄黒いのも綺麗に表示/非表示するよ */
}
</style>
<dialog id="test251212_02_modal">
<p>なしパターン</p>
</dialog>
<button id="test251212_02_btn" type="button">なしパターン</button>
<script>
/* aパターン */
const modal = document.querySelector('#test251212_02_modal');
const modalBtn = document.querySelector('#test251212_02_btn');
modalBtn.addEventListener('click', (event) => {
modal.showModal();
});
modal.addEventListener('click', (event) => {
modal.close();
});
</script>
<dialog id="test251212_02_modal02">
<p>ありパターン1</p>
</dialog>
<button id="test251212_02_btn02" type="button">ありパターン2</button>
<script>
/* bパターン */
const modal02 = document.querySelector('#test251212_02_modal02');
const modalBtn02 = document.querySelector('#test251212_02_btn02');
modalBtn02.addEventListener('click', (event) => {
modal02.showModal();
});
modal02.addEventListener('click', (event) => {
modal02.close();
});
</script>
<dialog id="test251212_02_modal03">
<p>ありパターン3</p>
</dialog>
<button id="test251212_02_btn03" type="button">ありパターン3</button>
<script>
/* cパターン */
const modal03 = document.querySelector('#test251212_02_modal03');
const modalBtn03 = document.querySelector('#test251212_02_btn03');
modalBtn03.addEventListener('click', (event) => {
modal03.showModal();
});
modal03.addEventListener('click', (event) => {
modal03.close();
});
</script>