日曜日, 5月 25, 2025
No menu items!
ホーム ブログ ページ 3366

ボタン、モード、およびまだ少しトリッキーなレイアウトの状況 – Codepen


ボタンにインスピレーションが必要な場合は、間違いなくLucas Bonomi’sをチェックしてください Buttons.Cool。これは、美しいボタンのためだけに、1回限りのサイトよりも優れています。

しかし、それは単なるデザインギャラリーではなく、フロントエンドの開発者がコードを見ることができ、ページでライブレンダリングされていることを確認できるという点で作られています。もちろん、最良の部分は、すぐに調べて調べてみることができることです。

ように見えます それは提出を取っています


どうやって 難しい ダークモードは引きオフしていますか?またはおそらくもっと正確には、どのくらい難しいか 2番 カラーモード?私たちの中には、ダークモードファーストウェブサイトを持っている人もいます、 わかった。

私は思った Wes Bosは質問をよく言いました

ライト/ダークモードを実装した人への質問:変数を交換するだけで、カスタムコードはいくらで、エッジケースになりますか?

私は答えました:Fidny Biddy。

私たちが取り組んでいるCodePenの新しいバージョンでは、サイト全体のテーマ設定(選択したテーマを強調表示する構文から分離されています)があります。 Codepenはかなり複雑なサイトであり、CSSカスタムプロパティ設定のかなりの部分が含まれていました。したがって、ある意味では、ほとんどが「変数を交換する」だけでしたが、それらの変数のかなりの数が存在します という理由だけで さまざまなカラーモードのもので、そのほとんどは「エッジケース」と呼ばれるかもしれません。私たちにとって:200の南100の北。これは挑戦的ですが、最終的には公正なアプローチであることがわかりました。

時々、あなたはその方法のアイデアを見ているのを見ることがあります 単純 それ できた なれ。たとえば、彼はAkhil Arjunです それは1行で行うことができると言っています

html[theme="dark-mode"] {
    filter: invert(1) hue-rotate(180deg);
}

そして、ここにマッズ・ストウマンがいます まったく異なる3ラインアプローチ

body {
  background-color: Canvas;
  color: CanvasText;
  color-scheme: light dark;
}

私は良いCSSのトリックに感謝していますが、これらは知っておくべき良いことですが、私は先に進み、これらの超最小限のアプローチはおそらくあなたをそれほど遠くに導くことはないと言うつもりです。これよりも優れたコントロールが必要になり、それらのエッジケースに対処する必要があります。


CSSにはこのような強力なレイアウトツールがあります(COMを続けてください、CSS!) – かなりシンプルに見えるが、まだ少し挑戦的な小さなレイアウトの状況を見るのは楽しいです。タイラー・スティッカは、彼が呼ぶものに出くわしました トリッキーなフローティング画像アライメント。アイデアは、いくつかのテキストを持つことです 中心 画像と一致していますが、テキストが成長した場合 大きい 画像よりも、の動作を使用します フロート。

最終的には解決策が好きでした。それは私たちが垂直に材料を中心にできるようになった方法への先祖返りです top: 50%; transform: translateY(-50%)。これはうまくセンタリングを行いますが、テキストがコンテナよりも大きい場合、本質的にキャンセルして、本質的に何もしません。


もう1つのトリッキーなレイアウトの状況は、今回はNewFangled HTMLおよびCSS機能、つまりアンカーポジショニングを含むものです。 (別の任意の要素の位置に基づいて要素を配置すると考えてください。)Eric Meyerはそれをブログにしました 核固定サイドノート

脚注を想像してください。十分な大きさの画面を除いて、それはサイドノートのようなものです。つまり、メモは空のサイドバースペースになります 正確に ライン 脚注マーカーが表示されること。しかし、本当にこれをやってのけるために、あなたはアンカーの位置を使用しています 複数 要素:

はい、私は2つのまったく異なるアンカーに関してサイドノートを固定しています。そのうちの1つは他の子孫です。大丈夫です!あなたはそれをすることができます!

私はあなたがそれをすることができるとは知りませんでしたが、私はそれが好きです。

top: anchor(top); /* implicit anchor */
left: anchor(--main right); /* named anchor e.g. anchor-name: --main; */

CSSについて聞いたばかりです round() 先日機能します。値が必要で、それを丸めます。ハ。

line-height: round(2.2, 1); /* 2 */

私は他の多くのCSS関数でブログを書いていました 聞いたことがありませんFirefoxでこのデモを試してください なぜそれがクールになる可能性があるかのかなり明確な例を見るために。もちろん、ダン・ウィルソンははるかに包括的な見方でそれを越えています 新しいCSS数学:round()。ダンは構文をよく見て、値だけでなく、丸めを行いたい間隔を渡す方法を共有します。その後、オプションでは、それがどのように行われるかが重要な場合は、「丸め戦略」でもあります。

これは、「以前は困難または不可能だったが、今ではそうではない」「興味深いレイアウト関連のもの」のカテゴリーに該当するように感じます。または、少なくとも「以前にJavaScriptでこれを行う必要があるでしょうが、実際にはCSSでより理にかなっています。」


私たちは得るつもりのようです scrollbar-color そして scrollbar-width すべてのブラウザにわたって 実際に 今。これは、古いもののより熟成可能な(Get Gone Wild)WebKitスタイルではなく、これを行うことの「実際の仕様バージョン」です。もっと能力があればいいのにと思いますが、いつでもそれを基準にします。


私がまだこの「難しいCSSレイアウトのもの」のキックをしている間、あなたはアレックス・リヴィエールからこのペンを見なければなりません これは、この湾曲したグリッドを処理します

これについて私に印象的なことは… ない 奇妙に見えます。ガラスのエレベーターの中に立って、これらのブロックを見ているなら、それがまさにそれらがどのように見えるかのようなものです。しかし、スクロール中にそれをやってのけるために、比較的エキゾチックなものもあります transform それらにアクションが発生する必要があります。これには、CSSの新しい三角関数が含まれます(この場合、巻物のタイムラインとともに、わかります)。

そのCSSを覗いてみてください。 変換はほんの数行ですが、すごいそれは空想です。





Source link

Views: 0

「ポケポケ」,パーモットなどを獲得できる「パーモットドロップイベント」を開始。フローゼル,アーボ,ビッパ,カイリキーも対象に



「ポケポケ」,パーモットなどを獲得できる「パーモットドロップイベント」を開始。フローゼル,アーボ,ビッパ,カイリキーも対象に

 ポケモンは本日,スマートフォンアプリ「PokémonTradingCardGamePocket」で,「パーモットドロップイベント」を開始した。期間は4月17日14:59まで。本イベントでは,期間中にバトルの「ひとりで」に登場する特別なイベントバトルに勝利すると,「プロモカードパックAシリーズ第6弾」が手に入る。



Source link

Views: 0

Streamlitがついに画像・ドキュメント添付に対応!Claude 3.7 Sonnetと連携したマルチモーダルチャットの作り方 #AWS – Qiita



Streamlitがついに画像・ドキュメント添付に対応!Claude 3.7 Sonnetと連携したマルチモーダルチャットの作り方 #AWS - Qiita

気がついたら、Streamlitのチャット入力が。添付ファイルに対応していました!
1.43.0からっぽいです。

出たらやるしかない!Bedrockの画像添付とドキュメント添付で実際に試しました!

これをもとに機能追加していきます

import boto3
import streamlit as st

MODEL_ID = "us.anthropic.claude-3-haiku-20240307-v1:0"

st.title("Bedrock Chat")

# messagesをセッションに保存
if "messages" not in st.session_state:
    st.session_state.messages = []
messages = st.session_state.messages

# 会話のやり取りを表示
for message in messages:
    with st.chat_message(message["role"]):
        for content in message["content"]:
            if "text" in content:
                st.write(content["text"])

# ユーザー入力
if prompt := st.chat_input():
    # ユーザー入力の表示
    with st.chat_message("user"):
        st.write(prompt)

    # Converse APIに送信するメッセージを作成
    user_message = {"role": "user", "content": [{"text": prompt}]}

    messages.append(user_message)

    # Converse API呼び出し
    client = boto3.client("bedrock-runtime")
    response = client.converse(modelId=MODEL_ID, messages=messages)

    assistant_message = response["output"]["message"]
    messages.append(assistant_message)

    # Bedrockの返答を表示
    with st.chat_message("assistant"):
        st.write(assistant_message["content"][0]["text"])

画像のインプットに対応する

st.chat_input()accept_fileを指定すると、ファイルの添付が可能になります。さらに、file_typeで対応するファイルの形式を指定できます。

BedrockのConverse APIが対応している画像フォーマットに絞って添付できるようにします。

+ IMAGE_FORMAT = ["png", "jpeg", "gif", "webp"]

- if prompt := st.chat_input():
+ if prompt := st.chat_input(accept_file="multiple", file_type=IMAGE_FORMAT):

画面はこのように変わります。

  • accept_file指定なし

  • accept_file指定あり

ファイル添付を有効にするとpromptの型が変わります。ユーザー入力のテキストはprompt.textに変更なります。

    with st.chat_message("user"):
-         st.write(prompt)
+         st.write(prompt.text)

-   user_message = {"role": "user", "content": [{"text": prompt}]}
+   user_message = {"role": "user", "content": [{"text": prompt.text}]}

アップロードしたファイルはprompt.filesで取得できます。

for file in prompt.files:
    file.name # ファイル名
    file.type # ファイルのMimeType
    file.getvalue() # ファイルのバイナリ

st.file_uploaderのドキュメントが参考になります。

画面へ表示する際はfilest.image()に渡すだけでOKです。

    with st.chat_message("user"):
        st.write(prompt.text)

+       for file in prompt.files:
+           st.image(file)

添付された画像をConverse APIへ送信するmessagesに追加します。

file.typeにはMIMEタイプがセットされているので、/以降を切り取ってformatに指定します。
(例:「image/jpeg」→「jpeg」)

細かい点ですが、「jpeg」はOKですが「jpg」はバリデーションエラーになります。(大文字もだめ)
そのため、ファイル名のから拡張子を取るよりMIMEタイプの後ろを取ったほうが良さそうです

+   for file in prompt.files:
+       user_message["content"].append(
+           {
+               "image": {
+                   "format": file.type.split("/")[1],
+                   "source": {"bytes": file.getvalue()},
+               }
+           }
+       )

これで画像の添付ができるようになりました。

ソースの全体はこちらです。

import boto3
import streamlit as st

MODEL_ID = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"

st.title("Bedrock Chat")

# 対応画像フォーマット
IMAGE_FORMAT = ["png", "jpeg", "gif", "webp"]

# messagesをセッションに保存
if "messages" not in st.session_state:
    st.session_state.messages = []
messages = st.session_state.messages

# 会話のやり取りを表示
for message in messages:
    with st.chat_message(message["role"]):
        for content in message["content"]:
            if "text" in content:
                st.write(content["text"])
            elif "image" in content:
                st.image(content["image"]["source"]["bytes"])

# ユーザー入力
if prompt := st.chat_input(accept_file="multiple", file_type=IMAGE_FORMAT):
    # ユーザー入力の表示
    with st.chat_message("user"):
        st.write(prompt.text)

        for file in prompt.files:
            st.image(file)

    # Converse APIに送信するメッセージを作成
    user_message = {"role": "user", "content": [{"text": prompt.text}]}

    for file in prompt.files:
        user_message["content"].append(
            {
                "image": {
                    "format": file.type.split("/")[1],
                    "source": {"bytes": file.getvalue()},
                }
            }
        )

    messages.append(user_message)

    # Converse API呼び出し
    client = boto3.client("bedrock-runtime")
    response = client.converse(modelId=MODEL_ID, messages=messages)

    assistant_message = response["output"]["message"]
    messages.append(assistant_message)

    # Bedrockの返答を表示
    with st.chat_message("assistant"):
        st.write(assistant_message["content"][0]["text"])

ドキュメントのインプットに対応する

BedrockのConverse APIは画像だけでなく、PDFなどのファイルの入力にも対応しています。画像の入力と組み合わせることも可能です。

ドキュメントが対応しているフォーマットを定義し、st.chat_inputfile_typeに追加します。

+ # 対応ドキュメントフォーマット
+ DOCUMENT_FORMAT = ["pdf", "csv", "doc", "docx", "xls", "xlsx", "html", "txt", "md"]
- if prompt := st.chat_input(accept_file="multiple", file_type=IMAGE_FORMAT):
+ if prompt := st.chat_input(
+     accept_file="multiple", file_type=IMAGE_FORMAT + DOCUMENT_FORMAT
+ ):

ドキュメント部分のコンテンツをConverse APIへ送信するmessagesに追加します。
画像(image)と異なり、formatは拡張子を取得します。また、documentの場合はname属性があります。このnameは入力規則があり、日本語文字が指定できません(バリデーションエラーになります)。そのため、uuidで生成するようにしました。

    for file in prompt.files:
+       if file.type.split("/")[1] in IMAGE_FORMAT:
            user_message["content"].append(
                {
                    "image": {
                        "format": file.type.split("/")[1],
                        "source": {"bytes": file.getvalue()},
                    }
                }
            )
+        else:
+            user_message["content"].append(
+                {
+                    "document": {
+                        "format": os.path.splitext(file.name)[1][1:],
+                        "name": str(uuid.uuid4()),
+                        "source": {"bytes": file.getvalue()},
+                    }
+                }
+            )

最後に画面に表示する部分を追加します。ファイル名ぐらいしか出せなですが。

 # 会話のやり取りを表示
 for message in messages:
     with st.chat_message(message["role"]):
         for content in message["content"]:
             if "text" in content:
                 st.write(content["text"])
             elif "image" in content:
                 st.image(content["image"]["source"]["bytes"])
+            elif "document" in content:
+                st.write(content["document"]["name"])
    # ユーザー入力の表示
    with st.chat_message("user"):
        st.write(prompt.text)

        for file in prompt.files:
            if file.type.split("/")[1] in IMAGE_FORMAT:
                st.image(file)
+            elif file.type.split("/")[1] in DOCUMENT_FORMAT:
+                st.write(file.name)

できました。

import os
import uuid

import boto3
import streamlit as st

MODEL_ID = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"

st.title("Bedrock Chat")

# 対応画像フォーマット
IMAGE_FORMAT = ["png", "jpeg", "gif", "webp"]
# 対応ドキュメントフォーマット
DOCUMENT_FORMAT = ["pdf", "csv", "doc", "docx", "xls", "xlsx", "html", "txt", "md"]

# messagesをセッションに保存
if "messages" not in st.session_state:
    st.session_state.messages = []
messages = st.session_state.messages

# 会話のやり取りを表示
for message in messages:
    with st.chat_message(message["role"]):
        for content in message["content"]:
            if "text" in content:
                st.write(content["text"])
            elif "image" in content:
                st.image(content["image"]["source"]["bytes"])
            elif "document" in content:
                st.write(content["document"]["name"])

# ユーザー入力
if prompt := st.chat_input(
    accept_file="multiple", file_type=IMAGE_FORMAT + DOCUMENT_FORMAT
):
    # ユーザー入力の表示
    with st.chat_message("user"):
        st.write(prompt.text)

        for file in prompt.files:
            if file.type.split("/")[1] in IMAGE_FORMAT:
                st.image(file)
            elif file.type.split("/")[1] in DOCUMENT_FORMAT:
                st.write(file.name)

    # Converse APIに送信するメッセージを作成
    user_message = {"role": "user", "content": [{"text": prompt.text}]}

    for file in prompt.files:
        if file.type.split("/")[1] in IMAGE_FORMAT:
            user_message["content"].append(
                {
                    "image": {
                        "format": file.type.split("/")[1],
                        "source": {"bytes": file.getvalue()},
                    }
                }
            )
        else:
            user_message["content"].append(
                {
                    "document": {
                        "format": os.path.splitext(file.name)[1][1:],
                        "name": str(uuid.uuid4()),
                        "source": {"bytes": file.getvalue()},
                    }
                }
            )

    messages.append(user_message)

    # Converse API呼び出し
    client = boto3.client("bedrock-runtime")
    response = client.converse(modelId=MODEL_ID, messages=messages)

    assistant_message = response["output"]["message"]
    messages.append(assistant_message)

    # Bedrockの返答を表示
    with st.chat_message("assistant"):
        st.write(assistant_message["content"][0]["text"])

どうぞご活用ください!





Source link

Views: 0

Switch2用高硬度ガラスを採用した画面保護フィルム2種がコロンバスサークルより登場! – GAME Watch


 コロンバスサークルは、Switch 2用画面保護ガラスフィルム「画面保護ガラスフィルム 極」(型番:CC-S2LGF-CL)を6月5日に、「画面保護ガラスフィルム 極+」(型番:CC-S2LBG-CL)を6月上旬にそれぞれ発売する。どちらも価格はオープン。「画面保護ガラスフィルム 極」の参考価格は1,518円、「画面保護ガラスフィルム 極+」の参考価格は1,628円。

 また、「Switch 2用ガッチリ スリムポーチ」(CC-S2GSP-BK)も6月上旬に発売される。価格はオープン。参考価格は2,585円。

「画面保護ガラスフィルム 極」(型番:CC-S2LGF-CL)

6月5日 発売予定
価格:オープン(参考価格:1,518円)

 本製品は、通常のフィルムよりもよりキズに強い「硬度 9H」の高硬度ガラスを使用したNintendo Switch 2用画面保護ガラスフィルム。「高透明度」・「飛散防止」・「スムースタッチ」・「防指紋」・「ラウンドエッジ加工」といった、ゲームをプレイする上で有用な機能も備えている。

 液晶画面に貼り付けることで、擦りキズや引っ掻きキズなどを気にすることなく使用できるようになり、Switch2本体の液晶画面をキズや衝撃による破損から守る。

 本体の画面を強固にガードする「硬度 9H」の頑丈を持ちながら、液晶画面に貼り付けても違和感がない薄さ0.3mmを実現。素材はしなやかで貼りやすく、貼る際にはシリコン粘着層が画面にしなやかにぴったりと吸着する。

【Switch 2用 画面保護ガラスフィルム 極」】
型番:CCS2LGFCL)
パッケージサイズ:約225×138×8mm(縦×横×厚み)
重量:約72g

「画面保護ガラスフィルム 極+」(型番:CC-S2LBG-CL)

6月上旬 発売予定
価格:オープン(参考価格:1,628円)

 本商品は、目に優しいブルーライトカット機能もプラスした硬度9Hの高品質ガラスフィルム。疲れ目の原因となる「ブルーライト」を約45%カットする。

 「硬度9H」の高硬度ガラスを採用しており、通常のフィルムによりもよりキズに強く、「高透明度」・「飛散防止」・「スムースタッチ」・「防指紋」・「ラウンドエッジ加工」など、ゲームをプレイする上で役立つ機能も備えている。液晶画面に貼り付けても違和感がない薄さ0.3mmを実現し、素材はしなやかで貼りやすく、貼る際にはシリコン粘着層が画面にしなやかにぴったりと吸着する。

【Switch 2用 画面保護ガラスフィルム 極+(プラス)】
型番:CC-S2LBG-CL
パッケージサイズ:約225×138×8mm(縦×横×厚み)
重量:約72g

「Switch 2用ガッチリ スリムポーチ」(CC-S2GSP-BK)

6月上旬 発売予定
価格:オープン(参考価格:2,585円)

 耐衝撃に優れた、軽量・薄型で、本体だけでなく周辺機器類も一緒に入れられる収納ポーチが登場。本商品では、軽量で耐衝撃に優れた“EVA素材”を採用。Switch2本体の収納・保護用に使用できる。

 ポーチ内部は、Switch2本体をベルクロでガッチリと固定可能で、衝撃からしっかりとガード。スリムでかさばらない薄型設計でありながら「ゲームカード」や「Joy-Con2」、「ケーブル類」等を収納できる機能もあり、ポーチ上部には持ち運びに便利な手持ちハンドルも付いている。

【収納可能な機器】
・Switch2本体(Joy-Con2 装着状態)
・ゲームカード(最大8枚)
・Joy-Con2
・Joy-Conストラップ
・USB充電ケーブル、HDMIケーブル等のケーブル類
※ケーブル類は太さや長さにより収納出来ない場合がございます。





Source link

Views: 0

『Spell Fragments』レビュー・評価・感想:呪文の欠片を組み合わせて“ぼくのかんがえた最強魔法”をビルドできる


『Spell Fragments』は、誰もが「禁忌」を手中にすることができる。

自分だけの、最強の、究極の魔法を作りたい。そして、使ってみたい。それが例えゲームバランスを壊すようなものでも……。という、禁忌の欲望に際限なく応えるのが、本作だ。

本作はCAMPFIREにてクラウドファンディングが実施されているが、総支援額は既に466%を達成と、目標金額を圧倒的に上回っている。それほどまでに、この禁忌は魅力的だ。

『Spell Fragments』の魔法構築システムは、とにかく「自由」だ。“こんなに攻撃力を盛ったらヤバい”とわかっていても、ゲームバランスを揺るがすような魔法を使ってみたくなる。そんな、危険で抗いがたい欲望を叶えることができる。

『Spell Fragments』レビュー・評価・感想:呪文の欠片を組み合わせて“ぼくのかんがえた最強魔法”をビルドできる_001

本作は「魔法構築」を軸として、ありとあらゆる最強魔法による、とんでもないプレイスタイルが実現する。多様な魔法を作り上げて使い分ける、まさに魔法使いらしい戦い方ができる一方で、究極魔法ひとつでダンジョン内の全ての敵を滅ぼしてもいい

もちろん、ただインフレした魔法を楽しむだけの作品ではない。本作の魅力ポイントは多岐にわたる。ローグライクならではの、ランダムな条件下でビルドを進めてステージを攻略していく楽しみもある。ハクスラ的要素でアイテムどころか魔法のパラメーターまでもがランダムに変化するので、宝箱を開けるのもワクワクする。

本作がいかに、これまでのゲームにおける「魔法」の常識を一新させるのか。本稿では、その詳細を先行アルファ版である「禁忌魔法版」のプレイレポートとしてお届けする。

文/囲図囿図囲
編集/anymo

※この記事は『Spell Fragments』の魅力をもっと知ってもらいたいCocoro Softwareさんと電ファミ編集部のタイアップ企画です。