إنشاء موقع للتسويق على سرفر النود

قد تتفاجأ  من سهولة انشاء موقع  تجاري  احنرافي  من خلال HTML CSS  JS  بخطوات بسيطة 

 


في  هذه التدوينة  سنتطرق الى ادق التفاصيل في بناء  موقع تجاري, على  سبيل  المثال موقع للملابس  الحديثة  ،  وكيفيت عرضها على الزبون بدون برمجة  خلفية الموقع  بل سنركز على التصميم  وتفاعلية التصميم  في  الموقع وواجهة المستخدم ،  ساعتمد على سرفر النود التحميل من موقعه الرسمي https://nodejs.org/en/
node.js


 لاعطاء  الموقع  ديناميكية  اكثر وتفاعلية افضل ملحوظة  هناك  على  النود  قوالب جاهزة تكفي بعض  الخطوات البسيطة لانشاء موقع  تسويقي للسلع  ، لكن لا يوجد افضل من بناء موقعك  الخاص من الصفر والاستمتاع به  ...   

نصائح  

حاول ان  تتفادا قدر  المستطاع النسخ واللصق  للاكواد  وحاول كتابة الاكواد  ومعالجة الاخطاء  لكي  تتعلم التكويد  بشكل  اسرع  ،  عند الوصول لمرحلة لم  تعد تستوعب الدرس  توقف عن التكويد وخذ  قسطا من الراحة  لتجديد نشاطك 

المتطلبات  

  1. -محرر نصوص على الاقل يدعم التكميل  التلقائي مثل notepad++ انصح بvscode 
  2. -سرفر نود يكون محمل على  الحاسوب  مع بعض  الحزم الاساسية  npm
  3. -لديك  معرفة  للغات الخاصة بواجهة الويب الاساسية  js , css  ,html
هذه دورة html ,css,js
---
 
---

على بركة الله   نقوم بانشاء  ملفات  المشار اليها داخل مجلدات معينة حتى يكون العمل مرتب 

شجرة  تفرع ملفات المشروع  كالاتي :



ملفات الموقع  الاساسيةداخل مجلد المشروع الاساسي ecomerce
error.html
index.html
prudact.html
search.html
server.html

مجلد css  يكون  داخل مجلد المشروع الاساسي ecomerce
404.css
fouter.css
home.css
navbar.css
prudact.css

مجلد الصور هو الاخر داخل ملف  المشورع الاساسي  ecomerce سارفق بعض  الصور  الخاصة بالعرض اخذتها من عدة مواقع تجارية لذا  قد  تكون بعض  الصور  عليها  حقوق  الطبع  والنشر  وينصح بوضع صورك الخاصة مستقبلا وعدم استخدامها  سوى في هذه الكورس  للغرض  التعليمي تحميل  الصور

مجلد js  داخل المجلد الرئيسي للمشروع وهو المسؤول عن ديناميكية الموقع ودب  الحياة فيه  
fouter.js
home.js
navbar.js
prudact.js

يمكننا البدأ  ب npm   init  في  المشروع لبناء موقع  عبر وضع تعريفة ليه  في الحقيقة اني اتخطى هذه المرحلة لاني  استخدم حزم داخلية  وجاهزة  ولن اقوم بتنزيل  اي قوالب لذا  فاني لا احتاجها ما دام الدرس  تعليمي  

اول خطوة  هي  انشاء  تطبيق  bat لتشغيل  الموقع بضغطة زر بدون الحاجة الى كتابة  الكود  وتشغيل  الموقع   عند كل خطا
@echo
rem node serv.js run the project in windows cmd
set url="http://127.0.0.1:8081/"
start chrome %url% 
 cd C:\Work\nodejs\ECOMERCE rem the path of the project
 node  server.js
  rem nodemon server.js
  rem loop:
  rem rs
 rem go to loop:



في   السطر  الثالث حجزت متغير عبارة عن سترينغstring  يحتوي على رابط  السرفر  الملي لتغشيل المشروع  في  السطر  الثاني قمت بتشغيل  الرابط على متصفح كروم  يمكنك اختيار  المتصفح الذي ترتاح  اليه ،  الاكواد الخاصة ب css  على موزيلا تكون مختلفة  عن المتواجدة في كروم لذا  عليك البحث عن تناسق  في  css  لكل متصفح  ولكل اصدار 
في الامر cd  امرته بالتوجه الى مصار  المشروع  يختلف حسب كل حاسوب ومساره الخاص  الامر node server.js هو  تشغيل  السرفر  الخاص  بالنود بعد تشغيل المتصفح  باقي  الاكواد  خاصة بالنود مون لك حرية ابقائها او ازالتها  لكن تحتاج  الى  تنزيل النود مون  من npm لكي يعمل معك  الاومر  الاخرى عبارة عن حلقة لتجديد السرفر بما  يسمى المزامنة اثناء  التكويد  
في حالة  عدم  تركيب  سرفر   النود  فهناك اضافة اسمها  golive  على  محرر الاكواد  vscode  مفيذة جدا  
 
الان تقوم بكتابة  الاكواد في ملف runserver.bat يكون داخل مجلد  ecomerce  الاساسي للمشروع

runserver.bat



افضل تكويدة للسرفر النود هي  كالتالي :
const http = require('http');
const fs = require('fs');
//const opn = require('opn');
const hostname = '127.0.0.1';
const port = 8081;

fs.readFile('./index.html'function (errhtml) {
    if (err) {
        throw err
    }       
    const server = http.createServer(function(requestresponse) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(porthostname, () => {
        // Console
       // opn('http://${hostname}:${port}/');
        console.log(`Server running at http://${hostname}:${port}/`);
    });
    
});



للمزيد من الشرحات  لملف server.js  شاهد الفيديو او الدروس  التالية   يمكنك اعتماده في  المشاريع الاختبارية  فهو مفيذ  جدا لكن في ما يخص  القوالب الجاهزة عليك ببعض  التغييرات المتطلبة من القالب نفسه  

سلسلة تعلم النود


 

في ملف indexhtml  قم بانشاء اساسيات الهيكلة لل html  ان كان محرر الاكواد  تبعك لا  يدعم  التوليد الذاتي  للاكواد  فانصح بالتالي  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>home</title>
</head>
<body>
    
</body>
</html>


سنحتاج  الى  ناف بار navbar لكي نضع فيها  تعريفة الموقع وقوائم الموقع الى اخره  ......  
<nav class="navbar"></nav>

لها كلاس ناف  بار  الان  نريد ان نضع محتوى الناف بار في كل  الصفحات فليس من المعقول نسخ نفس  الكود والصاقه في هده صفحات   نفتح  ملف  navbar.js  ونكتب  الكود التالي :
const createNav = () => {
    let nav = document.querySelector('.navbar');

    nav.innerHTML = `
        <div class="nav">
            <img src="img/dark-logo.png" class="brand-logo" alt="">
            <div class="nav-items">
                <div class="search">
                    <input type="text" class="search-box" placeholder="search brand, 
product">
                    <button class="search-btn">search</button>
                </div>
                <a href="#"><img src="img/user.png" alt=""></a>
                <a href="#"><img src="img/cart.png" alt=""></a>
            </div>
        </div>
        <ul class="links-container">
            <li class="link-item"><a href="#" class="link">home</a></li>
            <li class="link-item"><a href="#" class="link">women</a></li>
            <li class="link-item"><a href="#" class="link">men</a></li>
            <li class="link-item"><a href="#" class="link">kids</a></li>
            <li class="link-item"><a href="#" class="link">accessories</a></li>
        </ul>
    `;
}

createNav();


بعد توليد كود html  عند استدعاء  ملف navbar.js مباشرة اسف body

 <nav class="navbar"></nav>
    <script src="js/navbar.js"></script>



الان يحتاج الموقع  الى  بعض من انماط  الستايل في ملف navbar.css نكتب  الكود التالي  يمكن تغيير  الكود عند الحاجة او تغيير المتصفح  : 


*{
    margin0;
    padding0;
    box-sizingborder-box;
    font-family'roboto'sans-serif;
}
.navbar{
    positionsticky;
    top0;
    left0;
    width100%;
    background#f5f5f5;
    z-index9;
}

.nav{
    padding10px 10vw;
    displayflex;
    justify-contentspace-between;
}

.brand-logo{
    height60px;
}

.nav-items{
    displayflex;
    align-itemscenter;
}

.search{
    width500px;
    displayflex;
}

.search-box{
    width80%;
    height40px;
    padding10px;
    border-top-left-radius10px;
    border-bottom-left-radius10px;
    border1px solid #d1d1d1;
    text-transformcapitalize;
    backgroundnone;
    color#a9a9a9;
    outlinenone;
}

.search-btn{
    width20%;
    height40px;
    padding10px 20px;
    bordernone;
    outlinenone;
    cursorpointer;
    background#383838;
    color#fff;
    text-transformcapitalize;
    font-size15px;
    border-top-right-radius10px;
    border-bottom-right-radius10px;
}

.search-box::placeholder{
    color#a9a9a9;
}

.nav-items a{
    margin-left20px;
}

.nav-items a img{
    width30px;
}
.links-container{
    width100%;
    displayflex;
    padding10px 10vw;
    justify-contentcenter;
    list-stylenone;
    border-top1px solid #d1d1d1;
}

.link{
    text-transformcapitalize;
    padding0 10px;
    margin0 5px;
    text-decorationnone;
    color#383838;
    opacity0.5;
    transition.5s;
}

.link:hover{
    opacity1;
}

لكي  يضهر لنا هذا  الستايل  نقوم بمناداته في الملف  الرئيسي home.css كالتالي :

@import 'navbar.css';
يمكنك متابعة سلسلة الويب المتجاوب وستايل  الويب وبناء  الويب  في حالة الارتباك  وعدم فهم اي من الاساسيات التالي  

يوتوب  

الان  نحتاج  الى اضافة اللوغو تبع الموقع  ايضا  اخذت لوغو من الموقع  عينه داخل ملفات img نقوم بانشاء  header 
<header class="hero-section">
        <div class="content">
            <img src="img/light-logo.png" class="logo" alt="">
            <p class="sub-heading">best fashion collection of all time</p>
        </div>
    </header>



في ملف  home.css  اسفل الاستدعاء  نضع الستايل  التالي  

.hero-section{
    width100%;
    heightcalc(100vh - 120px);
    background-imageurl('../img/header.png');
    background-sizecover;
    displayflex;
    justify-contentcenter;
    align-itemscenter;
}

.hero-section .logo{
    height150px;
    displayblock;
    marginauto;
}

.hero-section .sub-heading{
    margin-top10px;
    text-aligncenter;
    color#fff;
    text-transformcapitalize;
    font-size35px;
    font-weight300;
}



الان  نقوم بكتابة  section  خاص  بالمنتجات تبعنا  
<section class="product">
        <h2 class="product-category">best selling</h2>
        <button class="pre-btn"><img src="img/arrow.png" alt=""></button>
<button class="nxt-btn"><img src="img/arrow.png" alt=""></button>
        <div class="product-container">
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card1.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card2.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card3.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card4.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card5.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card6.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card6.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card7.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card8.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card9.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card10.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card11.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
            <div class="product-card">
                <div class="product-image">
                    <span class="discount-tag">50% off</span>
                    <img src="img/card12.png" class="product-thumb" alt="">
                    <button class="card-btn">add to whislist</button>
                </div>
                <div class="product-info">
                    <h2 class="product-brand">brand</h2>
                    <p class="product-short-des">a short line about the cloth..</p>
                    <span class="price">$20</span><span class="actual-price">$40</span>
                </div>
            </div>
        </div>
        <script src="js/home.js"></script>
        </div>
</section>


الان نظيف ستايل  للبرودكت  في ملف منفصل  ل css يكون الملف prudact.css 

.product-details{
    width100%;
    padding60px 10vw;
    displayflex;
    justify-contentspace-between;
}

.image-slider{
    width500px;
    height500px;
    positionrelative;
    background-imageurl('../img/productimage1.png');
    background-sizecover;
}

.product-images{
    positionabsolute;
    bottom20px;
    left50%;
    transformtranslateX(-50%);
    width90%;
    background#fff;
    border-radius5px;
    displaygrid;
    grid-template-columnsrepeat(41fr);
    height100px;
    grid-gap10px;
    padding10px;
}

.product-images img{
    width100%;
    height80px;
    object-fitcover;
    cursorpointer;
}

.product-images img.active{
    opacity0.5;
}
.details{
    width50%;
}

.details .product-brand{
    text-transformcapitalize;
    font-size30px;
}

.details .product-short-des{
    font-size25px;
    line-height30px;
    heightauto;
    margin15px 0 30px;
}

.product-price{
    font-weight700;
    font-size30px;
}

.product-actual-price{
    font-size30px;
    opacity0.5;
    text-decorationline-through;
    margin0 20px;
    font-weight300;
}

.product-discount{
    color#ff7d7d;
    font-size20px;
}

.product-sub-heading{
    font-size30px;
    text-transformuppercase;
    margin60px 0 10px;
    font-weight300;
}

.size-radio-btn{
    displayinline-block;
    width80px;
    height80px;
    text-aligncenter;
    font-size20px;
    border1px solid #383838;
    border-radius50%;
    margin10px;
    margin-left0;
    line-height80px;
    text-transformuppercase;
    color#383838;
    cursorpointer;
}

.size-radio-btn.check{
    background#383838;
    color#fff;
}

.btn{
    width48%;
    padding20px;
    border-radius5px;
    backgroundnone;
    border1px solid #383838;
    color#383838;
    font-size20px;
    cursorpointer;
    margin20px 0;
    text-transformcapitalize;
}

.cart-btn{
    margin-right2%;
    background#383838;
    color#fff;
}
.detail-des{
    padding0 10vw;
    text-transformcapitalize;
}

.heading{
    font-size30px;
    margin-bottom30px;
}

.des{
    color#383838;
    line-height25px;
}
.product-container{
    displaygrid;
    grid-template-columnsrepeat(41fr);
    heightauto;
    grid-row-gap40px;
}

اذا كنت تعرف كل  هذه الاوسم  وادوارها  افضل ان  تقوم  بعملية النسخ  واللصق ستلاحظ اني  قمت بارفاق ملف   home.js لاعطاء  حركة للسكشن  

في ملف  home.js نقوم  بنسخ  الكود المسؤول عن تحريك الاصور 

const productContainers = [...document.querySelectorAll('.product-container')];
const nxtBtn = [...document.querySelectorAll('.nxt-btn')];
const preBtn = [...document.querySelectorAll('.pre-btn')];

productContainers.forEach((itemi=> {
    let containerDimenstions = item.getBoundingClientRect();
    let containerWidth = containerDimenstions.width;

    nxtBtn[i].addEventListener('click', () => {
        item.scrollLeft += containerWidth;
    })

    preBtn[i].addEventListener('click', () => {
        item.scrollLeft -= containerWidth;
    })
})


لمعرقة  اوامر ودور كل  سطر برمجي  تابع  الدورات  التالية   شرحت فيها اوامر  الاحداث بشكل نفصيلي الكود ببساطة عبارى  عن زر تقدمي وزر عكسي لنضع بعض  الستايل 

.product{
    positionrelative;
    overflowhidden;
    padding20px 0;
}

.product-category{
    padding0 10vw;
    font-size30px;
    font-weight500;
    margin-bottom40px;
    text-transformcapitalize;
}
.product-container{
    padding0 10vw;
    displayflex;
    overflow-xauto;
    scroll-behaviorsmooth;
}

.product-container::-webkit-scrollbar{
    displaynone;
}

.product-card{
    flex0 0 auto;
    width250px;
    height450px;
    margin-right40px;
}

.product-image{
    positionrelative;
    width100%;
    height350px;
    overflowhidden;
}

.product-thumb{
    width100%;
    height350px;
    object-fitcover;
}

.discount-tag{
    positionabsolute;
    background#fff;
    padding5px;
    border-radius5px;
    color#ff7d7d;
    right10px;
    top10px;
    text-transformcapitalize;
}

.card-btn{
    positionabsolute;
    bottom10px;
    left50%;
    transformtranslateX(-50%);
    padding10px;
    width90%;
    text-transformcapitalize;
    bordernone;
    outlinenone;
    background#fff;
    border-radius5px;
    transition0.5s;
    cursorpointer;
    opacity0;
}

.product-card:hover .card-btn{
    opacity1;
}

.card-btn:hover{
    background#efefef;
}

.product-info{
    width100%;
    height100px;
    padding-top10px;
}

.product-brand{
    text-transformuppercase;
}

.product-short-des{
    width100%;
    height20px;
    line-height20px;
    overflowhidden;
    opacity0.5;
    text-transformcapitalize;
    margin5px 0;
}

.price{
    font-weight900;
    font-size20px;
}

.actual-price{
    margin-left20px;
    opacity0.5;
    text-decorationline-through;
}
.pre-btn.nxt-btn{
    bordernone;
    width10vw;
    height100%;
    positionabsolute;
    top0;
    displayflex;
    justify-contentcenter;
    align-itemscenter;
    backgroundlinear-gradient(90degrgba(25525525500%#fff 100%);
    cursorpointer;
    z-index8;
}

.pre-btn{
    left0;
    transformrotate(180deg);
}

.nxt-btn{
    right0;
}

.pre-btn img.nxt-btn img{
    opacity0.2;
}

.pre-btn:hover img.nxt-btn:hover img{
    opacity1;
}


الان  نحتاج  الى  مختارات   

<section class="collection-container">
    <a href="#" class="collection">
        <img src="img/women-collection.png" alt="">
        <p class="collection-title">women <br> apparels</p>
    </a>
    <a href="#" class="collection">
        <img src="img/men-collection.png" alt="">
        <p class="collection-title">men <br> apparels</p>
    </a>
    <a href="#" class="collection">
        <img src="img/accessories-collection.png" alt="">
        <p class="collection-title">accessories</p>
    </a>
</section>


تحمل  الستايل  التالي 

.collection-container{
    width100%;
    displaygrid;
    grid-template-columnsrepeat(21fr);
    grid-gap10px;
}

.collection{
    positionrelative;
}

.collection img{
    width100%;
    height100%;
    object-fitcover;
}

.collection p{
    positionabsolute;
    top50%;
    left50%;
    transformtranslate(-50%-50%);
    text-aligncenter;
    color#fff;
    font-size50px;
    text-transformcapitalize;
}

.collection:nth-child(3){
    grid-column: span 2;
    margin-bottom10px;
}



يالنسيةfooter   سنحتاج  الى  تكراره  في عدة صفحات لذا سنقوم بمفس عملية navbar في ملف footer.js

const createFooter = () => {
    let footer = document.querySelector('footer');

    footer.innerHTML = `
    <div class="footer-content">
        <img src="img/light-logo.png" class="logo" alt="">
        <div class="footer-ul-container">
            <ul class="category">
                <li class="category-title">men</li>
                <li><a href="#" class="footer-link">t-shirts</a></li>
                <li><a href="#" class="footer-link">sweatshirts</a></li>
                <li><a href="#" class="footer-link">shirts</a></li>
                <li><a href="#" class="footer-link">jeans</a></li>
                <li><a href="#" class="footer-link">trousers</a></li>
                <li><a href="#" class="footer-link">shoes</a></li>
                <li><a href="#" class="footer-link">casuals</a></li>
                <li><a href="#" class="footer-link">formals</a></li>
                <li><a href="#" class="footer-link">sports</a></li>
                <li><a href="#" class="footer-link">watch</a></li>
            </ul>
            <ul class="category">
                <li class="category-title">women</li>
                <li><a href="#" class="footer-link">t-shirts</a></li>
                <li><a href="#" class="footer-link">sweatshirts</a></li>
                <li><a href="#" class="footer-link">shirts</a></li>
                <li><a href="#" class="footer-link">jeans</a></li>
                <li><a href="#" class="footer-link">trousers</a></li>
                <li><a href="#" class="footer-link">shoes</a></li>
                <li><a href="#" class="footer-link">casuals</a></li>
                <li><a href="#" class="footer-link">formals</a></li>
                <li><a href="#" class="footer-link">sports</a></li>
                <li><a href="#" class="footer-link">watch</a></li>
            </ul>
        </div>
    </div>
    <p class="footer-title">about company</p>
    <p class="info">Lorem ipsum, dolor sit amet consectetur adipisicing 
elit. Repellat tempore ad suscipit, eos eius quisquam sed optio nisi quaerat 
fugiat ratione et vero maxime praesentium, architecto minima reiciendis iste quo
 deserunt assumenda alias ducimus. Ullam odit maxime id voluptates rerum tenetur
 corporis laboriosam! Cum error ipsum laborum tempore in rerum necessitatibus
 nostrum nobis modi! Debitis adipisci illum nemo aperiam sed, et accusamus ut 
officiis. Laborum illo exercitationem quo culpa reprehenderit excepturi distinctio 
tempore cupiditate praesentium nisi ut iusto, assumenda perferendis facilis voluptas
 autem fuga sunt ab debitis voluptatum harum eum. Asperiores, natus! Est deserunt
 incidunt quasi placeat omnis, itaque harum?</p>
 <p class="info">support emails - help@clothing.com, customersupport@clothing.com</p>
    <p class="info">telephone - 180 00 00 001, 180 00 00 002</p>
    <div class="footer-social-container">
        <div>
            <a href="#" class="social-link">terms & services</a>
            <a href="#" class="social-link">privacy page</a>
        </div>
        <div>
            <a href="#" class="social-link">instagram</a>
            <a href="#" class="social-link">facebook</a>
            <a href="#" class="social-link">twitter</a>
        </div>
    </div>
    <p class="footer-credit">Clothing, Best apparels online store</p>
    `;
}

createFooter();


ونقوم بناداته في  الصفحة بهذا الشكل

<footer></footer>
<script src="js/footer.js"></script>


الان نظيف الستايل  للفوتر  

footer{
    positionrelative;
    width100%;
    padding40px 10vw;
    padding-bottom80px;
    background#383838;
}

.footer-content{
    displayflex;
    width100%;
    justify-contentspace-between;
}

.footer-content .logo{
    height160px;
}

.footer-ul-container{
    width45%;
    displayflex;
    justify-contentspace-between;
}

.category{
    width200px;
    displaygrid;
    grid-template-columnsrepeat(21fr);
    grid-gap10px;
    list-stylenone;
}

.category-title{
    grid-column: span 2;
    text-transformcapitalize;
    color#fff;
    font-size20px;
    margin-bottom20px;
}

.category .footer-link{
    text-decorationnone;
    text-transformcapitalize;
    colorrgba(2552552550.75);
}

.footer-link:hover{
    color#fff;
}
.footer-title.info{
    colorrgba(2552552550.75);
    margin20px 0;
    text-transformcapitalize;
}

.footer-title{
    margin-top80px;
    color#fff;
}

.footer-social-container{
    margin-top40px;
    displayflex;
    justify-contentspace-between;
}

.social-link{
    color#fff;
    margin-left20px;
    text-transformcapitalize;
}

.social-link:nth-child(1){
    margin-left0;
}

.footer-credit{
    width100%;
    padding10px;
    positionabsolute;
    left0;
    bottom0;
    text-aligncenter;
    color#fff;
    backgroundrgba(0000.2);
}
.four-0-four-image{
    displayblock;
    margin60px auto;
}

.four-0-four-msg{
    text-aligncenter;
    text-transformcapitalize;
    color#383838;
}

.four-0-four-msg a{
    color#383838;
}


في هذه المرحلة  انتهينا من الصفحة الرئيسية  ننتقل الى  صفحة المنتج هو نقس الامر كالصفحى الرئيسية prudact.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Prudact</title>
    
    <link rel="stylesheet" href="css/home.css">
    <link rel="stylesheet" href="css/product.css">
</head>
<body>
    
   
    <script src="js/home.js"></script>
    
    <nav class="navbar"></nav>
    <script src="js/navbar.js"></script>
    <section class="product-details">
        <div class="image-slider">
            <div class="product-images">
                <img src="img/product image 1.png" class="active" alt="">
                <img src="img/product image 2.png" alt="">
                <img src="img/product image 3.png" alt="">
                <img src="img/product image 4.png" alt="">
             
            </div>
           
        </div>
        <div class="details">
            <h2 class="product-brand">calvin klein</h2>
            <p class="product-short-des">Lorem ipsum dolor sit, amet consectetur 
adipisicing elit.</p>
            <span class="product-price">$99</span>
            <span class="product-actual-price">$200</span>
            <span class="product-discount">( 50% off )</span>
    
            <p class="product-sub-heading">select size</p>
    
            <input type="radio" name="size" value="s" checked hidden id="s-size">
            <label for="s-size" class="size-radio-btn check">s</label>
            <input type="radio" name="size" value="m" hidden id="m-size">
            <label for="m-size" class="size-radio-btn">m</label>
            <input type="radio" name="size" value="l" hidden id="l-size">
            <label for="l-size" class="size-radio-btn">l</label>
            <input type="radio" name="size" value="xl" hidden id="xl-size">
            <label for="xl-size" class="size-radio-btn">xl</label>
            <input type="radio" name="size" value="xxl" hidden id="xxl-size">
            <label for="xxl-size" class="size-radio-btn">xxl</label>
    
            <button class="btn cart-btn">add to cart</button>
            <button class="btn">add to wishlist</button>
            
        </div>
        <script src="js/product.js"></script>
    </section>
    <section class="detail-des">
        <h2 class="heading">description</h2>
        <p class="des">Lorem Ipsum is simply dummy text of the
 printing and typesetting industry. Lorem Ipsum has been the
 industry's standard dummy text ever since the 1500s, when an unknown 
printer took a galley of type and scrambled it to make a type specimen book.
 It has survived not only five centuries, but also the leap into electronic
 typesetting, remaining essentially unchanged. It was popularised in the 1960s
 with the release of Letraset sheets containing Lorem Ipsum passages, and more 
recently with desktop publishing software like Aldus PageMaker including versions of
 Lorem Ipsum.</p>
    </section>
<footer></footer>
<script src="js/footer.js"></script>
</body>
</html>


نضع ستايل للصفحة

.product-details{
    width100%;
    padding60px 10vw;
    displayflex;
    justify-contentspace-between;
}

.image-slider{
    width500px;
    height500px;
    positionrelative;
    background-imageurl('../img/productimage1.png');
    background-sizecover;
}

.product-images{
    positionabsolute;
    bottom20px;
    left50%;
    transformtranslateX(-50%);
    width90%;
    background#fff;
    border-radius5px;
    displaygrid;
    grid-template-columnsrepeat(41fr);
    height100px;
    grid-gap10px;
    padding10px;
}

.product-images img{
    width100%;
    height80px;
    object-fitcover;
    cursorpointer;
}

.product-images img.active{
    opacity0.5;
}
.details{
    width50%;
}

.details .product-brand{
    text-transformcapitalize;
    font-size30px;
}

.details .product-short-des{
    font-size25px;
    line-height30px;
    heightauto;
    margin15px 0 30px;
}

.product-price{
    font-weight700;
    font-size30px;
}

.product-actual-price{
    font-size30px;
    opacity0.5;
    text-decorationline-through;
    margin0 20px;
    font-weight300;
}

.product-discount{
    color#ff7d7d;
    font-size20px;
}

.product-sub-heading{
    font-size30px;
    text-transformuppercase;
    margin60px 0 10px;
    font-weight300;
}

.size-radio-btn{
    displayinline-block;
    width80px;
    height80px;
    text-aligncenter;
    font-size20px;
    border1px solid #383838;
    border-radius50%;
    margin10px;
    margin-left0;
    line-height80px;
    text-transformuppercase;
    color#383838;
    cursorpointer;
}

.size-radio-btn.check{
    background#383838;
    color#fff;
}

.btn{
    width48%;
    padding20px;
    border-radius5px;
    backgroundnone;
    border1px solid #383838;
    color#383838;
    font-size20px;
    cursorpointer;
    margin20px 0;
    text-transformcapitalize;
}

.cart-btn{
    margin-right2%;
    background#383838;
    color#fff;
}
.detail-des{
    padding0 10vw;
    text-transformcapitalize;
}

.heading{
    font-size30px;
    margin-bottom30px;
}

.des{
    color#383838;
    line-height25px;
}
.product-container{
    displaygrid;
    grid-template-columnsrepeat(41fr);
    heightauto;
    grid-row-gap40px;
}


الان داخل ملف prudact.htmlفي section تبع prudact تضع الكود التالي 

        <script>
            const sizeBtns = document.querySelectorAll('.size-radio-btn'); 

sizeBtns.forEach((itemi=> { 
    item.addEventListener('click', () => { 
        sizeBtns[checkedBtn].classList.remove('check'); 
        item.classList.add('check'); 
        checkedBtn = i
    })
})
        </script>


في ملف prudact.js تضع الكود  التالي 

const productImages = document.querySelectorAll(".product-images img"); 
const productImageSlide = document.querySelector(".image-slider"); 

let activeImageSlide = 0

productImages.forEach((itemi=> { 
    item.addEventListener('click', () => { 
        productImages[activeImageSlide].classList.remove('active'); 
        item.classList.add('active'); 
        productImageSlide.style.backgroundImage = `url('${item.src}')`
        activeImageSlide = i
    })
})


بعد ان  اضفنا  الحركة للموقع  نضيف  الستايل  لكي  يبدو الامر منطقي 

.product-details{
    width100%;
    padding60px 10vw;
    displayflex;
    justify-contentspace-between;
}

.image-slider{
    width500px;
    height500px;
    positionrelative;
    background-imageurl('../img/productimage1.png');
    background-sizecover;
}

.product-images{
    positionabsolute;
    bottom20px;
    left50%;
    transformtranslateX(-50%);
    width90%;
    background#fff;
    border-radius5px;
    displaygrid;
    grid-template-columnsrepeat(41fr);
    height100px;
    grid-gap10px;
    padding10px;
}

.product-images img{
    width100%;
    height80px;
    object-fitcover;
    cursorpointer;
}

.product-images img.active{
    opacity0.5;
}
.details{
    width50%;
}

.details .product-brand{
    text-transformcapitalize;
    font-size30px;
}

.details .product-short-des{
    font-size25px;
    line-height30px;
    heightauto;
    margin15px 0 30px;
}

.product-price{
    font-weight700;
    font-size30px;
}

.product-actual-price{
    font-size30px;
    opacity0.5;
    text-decorationline-through;
    margin0 20px;
    font-weight300;
}

.product-discount{
    color#ff7d7d;
    font-size20px;
}

.product-sub-heading{
    font-size30px;
    text-transformuppercase;
    margin60px 0 10px;
    font-weight300;
}

.size-radio-btn{
    displayinline-block;
    width80px;
    height80px;
    text-aligncenter;
    font-size20px;
    border1px solid #383838;
    border-radius50%;
    margin10px;
    margin-left0;
    line-height80px;
    text-transformuppercase;
    color#383838;
    cursorpointer;
}

.size-radio-btn.check{
    background#383838;
    color#fff;
}

.btn{
    width48%;
    padding20px;
    border-radius5px;
    backgroundnone;
    border1px solid #383838;
    color#383838;
    font-size20px;
    cursorpointer;
    margin20px 0;
    text-transformcapitalize;
}

.cart-btn{
    margin-right2%;
    background#383838;
    color#fff;
}
.detail-des{
    padding0 10vw;
    text-transformcapitalize;
}

.heading{
    font-size30px;
    margin-bottom30px;
}

.des{
    color#383838;
    line-height25px;
}
.product-container{
    displaygrid;
    grid-template-columnsrepeat(41fr);
    heightauto;
    grid-row-gap40px;


الان  نتجه لصفحة search.html ونضع الكود التالي 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>search</title>
    <link rel="stylesheet" href="css/home.css">
   <link rel="stylesheet" href="css/search.css">
</head>
<body>

    <nav class="navbar"></nav>
    <section class="search-results">
        <h2 class="heading">search results for <span>product</span></h2>
    </section>
    <footer></footer>

    <script src="js/navbar.js"></script>
    <script src="js/footer.js"></script>
</body>
</html>

ثم الستايل  التالي في ملف منصل او في داخل الصفحة الخيار يعود لك عني وضعته في ملف search.css

.search-results{
    width100%;
    padding60px 0;
}

.heading{
    font-size20px;
    text-transformcapitalize;
    font-weight400;
    margin-bottom40px;
    padding0 10vw;
}

.heading span{
    font-weight700;
}

الان نضع الكود التالي  في  صفحة error.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>error</title>
    <link rel="stylesheet" href="css/footer.css">
    <link rel="stylesheet" href="css/home.css">
</head>
</head>
<body>
    <nav class="navbar"></nav>
    <script src="js/navbar.js"></script>
    <img src="img/404.png" class="four-0-four-image" alt="">
<p class="four-0-four-msg">look like you are lost. 
Head to beack to our <a href="#">homepage</a></p>
<footer></footer>
<script src="js/footer.js"></script>
</body>
</html>

ونضيف  الستايل  التالي   في  نفس  الصفحة اوفي  صفحى  منفصلة 404.css

.four-0-four-image{
    displayblock;
    margin60px auto;
}

.four-0-four-msg{
    text-aligncenter;
    text-transformcapitalize;
    color#383838;
}

.four-0-four-msg a{
    color#383838;
}

ملف home.css ننادي  فيه على  جميع الستايلات  

@import 'navbar.css';
@import'footer.css';
@import'prudact.css';

الى هنا وانتها  الدرس  لتحميل  السورس كود 

EcomerceWebsite



إرسال تعليق

0 تعليقات