亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ ウェブフロントエンド CSSチュートリアル ファームショップ用のショッピング カート プロジェクト

ファームショップ用のショッピング カート プロジェクト

Dec 18, 2024 am 07:27 AM

HTML、CSS、バニラ JavaScript を使用して、フロントエンド ショッピング カート Web アプリの作成が完了しました。私は地元の食料品店で野菜を買(mǎi)うのが大好きなので、Finley's Farm Shop という農(nóng)場(chǎng)ショップのアイデアを基にしました。

プロジェクトをクリックして移動(dòng)するには、ライブ リンク: https://gabrielrowan.github.io/Finleys-Farm-Shop-FE/

My shopping cart project for a Farm Shop

このアプリを使用すると、次のことができます:

?ショップアイテムをカートに追加
?ショップアイテムの數(shù)量を変更する
?カート內(nèi)のすべてのアイテムをトロリーモーダルで表示します
?カート內(nèi)の全商品の合計(jì)金額を確認(rèn)します
?カート內(nèi)の商品數(shù)を確認(rèn)します
?ページを更新したりタブを閉じて再度開(kāi)いた場(chǎng)合でも、すべてのアイテムがカートに殘ったままになります

このプロジェクトの背景

私はこれまで仕事で主にバックエンドアプリケーションに攜わってきました。しかし、この夏、私はフロントエンドの設(shè)計(jì)と実裝を含むフルスタック プロジェクトに取り組むことになりました。本當(dāng)に楽しかったので、フロントエンドのスキルをもっと磨きたいと思いました。

CSS ライブラリを使用せずにこのプロジェクトを?qū)g行することに自分自身に挑戦したいと思いました。CSS ライブラリを使用することが悪いと考えているからではなく、フロントエンドでは Bootstrap のようなものを使用することが一般的だからです。

私はこれまで JavaScript でブラウザーのローカル ストレージを使用したことがなかったので、実際的な方法でそれについて學(xué)ぶにはプロジェクトを作成することが最善の方法であると判斷しました。

プロジェクトに対する私の目標(biāo)

このプロジェクトを最初に始めたとき、いくつかの目的を念頭に置いていました。これらは次のとおりです:

?応答性 - UI をモバイル、iPad、デスクトップのビューに適応させたいと考えました
? CSS ライブラリを使用せずにショッピング カート モーダルを作成するには
? JavaScript でのローカル ストレージの使用に慣れる

今後の目標(biāo)

フロントエンドの作成は、このプロジェクトの計(jì)畫(huà)のパート 1 です。 2 番目の部分は、Django を使用してこれをフルスタック アプリに変換し、ショップ アイテムが HTML にハードコーディングされるのではなくデータベースから取得されるようにすることです。

レスポンシブにする

グリッド

アプリをさまざまな畫(huà)面サイズに適応できるようにするために、Kevin Powell のこのビデオのレスポンシブ グリッドのバージョンを使用しました。

の CSS私のプロジェクトのショップアイテムカードを含むものは次のとおりです:
.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

魔法は、grid-template-columns 値にあります。それは本質(zhì)的に次のことを意味します:
この親コンテナーには、最小サイズが 12rem、最大サイズが使用可能なスペースの 1 分の 1 の範(fàn)囲で、できるだけ多くの列を収めます。

このグリッドを使用すると、追加のメディア クエリを記述することなく、広いデスクトップ ビューから狹いモバイル ビューに移行するときに、列の量 (ショップ アイテム カードの量で表される) を 4 から 1 に動(dòng)的に減らすことができます。

My shopping cart project for a Farm Shop

バナーのフォントサイズ

バナー タイトル「Finley's Farm Shop」では、フォント サイズが自動(dòng)的に拡大縮小できるように、clamp() を使用しました。これを行わないと、デスクトップでは適切に機(jī)能するフォント サイズがモバイルでは大きすぎることがわかりました。

.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

これは、フォント サイズが 5vw (ビューポート幅 - 表示される畫(huà)面の合計(jì)幅の 5%) を目指すことを意味します。

フォント サイズの最小値は 3.8rem であるため、5vw が 3.8rem 未満に相當(dāng)する場(chǎng)合、フォント サイズは代わりに 3.8rem になります。

フォント サイズの最大値は 5.6rem に設(shè)定されているため、5vw が 5.6rem を超える場(chǎng)合は、フォント サイズは 5.6rem になります。

フォント サイズの最小値と最大値の間の勾配を正確に計(jì)算し、それを使用して好みの中間値を選択する方法はありますが、私はインスペクターを使用して目視で判斷しました。

ここでは、代わりに正確なグラデーションを計(jì)算するための CSS トリックの記事を紹介します。

モーダルの作成

さまざまな畫(huà)面サイズ

トロリーについては、デスクトップの畫(huà)面の右側(cè)から表示されるモーダルが必要でした。

My shopping cart project for a Farm Shop

モバイル表示では、全畫(huà)面サイズを使用する必要があると判斷しました:

My shopping cart project for a Farm Shop

カート項(xiàng)目のグリッド領(lǐng)域

私の時(shí)間のほとんどは、カート項(xiàng)目がカートに追加されたときの CSS に費(fèi)やされました。グリッド テンプレート エリアを使用して、カート項(xiàng)目のさまざまな部分 (項(xiàng)目タイトル、つまり「Apple」、価格、項(xiàng)目數(shù)量、畫(huà)像) が、計(jì)畫(huà)した割り當(dāng)てスペースを占めるようにしました。

My shopping cart project for a Farm Shop

.banner-title {
    font-size: clamp(3.8rem, 5vw, 5.6rem);
}

JavaScript

モーダル JavaScript の場(chǎng)合、次のことを目指していました:

  • カートアイコンをクリックしたときにモーダルを非表示にします
  • 閉じるアイコンをクリックするとモーダルを閉じます
  • モーダルが開(kāi)いているときにショップアイテムのメインページを下にスクロールできないように、ページスクロールを無(wú)効にします

これを?qū)g現(xiàn)するために、関數(shù) toggleModal を呼び出すイベント リスナーを両方のアイコンに追加しました。これにより、.active というクラスがモーダル要素にまだ追加されていない場(chǎng)合は追加され、すでに存在する場(chǎng)合は削除されます。

CSS で、モーダルがデフォルトで非表示になるように設(shè)定し、.active クラスがモーダルを表示するように設(shè)定しました。

CSS の設(shè)定:

.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

クラスを切り替えてモーダルを表示/非表示にします。

.banner-title {
    font-size: clamp(3.8rem, 5vw, 5.6rem);
}

これは、閉じるアイコンとカート アイコンのイベント リスナーが同じ機(jī)能を再利用できることを意味します。モーダルがまだ表示されていない場(chǎng)合は表示し、すでに開(kāi)いている場(chǎng)合は非表示にするためです。

ローカルストレージの使用

ローカル ストレージについては、Web Dev Simplified のこのビデオ「JavaScript Cookies vs. Local Storage vs. Session Storage」が特に役に立ちます。データを保存するこれら 3 つの方法の違い、開(kāi)発ツールの [アプリケーション] タブでデータを表示する方法、および各データ ストレージ タイプの項(xiàng)目を追加および削除する方法について説明します。

カートに 2 つのアイテムを追加した後のプロジェクトの [アプリケーション] タブは次のようになります:

My shopping cart project for a Farm Shop

関心の分離

DOM の変更 (要素の追加、要素の削除、要素の編集) に関連する機(jī)能を、ローカル ストレージに関連する機(jī)能から分離することにしました。たとえば、removeCartItemFromLocalStorage 関數(shù)があります。これは、缶に書(shū)かれていることを?qū)g行しますが、モーダルからショップ アイテムの HTML を削除する RemoveCartItemFromModalDOM とは異なります。

.cart-item {
    display: grid;
    grid-template-areas: "image description description"
        "image price quantity";
    grid-template-columns: min-content 1fr 1fr;
    grid-template-rows: 2.5rem 3.5rem;
}

これらは両方とも、ショップアイテムがカートから削除されたときに呼び出す必要があります。これらを別個(gè)の関數(shù)として持つことで、プロセスの必要な部分を両方とも完了したことを確認(rèn)するのに役立ちました。 DOM から HTML を削除しないと、Web ページには商品がカートから削除されたことが視覚的に反映されません。ローカル ストレージから項(xiàng)目を削除しないと、ページが更新されたとき、またはタブが閉じられたときに変更を保持できなくなります。

問(wèn)題に遭遇する

JavaScript でローカル ストレージ関數(shù)に取り組んでいたときに、非常に困惑する問(wèn)題に遭遇しました。これまでに行った手順は次のとおりです:

  • 最初のページ読み込み時(shí)にローカル ストレージを空の配列に設(shè)定します
  • ショップアイテムの「追加」ボタンをクリックすると、次の関數(shù)が呼び出されます。
    • アイテムがローカル ストレージに追加されました
    • カート項(xiàng)目の HTML がトロリーモーダルに追加されます
  • ローカル ストレージ配列內(nèi)の各製品の數(shù)量 * 価格として合計(jì)価格を取得します
  • 価格要素の innerText をローカル ストレージから取得した価格に設(shè)定します

いくつかクリックしてみましたが、見(jiàn)た目も素晴らしかったです。 ...ページを更新するまでは。その後、価格は以前と同じ合計(jì)に設(shè)定されましたが、DOM は最初のページ読み込み時(shí)の狀態(tài)に完全に戻りました。視覚的には、カートには商品が入っていないように見(jiàn)えましたが (數(shù)量入力コントロールの代わりに追加ボタンが表示されました)、合計(jì)金額は £0 を超えていました。

カートに追加された商品と追加されていない商品の違い

My shopping cart project for a Farm Shop

これは私を本當(dāng)に混亂させ、理解するまでに時(shí)間がかかりました。結(jié)局、分かりました。はい、アイテムをローカル ストレージに追加していました。しかし、ページがリロードされて DOMContentLoaded イベント リスナーが起動(dòng)されたとき、ローカル ストレージの內(nèi)容に基づいて DOM をレンダリングしていませんでした。実際、この段階ではローカルストレージに何があるか全くチェックしていませんでした。

これに気づいた後、ローカル ストレージ內(nèi)の製品配列內(nèi)のすべての製品をループし、各製品の ID を見(jiàn)つけて、関連する製品の HTML 要素を更新して、追加されたものを表示する DOMContentLoaded で呼び出される関數(shù)を作成しました。カートへ。

関數(shù)の短縮版は次のとおりです:

constloadCartState = () =>
{
    const cart = JSON.parse(localStorage.getItem("cart"));
    場(chǎng)合 (!カート)
    {
        カート = [];
        localStorage.setItem("カート", JSON.stringify(カート));
    }

    カート.forEach(製品=>
    {
         const shopItem = document.querySelector(`.shop-item[data- 
        >



<h2>
  
  
  導(dǎo)入
</h2>

<p>このアプリは Github Pages を使用してデプロイしました。これまでデプロイメントに使用したことはありませんでしたが、プロセスは非常に簡(jiǎn)単であることがわかりました。私が遭遇した唯一の問(wèn)題は、最初は畫(huà)像がまったく表示されなかったことです。これは大文字と小文字の區(qū)別が原因であることがわかりました。私の畫(huà)像フォルダーは Img という名前ですが、HTML 內(nèi)の畫(huà)像パスは img/ でした。この問(wèn)題が修正され、キャッシュがクリアされた後、Web サイトは期待どおりに表示されました。 </p>

<h2>
  
  
  結(jié)論
</h2>

<p>このプロジェクトから、特に CSS グリッドと JavaScript でのローカル ストレージの使用について多くのことを?qū)Wびました。さらにページを追加して、完全なフロントエンド e コマース アプリにしたいという誘惑に駆られましたが、今は MVP のままにし、Django アプリにしてフックする次の段階に集中できるようにすることにしました。データベースまで?</p>


          

以上がファームショップ用のショッピング カート プロジェクトの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ロードスピナーとアニメーションを作成するためのCSSチュートリアル ロードスピナーとアニメーションを作成するためのCSSチュートリアル Jul 07, 2025 am 12:07 AM

CSSロード回転子を作成するには3つの方法があります。1。境界の基本回転子を使用して、HTMLとCSSを介してシンプルなアニメーションを?qū)g現(xiàn)します。 2。複數(shù)のポイントのカスタム回転子を使用して、異なる遅延時(shí)間を経てジャンプ効果を?qū)g現(xiàn)します。 3.ボタンに回転子を追加し、JavaScriptを介してクラスを切り替えて、読み込みステータスを表示します。各アプローチは、ユーザーエクスペリエンスを向上させるために、色、サイズ、アクセシビリティ、パフォーマンスの最適化などのデザインの詳細(xì)の重要性を強(qiáng)調(diào)しています。

CSSブラウザの互換性の問(wèn)題とプレフィックスに対処します CSSブラウザの互換性の問(wèn)題とプレフィックスに対処します Jul 07, 2025 am 01:44 AM

CSSブラウザの互換性とプレフィックスの問(wèn)題に対処するには、ブラウザサポートの違いを理解し、ベンダーのプレフィックスを合理的に使用する必要があります。 1. FlexBoxやグリッドのサポート、位置:粘著性の無(wú)効、アニメーションのパフォーマンスなどの一般的な問(wèn)題を理解することは異なります。 2. CANIUSE確認(rèn)機(jī)能サポートステータスを確認(rèn)します。 3. -webkit-、-moz-、-ms-、-o-およびその他のメーカーのプレフィックスを正しく使用します。 4.自動(dòng)的にプレフィックスを追加するためにAutoprefixerを使用することをお?jiǎng)幛幛筏蓼埂?5. PostCSSをインストールし、ターゲットブラウザを指定するようにBrowserSlistを構(gòu)成します。 6.建設(shè)中の互換性を自動(dòng)的に処理します。 7. Modernizr検出機(jī)能は、古いプロジェクトに使用できます。 8.すべてのブラウザの一貫性を追求する必要はありません、

CSSクリップパスでカスタムシェイプを作成します CSSクリップパスでカスタムシェイプを作成します Jul 09, 2025 am 01:29 AM

CSSのクリップパス屬性を作物要素に使用して、寫(xiě)真やSVGに依存することなく、三角形、円形ノッチ、ポリゴンなどのカスタム形狀になります。その利點(diǎn)には、次のものが含まれます。1。円、楕円、ポリゴンなどのさまざまな基本的な形狀をサポートします。 2。レスポンシブ調(diào)整とモバイル端子に適応可能。 3.アニメーションが簡(jiǎn)単で、HoverまたはJavaScriptと組み合わせて動(dòng)的効果を?qū)g現(xiàn)できます。 4.レイアウトフローには影響せず、ディスプレイエリアのみを収穫します。一般的な使用法は、円形のクリップパス:円(50pxatcenter)および三角クリップパス:ポリゴン(50%0%、100 0%、0 0%)などです。知らせ

ディスプレイの違いは何ですか:インライン、ディスプレイ:ブロック、ディスプレイ:インラインブロック? ディスプレイの違いは何ですか:インライン、ディスプレイ:ブロック、ディスプレイ:インラインブロック? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:インライン、ブロック、およびinline-blockinhtml/cssarelayoutbehavior、spaceusage、andstylingcontrol.1.inlineelementsflowwithtext、notstartonnewlines、nagrorewidth/height、height、andonlyhorizo??ntalpadddddddddddddddding

スタイリングは、CSSとは異なるリンクを訪問(wèn)しました スタイリングは、CSSとは異なるリンクを訪問(wèn)しました Jul 11, 2025 am 03:26 AM

アクセスしたリンクのスタイルを設(shè)定すると、特にコンテンツ集約型のWebサイトでユーザーエクスペリエンスを向上させることができ、ユーザーがより良いナビゲートを支援します。 1。CSSを使用してください:訪問(wèn)した擬似クラスは、色の変化などの訪問(wèn)されたリンクのスタイルを定義します。 2。ブラウザは、プライバシーの制限により、いくつかの屬性の変更のみを許可することに注意してください。 3.突然の狀態(tài)を避けるために、色の選択は全體的なスタイルと調(diào)整する必要があります。 4.モバイル端子はこの効果を表示しない場(chǎng)合があり、アイコン補(bǔ)助ロゴなどの他の視覚的なプロンプトと組み合わせることをお?jiǎng)幛幛筏蓼埂?/p>

CSSペイントAPIとは何ですか? CSSペイントAPIとは何ですか? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdynamicimagegeneration incssusingjavascript.1.developerscreateapaintclasswithapaint()method.2.they registeritviaregisterpaint()

CSSを使用して応答性のある畫(huà)像を作成する方法は? CSSを使用して応答性のある畫(huà)像を作成する方法は? Jul 15, 2025 am 01:10 AM

CSSを使用してレスポンシブ畫(huà)像を作成するには、主に次の方法で達(dá)成できます。1。最大幅を使用してください:100%と高さ:自動(dòng)化して、割合を維持しながら畫(huà)像がコンテナ幅に適応できるようにします。 2。HTMLのSRCSETおよびサイズの屬性を使用して、異なる畫(huà)面に適合した畫(huà)像ソースをインテリジェントにロードします。 3.オブジェクトフィットとオブジェクトポジションを使用して、畫(huà)像のトリミングとフォーカスディスプレイを制御します。一緒に、これらの方法により、畫(huà)像がさまざまなデバイスで明確かつ美しく表示されるようになります。

一般的なCSSブラウザの矛盾とは何ですか? 一般的なCSSブラウザの矛盾とは何ですか? Jul 26, 2025 am 07:04 AM

さまざまなブラウザのCSS解析に違いがあるため、主にデフォルトのスタイルの違い、ボックスモデルの計(jì)算方法、フレックスボックスおよびグリッドレイアウトサポートレベル、および特定のCSS屬性の一貫性のない動(dòng)作を含む一貫性のないディスプレイ効果が得られます。 1.デフォルトのスタイル処理は一貫性がありません。解決策は、cssresetまたはremormize.cssを使用して初期スタイルを統(tǒng)合することです。 2。IEの古いバージョンのボックスモデル計(jì)算方法は異なります。 Box-Sizing:Border-Boxを統(tǒng)一された方法で使用することをお?jiǎng)幛幛筏蓼埂?3. FlexBoxとグリッドは、エッジの場(chǎng)合や古いバージョンでは異なる機(jī)能を示します。より多くのテストを行い、Autoprefixerを使用します。 4.一部のCSS屬性の動(dòng)作は一貫性がありません。 Caniuseは相談して格下げする必要があります。

See all articles