جمعه 21 اسفند 1388
ساعت 03:43 قبل‏ازظهر
منوی اصلی
صفحه اصلی
دانلود
آموزش
CSS
اینترنت
سخت افزار
جستجوی پیشرفته
درخواست ها و پیشنهادات
دیگر سایت ها
موبایل
زنگوله
وب سافت دانلود
نرم افزار موزيك عكس
داتیس دیزاین
مجله کامپیوتر
p30p30
دانلود کتاب الکترونیکی
برنامه ها
ITCOM
گروه شبکه
دانلود رایگان کتابهای کامپیوتری
برنامه نویسی در دات نت
لينكدوني دات كام
آي تي بلاگ
فقط دانلود
آشپز ایرانی
مقالات کامپیوتر
دنیای قالب ایرانیان
مجله علمی
کتابخانه الکترونیکی
پروژهاي دانشجويي رايگان
دانلود کامل
سایت خود را اضافه کنید
آخرین اخبار
محبوب ترین ها
نظرسنجي
بهترین سیستم عاملی که تاکنون از آن استفاده کرده اید:
  
تبلیغات
پیگیری مقالات از RSS
rss-tumb

 
تبلیغات
Home arrow CSS arrow CSS arrow چگونگی ساخت تب (سربرگ) با CSS
چگونگی ساخت تب (سربرگ) با CSS چاپ ارسال به دوست
(مجموع آراء: 8)
نویسنده عماد   
1388/04/21 ساعت 19:49:21
مطمئنا در سایت های مختلف قسمت هایی را دیده اید که به صورت تب کنار هم قرار گرفته اند. تب ها گزینه ای مناسب برای نمایش بخش های مختلف در یک سایت، در حین فشردگی و زیبایی می باشند. در این مقاله قصد دارم نحوه ی ساخت این نوع تب ها را به کمک CSS و اندکی جاوا اسکریپت آموزش بدم هرچند که نسبتا ساده است اما سعی کردم توضیخات کامل باشد. ناگفته نماند که این مقاله رو  سال قبل نوشتم و در انجمن برنامه نویس منتشر کردم، اما به دلیل اضافه شدن بخش css به سایت تصمیم گرفتم مقاله رو در اینجا هم قرار بدم.
 
tab05

این تب یا سربرگ ها به سادگی توسط تگ های ul-li ساخته می شوند. برای شروع، کد html زیر را که از یک div تشکیل شده و درونش تگ های ul-li هستند در نظر بگیرید:

<div id="TabContainer">
    <ul class="tab">
        <li><a href="#">محبوب ترين مطلب</a></li>
        <li><a href="#">آخرين مطالب</a></li>
        <li><a href="#">افراد آنلاين</a></li>
        <li><a href="#">وضعيت اعضاء</a></li>
    </ul>
</div>

قصد بر این است که با css کاری کنیم که هر تگ li به یک تب تبدیل شود، بنابراین کد های زیر را در فایل css خود قرار دهید: 

#TabContainer
{
    margin: 30px 250px;
    padding: 0;
}
#TabContainer ul.tab
{
    list-style: none;
    border: 1px solid #000000;
    margin: 0;
    padding: 0;
}
#TabContainer ul.tab li
{
    float: right;
    margin-left: 5px;
}

در کد های بالا شناسه TabContainer برای نگهداری tab ها در نظر گرفته شده است و کلاس tab نیز به تگ ul نسبت داده شده که گزینه های آن واضح اند.
برای اینکه هر تگ li به صورت به یک تب تبدیل شود، لازم هست که li ها کنار هم قرار بگیرند، بنابراین خاصیت float:right  را برای تگ های li در نظر می گیریم تا به حالت شناور و در سمت راست ul قرار بگیرند. margin-left نیز برای ایجاد فاصله بین تب ها در نظر گرفته شده است. خوب تا اینجا کار به این شکل شده:

tab

اولین مشکلی که دیده می شود این است که با float کردن li ها ارتفاع ul صفر شده و مثل یک border در بالای li ها قرار گرفته است. برای اینکه این حاشیه در زیر تگ های li قرار گیرد، لازم است که مقداری برایpadding-bottom  تگ ul در نظر بگیریم، با اینکار ul مثل کادری دور تب ها را خواهد گرفت. با توجه به اینکه ما فقط به حاشیه پایینی نیاز داریم پس border را بهborder-bottom  تغییر دهید.
این را هم عرض کنم که padding-bottom را طوری در تگ ul مقدار دهی کنید که دقیقا حاشیه تگ ul روی حاشیه پایینی li ها قرار بگیرد. در این مثال من مقدار21 پیکسل برایpadding-bottom  در نظر گرفتم. در نهایت کلاس tab را به این شکل ویرایش کنید:

#TabContainer ul.tab
{
    list-style: none;
    border-bottom: 1px solid #000000;
    margin:  0;
    padding: 0 50px 21px 0;
}

بعد از انجام مراحل فوق به سراغ تعیین استایل برای تگ های a که درون تگ های li هستند می رویم:

#TabContainer li a:link,#TabContainer li a:visited
{
    display: block;
    font-family: tahoma;
    font-size: .75em;
    background-color: #fcd9af;
    color: #800000;
    border: 1px solid #000;
    padding: 3px;
    text-decoration: none;
}
#TabContainer li a:hover
{
    background-color: #ff9797;
}

فکر نمیکنم در کد های بالا چیزی نامفهوم باشد. فقط یک نکته کوچک اینکه به منظور نمایش تگ a به صورت جعبه ای، خاصیت display آن را برابر block قرار دادم.  با این کار تگ a تمام فضای درون li را می پوشاند و وقتی موس را در هر جای li قرار دهید، علامت دست ظاهر خواهد شد. بعد از آن هم کلاس کاذب hover را برای تغییر رنگ زمینه تگ a هنگام رفتن موس بر روی تگ، استایل دهی کردم.
تا اینجا تب های ما به این شکل شده که تقریبا تب ها آماده شده اند:

tab

برای ساخت قسمتی که آیتم های هر تب درون آن قرار گیرد از یک تگ div  استفاده می کنیم. در ابتدای کار تب ها را درون یک div  با آی دی TabContainer  قرار دادیم. بنابراین تب های ما دقیقا در بین این div مهار شده هستند. پس خیلی راحت با اضافه کردن یک div دیگر به عنوان محل قرار گیری آیتم ها و دادن border به آن می توانیم یک چهارچوب برای تب ها درست کنیم. کد html ما تا این لحظه به صورت زیر می باشد:

 <div id="TabContainer">
    <ul class="tab">
        <li><a href="#">محبوب ترين مطلب</a></li>
        <li><a href="#">آخرين مطالب</a></li>
        <li><a href="#">افراد آنلاين</a></li>
        <li><a href="#">وضعيت اعضاء</a></li>
    </ul>
    <div class="ContentArea">
        <p>test</p>
        <p>test</p>
        <p>test</p>
        <p>test</p>
    </div>
</div>

و این هم کد css برای div جدید:

#TabContainer div.ContentArea
{
    border: 1px solid #000;
    border-top: none;
    padding: 3px;
}

توجه کنید که border-bottom  تگul ، حاشیه بالایی در کلاس ContentArea  را تشکیل می دهد، بنابراین مقدار border-top را در این کلاس حذف کرده ایم.
تا اینجا کار ساخت تب ها به پایان رسیده است. در ادامه باید حالت فعال یا غیر فعال بودن تب ها را ایجاد کنیم، به شکلی که وقتی کاربر بر روی یک تب کلیک کرد، آن تب به حالت فعال در بیاید و فقط آیتم های همان تب نشان داده شود.

tab
برای فعال شدن هر تب از جاوا اسکریپت استفاده می کنیم، به طوری که با کلیک بر روی هر تب تابعی فراخوانی می شود و استایل تب مورد نظر را تغییر می دهد. همچنین در این مرحله آیتم های نمایشی مربوط به تمام تب ها را در تگی که با کلاس ContentArea در مرحله قبل ایجاد شد قرار می دهیم و با جاوااسکریپت خاصیت display آن ها را به گونه ای تغییر میدهیم که هنگام کلیک بر روی هر تب فقط آیتم های همان تب نمایش یابند. به این ترتیب برای هر تگ a یک آی دی در نظر می گیریم و به رویداد onclick  هر یک نیز نام تابع جاوا اسکریپت مورد نظر را اختصاص می دهیم.

<li><a href="#" id="MostVisited" class="active" onclick="tabselect(id);">محبوب ترین مطالب</a></li>
<li><a href="#" id="LastContent" onclick="tabselect(id);">آخرین مطالب</a></li>
<li><a href="#" id="OnlineUsers" onclick="tabselect(id);">افراد آنلاین</a></li>
<li><a href="#" id="UsersStatus" onclick="tabselect(id);">وضعیت اعضاء</a></li>

به div نگهدارنده آیتم ها هم چند تگ div که هرکدام مربوط به آیتم های یک تب هستند را اضافه کنید:

<div class="ContentArea">
    <div id="MostVisited_content">
        most visited
    </div>
    <div id="LastContent_content">
        last content
    </div>
    <div id="OnlineUsers_content">
        online user
    </div>
    <div id="UsersStatus_content">
        user status
    </div>
</div>

 با توجه به اینکه تب فعال ما باید دارای استایل متفاوتی نسبت به سایر تب ها باشد، یک کلاس css با نام active را برای تب های فعال نیزدر نظر می گیریم:

#TabContainer ul.tab a.active , #TabContainer ul.tab a.active:hover
{
    background-color: #ffffff;
    border-bottom: 1px solid #ffffff;
}

در این کلاس فقط رنگ زمینه تب فعال و حاشیه پایینی آن را همرنگ با رنگ زمینه آیتم ها کنیم. در کد های html ئی که بالاتر قرار دادم به اولین تب، این کلاس رو نسبت دادم. همچنین چون قبلا برای کلاس hover استایل تعیین کرده بودیم، باید آن را نیزoverride  کنیم تا با رفتن موس روی تب فعال رنگ زمینه تب تغییر پیدا نکند. بنابراین چنین شکلی رو داریم:

tab
درنهایت تابع جاوا اسکریپت برای تغییر دادن استایل تب ها ها را به صورت کاملا ساده به این شکل نوشتم:

var activeId = "MostVisited";
function tabselect(id)
{   
    document.getElementById(activeId).className="";
    document.getElementById(id).className="active";
    document.getElementById(id).blur();
 
    document.getElementById(activeId + "_content").style.display="none";
    document.getElementById(id + "_content").style.display="";
    activeId = id;
}

نحوه کار تابع به این شکل است که با کلیک بر روی یک تب، آی دی آن تب به این تابع ارسال شده و براساس آن آی دی، خاصیت display و className آیتم ها و تگ های a تعیین می شود. متغیری به نام activeId هم در نظر گرفته شده که id هر تب فعال در آن قرار داده می شود و برا اساس این آی دی، تغییرات از روی تب قبلی برداشته شده و به تب جدید اختصاص میابد.
نکته ی انتهایی این مقاله: هنگامی که صفحه لود می شود، به دلیل اینکه تابع جاوااسکریپت فراخوانی نشده است، تمام آیتم ها همزمان نمایش داده می شوند. برای رفع این مورد به تگ div تک تک آیتم ها به غیر از آیتم اول خاصیت display: none را اضافه می کنیم. با اینکار در زمان لود صفحه فقط آیتم های تب اول نمایش داده می شوند.
فایل های این مقاله را می توانید از اینجا دانلود کنید. البته تغییراتی جزئی برای زیبا تر شدن درش دادم که برای جلوگیری از شلوغی و پیچیدگی در متن مقاله لحاظ نشدند. 

آیتم های مرتبط:




  یادداشت ها (3)
عالیه
نوشته شده توسط اشکان در 1388/05/08 - 15:36
سلام. 
من واقعاً از شما بابت آموزش‌های عالیتون تشکر می‌کنم. 
هر چند دیر شده ولی واقعاً دنبال همچین چیزی توی CSS می‌گشتم.
نوشته شده توسط مهبودی در 1388/07/28 - 15:14
عالیه.ممنونم.
تشکر
نوشته شده توسط مدیر در 1388/12/02 - 16:32
محشره  
سایت خیلی خوب دارید 
 
www.didani.net

ایجاد یادداشت
  • لطفا نظرات خود را در مورد این مطلب در اینجا ثبت کنید

نام:
پست الکترونیکی شما:
عنوان:
BBCode:Web AddressEmail AddressBold TextItalic TextUnderlined TextQuoteCodeOpen ListList ItemClose List
یادداشت







کد امنیتی: Code