WeChat の WeUI を通じてどのような知識を学ぶことができますか?
WeUI は WeChat Web サービスによって開発された UI キットで、現在 12 個のモジュール (ボタン、セル、トースト、ダイアログ、プログレス、メッセージ、記事、アクションシート、アイコン、パネル、タブ、検索バー) が含まれています。 デモページ: https://weui.io
Github ページ: https://github.com/weui/weui
WeUI から学んだ CSS スキルについて話しましょう
1.Buttonここから、WeUI の実装では、多くの境界線が :before、:after を使用して描画されていることに気づき始めました。
.weui_btn:after { content: " "; width: 200%; height: 200%; position: absolute; top: 0; left: 0; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-transform: scale(0.5); transform: scale(0.5); -webkit-transform-origin: 0 0; transform-origin: 0 0; box-sizing: border-box; border-radius: 10px; }
これは、1px が Retina 画面上で実際に 1 ピクセルであることを確認するために行われます
2.1.weui_cell.weui_cell {
padding: 10px 15px;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
ログイン後にコピー。
これを見ると、WeUI は
.weui_cell { padding: 10px 15px; position: relative; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; }
2.2.Cell (リスト項目)
を多用していることがわかりました。
リスト項目間の左側にいくつかの隙間がある境界線を実装する方法について、私はいつも混乱しています。border プロパティは、片側の一部のみの表示をサポートしていません。
を挿入する必要があります。
WeUI の実装は次のとおりです。 .weui_cells:before..weui_cell:before { content: " "; position: absolute; left: 15px; top: 0; width: 100%; height: 1px; border-top: 1px solid #D9D9D9; color: #D9D9D9; -webkit-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scaleY(0.5); transform: scaleY(0.5); }

.weui_cells_access .weui_cell_ft:after { content: " "; display: inline-block; -webkit-transform: rotate(45deg); transform: rotate(45deg); height: 6px; width: 6px; border-width: 2px 2px 0 0; border-color: #C8C8CD; border-style: solid; position: relative; top: -2px; top: -1px; margin-left: .3em; }
を使用するつもりでした。
隠し<input type="radio" class="weui_check" name="radio1">
ログイン後にコピー が各行の中に埋め込まれています
非表示にする方法は次のとおりです:.weui_check {
position: absolute;
left: -9999em;
}
ログイン後にコピー
チェックを表示するために、span.input.weui_check と .weui_icon_checked がそれぞれの input.weui_check の後ろに配置されます。これらは兄弟です。上のラジオボタン<input type="radio" class="weui_check" name="radio1">
.weui_check { position: absolute; left: -9999em; }
rreee
さらに驚いたのは、選択されている効果と選択されていない効果は両方ともアイコンフォントで実現されており、選択されていない効果はボーダーで実現され、選択された効果は水平方向と垂直方向の中央揃えのチェックアイコンフォントを使用していることです。
<span class="weui_icon_checked"></span>
2.5 .Switch (スイッチ)
.weui_cells_radio .weui_check:checked + .weui_icon_checked:before {
display: block;
content: '\EA08';
color: #09BB07;
font-size: 16px;}
ログイン後にコピー
以前はこの効果を実現するのは難しいと思っていましたが、weui の実装を見た後は CSS のみを使用しています。
このうち、.weui_switch は境界線を提供し、背景色は選択されていない場合は #DFDFDF (濃い灰色)、選択されている場合は #04BE02 (緑) になります。
.weui_switch:before は、境界線の内側に明るい灰色の #FDFDFD を提供します。選択すると、scale(0) が縮小して消えます。
.weui_switch:after は円形のボタンを提供します。選択すると、右に 20 ピクセル移動します。
効果は以下の通りです:
.weui_cells_radio .weui_check:checked + .weui_icon_checked:before { display: block; content: '\EA08'; color: #09BB07; font-size: 16px;}
2.6.Form(フォーム)
<input type="checkbox" class="weui_check" name="checkbox1">
Chrome では、Input[type="number"] はデフォルトで右端に上矢印と下矢印を表示します。このコードは、Chrome の開発ツールでは表示されず、CSS からのみ表示されます。探すのにすごく時間がかかりましたrreee
input[type="number"] をクリックすると、iOS で数字キーボードが自動的に開きます。りー
画像のアップロード状態では、古典的な (水平 + 垂直) センタリング方法を使用し、top: 50% (要素の上端を親要素の 50% に配置する) と、transform: translationY(-50%) (要素を移動させる) を使用します。上 要素自体の高さの 50% を移動します)。/* 选中效果 */.weui_cells_checkbox .weui_check:checked + .weui_icon_checked:before { content: '\EA06'; color: #09BB07;}/* 未选中效果 */.weui_cells_checkbox .weui_icon_checked:before { content: '\EA01'; color: #C9C9C9; font-size: 23px; display: block;}
<input class="weui_switch" type="checkbox">
ログイン後にコピー
最後のアップロードボタン:.weui_switch {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
position: relative;
width: 52px;
height: 32px;
border: 1px solid #DFDFDF;
outline: 0;
border-radius: 16px;
box-sizing: border-box;
background: #DFDFDF;}.weui_switch:checked {
border-color: #04BE02;
background-color: #04BE02;}.weui_switch:before {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 30px;
border-radius: 15px;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
border-bottom-left-radius: 15px;
background-color: #FDFDFD;
-webkit-transition: -webkit-transform .3s;
transition: -webkit-transform .3s;
transition: transform .3s;
transition: transform .3s, -webkit-transform .3s;}.weui_switch:checked:before {
-webkit-transform: scale(0);
transform: scale(0);}.weui_switch:after {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 30px;
height: 30px;
border-radius: 15px;
background-color: #FFFFFF;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
-webkit-transition: -webkit-transform .3s;
transition: -webkit-transform .3s;
transition: transform .3s;
transition: transform .3s, -webkit-transform .3s;}.weui_switch:checked:after {
-webkit-transform: translateX(20px);
transform: translateX(20px);}
ログイン後にコピー
input[type="file"] は、iOS で「写真」または「写真」を選択するメニューを自動的にトリガーします。<input class="weui_switch" type="checkbox">
.weui_switch { -webkit-appearance: none; -moz-appearance: none; appearance: none; position: relative; width: 52px; height: 32px; border: 1px solid #DFDFDF; outline: 0; border-radius: 16px; box-sizing: border-box; background: #DFDFDF;}.weui_switch:checked { border-color: #04BE02; background-color: #04BE02;}.weui_switch:before { content: " "; position: absolute; top: 0; left: 0; width: 50px; height: 30px; border-radius: 15px; border-top-left-radius: 15px; border-top-right-radius: 15px; border-bottom-right-radius: 15px; border-bottom-left-radius: 15px; background-color: #FDFDFD; -webkit-transition: -webkit-transform .3s; transition: -webkit-transform .3s; transition: transform .3s; transition: transform .3s, -webkit-transform .3s;}.weui_switch:checked:before { -webkit-transform: scale(0); transform: scale(0);}.weui_switch:after { content: " "; position: absolute; top: 0; left: 0; width: 30px; height: 30px; border-radius: 15px; background-color: #FFFFFF; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); -webkit-transition: -webkit-transform .3s; transition: -webkit-transform .3s; transition: transform .3s; transition: transform .3s, -webkit-transform .3s;}.weui_switch:checked:after { -webkit-transform: translateX(20px); transform: translateX(20px);}
ボックスは .weui_uploader_input_wrp を使用して描画され、プラス記号は .weui_uploader_input_wrp:before および:after を使用して描画されます
真正的input利用opacity:0隐藏起来了.
.weui_uploader_input_wrp:before { width: 2px; height: 39.5px; } .weui_uploader_input_wrp:after { width: 39.5px; height: 2px; } .weui_uploader_input_wrp:before, .weui_uploader_input_wrp:after { content: " "; position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); background-color: #D9D9D9; } .weui_uploader_input { position: absolute; z-index: 1; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
2.8.Form Error (WeChat の WeUI を通じてどのような知識を学ぶことができますか?报错)
<input class="weui_input" type="date" value=""> <input class="weui_input" type="datetime-local" value="" placeholder="">
在iOS上, 点选input[type="date"]会出现"年-月-日"的WeChat の WeUI を通じてどのような知識を学ぶことができますか?框, 点选input[type="datetime-local"]会出现"月-日-上午/下午-时-分"的WeChat の WeUI を通じてどのような知識を学ぶことができますか?框.
2.9.Select (WeChat の WeUI を通じてどのような知識を学ぶことができますか?)
电话号码+86位置的右箭头和分割线是用:before和:after绘制的.
3.WeChat の WeUI を通じてどのような知識を学ぶことができますか?
<p id="toast" style="max-width:90%"> <p class="weui_mask_transparent"></p> <p class="weui_toast"> <i class="weui_icon_toast"></i> <p class="weui_toast_content">已完成</p> </p> </p>
.weui_mask_transparent就是一个position:fixed占满全屏的透明幕布, 让用户无法操作界面.
.weui_toast才是页面中间的黑块.
竟然是纯用HTML+CSS(animation+transition)实现的.
<p id="loadingWeChat の WeUI を通じてどのような知識を学ぶことができますか?" class="weui_loading_toast" style="/* display: none; */"> <p class="weui_mask_transparent"></p> <p class="weui_toast"> <p class="weui_loading"> <p class="weui_loading_leaf weui_loading_leaf_0"></p> <p class="weui_loading_leaf weui_loading_leaf_1"></p> <p class="weui_loading_leaf weui_loading_leaf_2"></p> <p class="weui_loading_leaf weui_loading_leaf_3"></p> <p class="weui_loading_leaf weui_loading_leaf_4"></p> <p class="weui_loading_leaf weui_loading_leaf_5"></p> <p class="weui_loading_leaf weui_loading_leaf_6"></p> <p class="weui_loading_leaf weui_loading_leaf_7"></p> <p class="weui_loading_leaf weui_loading_leaf_8"></p> <p class="weui_loading_leaf weui_loading_leaf_9"></p> <p class="weui_loading_leaf weui_loading_leaf_10"></p> <p class="weui_loading_leaf weui_loading_leaf_11"></p> </p> <p class="weui_toast_content">数据加载中</p> </p></p>
.weui_loading_leaf { position: absolute; top: -1px; opacity: 0.25;}.weui_loading_leaf:before { content: " "; position: absolute; width: 8.14px; height: 3.08px; background: #d1d1d5; box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 1px; border-radius: 1px; -webkit-transform-origin: left 50% 0px; transform-origin: left 50% 0px;}.weui_loading_leaf_0 { -webkit-animation: opacity-60-25-0-12 1.25s linear infinite; animation: opacity-60-25-0-12 1.25s linear infinite;}.weui_loading_leaf_0:before { -webkit-transform: rotate(0deg) translate(7.92px, 0px); transform: rotate(0deg) translate(7.92px, 0px);}/* ... */.weui_loading_leaf_11 { -webkit-animation: opacity-60-25-11-12 1.25s linear infinite; animation: opacity-60-25-11-12 1.25s linear infinite;}.weui_loading_leaf_11:before { -webkit-transform: rotate(330deg) translate(7.92px, 0px); transform: rotate(330deg) translate(7.92px, 0px);}@-webkit-keyframes opacity-60-25-0-12 { 0% { opacity: 0.25; } 0.01% { opacity: 0.25; } 0.02% { opacity: 1; } 60.01% { opacity: 0.25; } 100% { opacity: 0.25; }}/* ... */@-webkit-keyframes opacity-60-25-11-12 { 0% { opacity: 0.895958333333333; } 91.6767% { opacity: 0.25; } 91.6867% { opacity: 1; } 51.6767% { opacity: 0.25; } 100% { opacity: 0.895958333333333; }}
4. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
<p class="weui_dialog_confirm" id="dialog1"> <p class="weui_mask"></p> <p class="weui_dialog"> <p class="weui_dialog_hd"><strong class="weui_dialog_title">弹窗标题</strong></p> <p class="weui_dialog_bd">自定义弹窗内容,居左对齐显示,告知需要确认的信息等</p> <p class="weui_dialog_ft"> <a href="javascript:;" class="weui_btn_dialog default">取消</a> <a href="javascript:;" class="weui_btn_dialog primary">确定</a> </p> </p></p>
你能看到的边框都是用:after实现的.
5. Progress
略. ( *・ω・)✄╰ひ╯
6. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
略. ( *・ω・)✄╰ひ╯
7. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
略. ( *・ω・)✄╰ひ╯
8. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
<p id="actionSheet_wrap"> <p class="weui_mask_transition" id="mask" style="display: none;"></p> <p class="weui_actionsheet" id="weui_actionsheet"> <p class="weui_actionsheet_menu"> <p class="weui_actionsheet_cell">示例菜单</p> <p class="weui_actionsheet_cell">示例菜单</p> <p class="weui_actionsheet_cell">示例菜单</p> <p class="weui_actionsheet_cell">示例菜单</p> </p> <p class="weui_actionsheet_action"> <p class="weui_actionsheet_cell" id="actionsheet_cancel">取消</p> </p> </p> </p>
值得一提的是, 页面下方的WeChat の WeUI を通じてどのような知識を学ぶことができますか?始终是显示的, 只不过平时通过transform: translateY(100%)隐藏了起来, 显示时用translateY(0). 这方法无需JS就可以自适应任意高度的WeChat の WeUI を通じてどのような知識を学ぶことができますか?.
.weui_actionsheet { position: fixed; left: 0; bottom: 0; -webkit-transform: translate(0, 100%); transform: translate(0, 100%); -webkit-backface-visibility: hidden; backface-visibility: hidden; z-index: 2; width: 100%; background-color: #EFEFF4; -webkit-transition: -webkit-transform .3s; transition: -webkit-transform .3s; transition: transform .3s; transition: transform .3s, -webkit-transform .3s; } .weui_actionsheet_toggle { -webkit-transform: translate(0, 0); transform: translate(0, 0); }
9. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
一堆iconfont. ( *・ω・)✄╰ひ╯
10. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
略. ( *・ω・)✄╰ひ╯
11. Tab
Navbar:
WeChat の WeUI を通じてどのような知識を学ぶことができますか?:
略. ( *・ω・)✄╰ひ╯
12. WeChat の WeUI を通じてどのような知識を学ぶことができますか?
无焦点状态:
有焦点状态:
<p class="weui_search_bar weui_search_focusing" id="search_bar"> <form class="weui_search_outer"> <!-- 搜索框有焦点时的搜索图标, 搜索框和清空按钮 --> <p class="weui_search_inner"> <i class="weui_icon_search"></i> <input type="search" class="weui_search_input" id="search_input" placeholder="搜索" required=""> <a href="javascript:" class="weui_icon_clear" id="search_clear"></a> </p> <!-- 搜索框没有焦点时的显示 --> <label for="search_input" class="weui_search_text" id="search_text"> <i class="weui_icon_search"></i> <span>搜索</span> </label> </form> <!-- 搜索框有焦点时的取消键 --> <a href="javascript:" class="weui_search_cancel" id="search_cancel">取消</a> </p>
这里我最好奇的是, 当用户点击搜索框时, 弹出的键盘上右下角的按键是"搜索"而不是"换行".
我测试的效果是, 在微信中点击搜索框时键盘显示"搜索"按键, 在Safari中打开时则显示"换行".
这就很诡异了, 说明微信做了什么手脚. 难道与JS有关?
但是我在网上搜索了下, 发现只要确保input[type="search"]被form包围, 且form有action属性即可. 示例:
<form action=""> <input type="search" name="search" placeholder="search"> </form>
但是WeUI的实现中,form并没有action属性, 所以暂时不知道WeUI是如何做的.
相关文章:
WEUIアプリケーションJS共通情報プロンプトポップアップレイヤーのカプセル化
以上がWeChat の WeUI を通じてどのような知識を学ぶことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
