✅️当日の予定をタイムラインに常時表示するUserScriptが#editorに被らないようにする
画面幅が狭い時、当日の予定をタイムラインに常時表示するUserScriptが#editorの上にかぶさってしまい、編集しづらい
不便
z-indexの都合でカーソルだけは見えるので、そこからインデントの位置を推測して書くしかない
ちょうどここのインデントの推測に失敗してるtakker.icon
隠れている文字は自分で予想する
テロメア(Scrapbox)はクリックできなくなるので、timelineを一旦閉じないと操作不能
流石にストレス溜まってきたので直したい
編集のために一旦閉じてしまうと、開き直すのを忘れて、timelineが目に入りにくくなるデメリットもある
常時視界に入れた状態にしたい
修正方法
.page-columnのgrid-template-columnsを書き換えて、当日の予定をタイムラインに常時表示するUserScript用のスペースを確保する
修正開始
まずは.page-columnのapp.cssを調べる
code:css
.page-column {
display: grid;
align-items: flex-start;
flex-wrap: nowrap;
justify-content: center;
gap: 10px;
grid-template-columns: 46px minmax(200px, 960px) min-content;
grid-template-areas: "spacer page menu";
margin-top: 16px
}
@media(991px < width) {
.page-column: has(.page-sidebar) {
grid-template-columns:minmax(200px, 3fr) minmax(170px, 1fr) min-content;
grid-template-areas: "page sidebar menu"
}
}
@media(min-width: 768px)and (max-width: 991px) {
.page-column {
grid-template-columns:minmax(200px, 960px) min-content;
grid-template-areas: "page menu"
}
}
@media(max-width: 767px) {
.page-column {
display:flex
}
}
767px未満だとflex box modelに戻っちゃうのか。知らなかったtakker.icon
grid-template-columns: 1fr; grid-template-areas: "page";に置き換えても、特に問題なさそう
grid-template-columnsとgrid-template-areasを書き換えれば解決しそう
各画面幅ごとにcss変数を用意する
code:style.css
.page-column {
grid-template-columns: var(--page-column-columns, 46px minmax(200px, 960px) min-content);
grid-template-areas: var(--page-column-areas, "spacer page menu");
}
@media(991px < width) {
.page-column:has(.page-sidebar) {
grid-template-columns: var(--page-column-columns-sidebar, minmax(200px, 3fr) minmax(170px, 1fr) min-content);
grid-template-areas: var(--page-column-areas-sidebar, "page sidebar menu");
}
}
@media(min-width: 768px) and (max-width: 991px) {
.page-column {
grid-template-columns: var(--page-column-columns-768, minmax(200px, 960px) min-content);
grid-template-areas: var(--page-column-areas-768, "page menu");
}
}
@media(max-width: 767px) {
.page-column {
display: grid;
grid-template-columns: var(--page-column-columns-767, 1fr);
grid-template-areas: var(--page-column-areas-767, "page");
}
}
問題なく動きそう
一部の幅で画面幅が広いとき無効化されたinfoboxを消すUserCSSに上書きされる
上のstyle.cssを.page-columnのgrid layoutを調整できるようにするUserCSSに分離し、画面幅が広いとき無効化されたinfoboxを消すUserCSSをそのUserCSSに依存させるようにしよう
CSS変数を設定する
code:setting.css
.page-column {
--page-column-columns: 100px minmax(200px, 960px) min-content;
--page-column-areas: "spacer page menu";
--page-column-columns-sidebar: 100px minmax(200px, 3fr) minmax(170px, 1fr) min-content;
--page-column-areas-sidebar: "spacer page sidebar menu";
--page-column-columns-768: var(--page-column-columns);
--page-column-areas-768: var(--page-column-areas);
--page-column-columns-767: 100px 1fr;
--page-column-areas-767: "spacer page";
}
いいかんじ
https://gyazo.com/8d64e6068ea9a03c2cc89d1ccb0893b8
修正したい点
画面幅が広い時、まず右端が100pxになるまで余白を分配し、その後両端に余白を分配するようにしたい
code:wide.css
.page-column {
--page-column-columns: 100px minmax(200px, 960px) min-content 1fr;
--page-column-areas: "spacer page menu spacer2";
}
.app .container {
container-type: inline-size;
}
@container (width > 1236px) { /* .containerの中身の長さがwidthになる */
.page-column {
--page-column-columns: minmax(200px, 960px) min-content;
--page-column-areas: "page menu";
--page-column-columns-sidebar: minmax(200px, 3fr) minmax(170px, 1fr) min-content;
--page-column-areas-sidebar: "page sidebar menu";
}
}
画面幅ではなく、要素幅に応じて切り替えたい
幅の計算がむずいので
@containerを使うか
@container - CSS: カスケーディングスタイルシート | MDN
画面幅が767px以下のときは、当日の予定をタイムラインに常時表示するUserScriptを60pxにする
$ --page-column-columns-767: minmax(60px, calc(100% / 767 * 100)) 1fr;
draft2
https://gyazo.com/27826ff2c498a924c6120b07c3f8bfaf
code:draft2.css
.page-column {
--page-column-columns: 100px minmax(200px, 960px) min-content 1fr;
--page-column-areas: "spacer page menu spacer2";
--page-column-columns-sidebar: 100px minmax(200px, 3fr) minmax(170px, 1fr) min-content;
--page-column-areas-sidebar: "spacer page sidebar menu";
--page-column-columns-768: var(--page-column-columns);
--page-column-areas-768: var(--page-column-areas);
--page-column-columns-767: minmax(60px, calc(100% / 767 * 100)) 1fr;
--page-column-areas-767: "spacer page";
}
.app .container {
container-type: inline-size;
}
@container (width > 1236px) { /* .containerの中身の長さがwidthになる */
.page-column {
--page-column-columns: minmax(200px, 960px) min-content;
--page-column-areas: "page menu";
}
}
問題なさそう
infoboxがあるページの挙動も確認する
infoboxの幅だけ、@containerの値を変えればよさそうだ
いや、このままでいいや
#editorが可変幅になるため、両隣に等しく余白を100pxまで分配するのがむずかしい
draft2で完成とする
当日の予定をタイムラインに常時表示するUserScriptの調整用UserCSS
画面幅が狭い時、.wedgetが60pxまで縮むようにする
code:css
.wedget {
max-width: 100px;
width: calc(100vw / 767 * 100 - 10px);
min-width: 60px;
}
11:19:00 https://github.com/takker99/takker-scheduler/pull/224
11:22:11 merged
11:26:11 https://github.com/takker99/takker-scheduler/pull/225
minified CSS反映ミス
11:38:54
まだミスってた
今度はimport-devで試したので、大丈夫だと思う
https://github.com/takker99/takker-scheduler/pull/226
11:50:33 テスト中
mobileでPageMenuを常時表示するUserCSSが、.pageスクロールといっしょに動いてしまうようになってしまった
position: fixedなのになぜ?
https://qiita.com/tiwu_dev/items/797459d9789db4379691
親要素でCSS transformしていると、位置の基準が親要素になってしまうらしい
でも今回はどこにもなさそう……
container-type: inline-sizeを削除したら直った
こいつが原因か
container-type
container-type: inline-sizeを親に指定したら子や孫要素でposition: fixedが使えない #CSS - Qiita
https://twitter.com/yuito_miki/status/1714080491085942914?s=20
@container使うのは諦めるか……
12:12:16 container-type: inline-sizeを外しても描画は崩れなさそう
じゃあこれでいいや
12:09:45 body:has(div[data-userscript-name="takker-scheduler/timeline-wedget"]) .page-columnのときだけCSS変数を書き換えるようにしようかな
いや、wedgetの開閉を検知できない。やめよう
修正しないこと
画面幅が広い時、当日の予定をタイムラインに常時表示するUserScriptが#editorから離れてしまう
https://gyazo.com/ee3178eee32b20b9fc760976fccd79dd
left: の設定に手間がかかるのでパス
takker.iconはそんなに大きな画面幅の端末を使っていないので、当分困らない
#2024-05-13 08:10:18