جامعه برنامه نویس

برگشت   جامعه برنامه نویس > مباحث مرتبط با توسعه وب > CSS ، HTML و Web Design

اطلاعیه

CSS ، HTML و Web Design در این بخش می‌توانید درباره مطالب مربوط به JavaScript ، HTML ، و CSS بحث و گفتگو کنید.


پاسخ
 
ابزار های تاپیک طریقه نمایش
قدیمی سه شنبه 28 آبان 1387, 23:47 عصر   #1
emad_67
کاربر دائمی
 
تاریخ عضویت: اسفند 1385
محل زندگی: تهران
پست: 1,474
تشکرها: 210
586 بار تشکر شده در 427 پست
Lightbulb نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

سلام دوستان
امروز تصمیم گرفتم یه مقاله در مورد ساخت تب بنویسم و بزارم اینجا. هرچند که ساده هست و ممکنه خیلی ها بلد باشن ولی سعی کردم کامل توضیح بدم.

این تب یا سربرگ ها خیلی ساده با با تگ های ul-li ساخته میشن. این کد html رو که از یک div تشکیل شده و درونش تگ های ul-li هستند در نظر بگیرید:
کد:
<div>
    <ul>
    <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 .tab
{
    list-style: none;
    border: 1px solid #000000;
    margin: 0;
    padding: 0;
}
#TabContainer .tab li
{
    float: right;
    margin-left: 5px;
}
در کد های بالا شناسه TabContainer برای نگهداری tab ها در نظر گرفته شده و کلاس tab نیز به تگ ul نسبت داده شده که گزینه های اون واضحه.
برای اینکه هر تگ li به صورت یک تب در بیاد لازم هست که li ها کنار هم قرار بگیرن پس گزینه float:right رو براشون در نظر میگیریم تا به حالت شناور در بین و در سمت راست ul قرار بگیرن. margin-left هم برای ایجاد فاصله بین تب ها در نظر گرفته شده. خوب تا اینجا کارمون به این شکل شده:


اولین اشکالی که به چشم میاد اینه که با float کردن li ها ارتفاع ul صفر شده و مثل یک border بالای li ها قرار گرفته. برای اینکه این حاشیه به پایین li ها بیاد باید padding-bottom به ul بدیم با اینکار ul مثل یه کادر دور تب ها رو میگیره. با توجه به اینکه ما فقط به حاشیه پایینی نیاز داریم پس border رو به border-bottom تغییر بدید.
این رو هم عرض کنم خدمتتون که padding-bottom رو طوری در تگ ul مقدار دهی کنید که دقیقا حاشیه تگ ul روی حاشیه پایینی li ها قرار بگیره. توی این مثال من 21 پیکسل براش در نظر گرفتم. بنابراین کلاس tab رو به این شکل ویرایش کنید:
کد:
#TabContainer .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 هنگام رفتن موس روی اون استایل دهی کردم.
تا اینجا کارمون به این شکل شده که تقریبا تب ها آماده شدن:


برای ساخت قسمتی که آیتم های هر تب درون اون قرار بگیره فقط کافیه از یه 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 .ContentArea
{
    border: 1px solid #000;
    border-top: none;
    padding: 3px;
}
توجه کنید که border-top رو در کلاس ContentArea حذف میکنیم و به جای اون border-bottom تگ ul جایگزین میشه.
تا اینجا کار ساخت تب ها تمومه. حالا باید قسمتی رو اضافه کنیم که کاربر با کلیک روی یک تب، اون تب به حالت فعال در بیاد و فقط آیتم های همون تب نشون داده بشه.

برای فعال شدن هر تب باید از جاوا اسکریپت استفاده کنیم به طوری که با کلیک روی هر تب تابعی فراخوانی بشه و استایل اون تب رو تغییر بده همچنین آیتم های مربوط به تمام تب ها رو در همون تگ div که کلاس 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 .tab a.active , #TabContainer .tab a.active:hover
{
    background-color: #ffffff;
    border-bottom: 1px solid #ffffff;
}
توی این کلاس فقط لازمه رنگ زمینه اون تب و حاشیه پایینی اون رو همرنگ با رنگ زمینه آیتم ها کنیم. در کد های html ئی که بالاتر قرار دادم به اولین تب این کلاس رو نسبت دادم. همچنین چون قبلا برای کلاس hover استایل تعیین کرده بودیم، باید اونو نیز override کنیم تا با رفتن موس روی اون رنگ زمینه تب عوض نشه. بنابراین الان چنین شکلی رو داریم:


حالا فقط میمونه تابع جاوا اسکریپتی که باید برای تغییر دادن استایل تب ها بنویسیم:
من خیلی ساده این تابع رو به این شکل نوشتم:
کد:
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 تعیین میشه.
یکه نکته کوچکی باقی میمونه و اونم اینکه وقتی صفحه لود میشه به دلیل اینکه این تابع جاوا اسکریپت فراخوانی نشده همه آیتم های تب ها با هم دیگه نشون داده میشن. برای رفع این مورد به div تک تک آیتم ها به غیر از آیتم اول style="display: none;" اضافه میکنیم که در زمان لود صفحه نشون داده نشن:
کد:
<div class="ContentArea">
    <div id="MostVisited_content">
        most visited
    </div>
    <div id="LastContent_content" style="display: none;">
        last content
    </div>
    <div id="OnlineUsers_content" style="display: none;">
        online user
    </div>
    <div id="UsersStatus_content" style="display: none;">
        user status
    </div>
</div>
فایل های این مقاله رو ضمیمه کردم فقط توی اون فایل برای زیباتر شدن یه مقدار border ها رو تغییر دادم که برای اینکه شلوغ نشه اینجا ننوشتم.

موفق باشید.
فایل های ضمیمه
نوع فایل: zip tab.zip‏ (1.3 کیلوبایت, 299 دیدار)

آخرین ویرایش به وسیله emad_67 : پنج شنبه 28 مرداد 1389 در 17:37 عصر
emad_67 آفلاین است   پاسخ با نقل قول
قدیمی چهارشنبه 29 آبان 1387, 09:05 صبح   #2
saeidejafari
کاربر دائمی
 
آواتار saeidejafari
 
تاریخ عضویت: مهر 1386
پست: 194
تشکرها: 74
31 بار تشکر شده در 24 پست
ارسال پیام از طریق Yahoo به saeidejafari
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

سلام
اگه میشد چند با دکمه تشکر رو زد حتما این کار رو می کردم.
به هر حال دستتون درد نکنه.
مرسی
__________________
خداوندا ارامشی عطا فرما تا بپذیرم انچه را که نمی توانم تغییر دهم؛ شهامتی تا تغییر دهم آنچه را که میتوانم و دانشی که تفاوت این دو رابدانم (جبران خلیل جبران)


saeidejafari آفلاین است   پاسخ با نقل قول
2 کاربر از saeidejafari به خاطر این مطلب مفید تشکر کرده اند:
قدیمی چهارشنبه 29 آبان 1387, 13:26 عصر   #3
emad_67
کاربر دائمی
 
تاریخ عضویت: اسفند 1385
محل زندگی: تهران
پست: 1,474
تشکرها: 210
586 بار تشکر شده در 427 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

نقل قول:
اگه میشد چند با دکمه تشکر رو زد حتما این کار رو می کردم.
به هر حال دستتون درد نکنه.
مرسی
خواهش میکنم
emad_67 آفلاین است   پاسخ با نقل قول
کاربرانی که به خاطر مطلب مفید emad_67 از وی تشکر کرده‌اند:
قدیمی چهارشنبه 29 آبان 1387, 14:02 عصر   #4
tarhebartar
کاربر دائمی
 
آواتار tarhebartar
 
تاریخ عضویت: بهمن 1386
محل زندگی: صندلی
پست: 2,201
تشکرها: 200
594 بار تشکر شده در 442 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

جالب تر میشه یه تایم بدی بعد از اینکه مثلا به غیر از اولی رو انتخاب کرد دوباره بیاد روی اولی!
__________________
اینجا را به خاطره ها سپردیم
tarhebartar آفلاین است   پاسخ با نقل قول
کاربرانی که به خاطر مطلب مفید tarhebartar از وی تشکر کرده‌اند:
قدیمی چهارشنبه 29 آبان 1387, 19:46 عصر   #5
Exception
کاربر دائمی
 
آواتار Exception
 
تاریخ عضویت: مرداد 1386
پست: 250
تشکرها: 14
115 بار تشکر شده در 80 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

یه سوال: دلیل خاصی داشت که هدرها رو تو تگ a گذاشتی؟
__________________
I'm always right. This time I'm just even more right than usual.
Exception آفلاین است   پاسخ با نقل قول
قدیمی چهارشنبه 29 آبان 1387, 22:07 عصر   #6
emad_67
کاربر دائمی
 
تاریخ عضویت: اسفند 1385
محل زندگی: تهران
پست: 1,474
تشکرها: 210
586 بار تشکر شده در 427 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

نقل قول:
جالب تر میشه یه تایم بدی بعد از اینکه مثلا به غیر از اولی رو انتخاب کرد دوباره بیاد روی اولی!
ایده بدی نیست، ولی در کل اینا دیگه به سلیقه هر فردی بر میگرده و فقط هدف من آموزش ساختش بود ;)
نقل قول:
یه سوال: دلیل خاصی داشت که هدرها رو تو تگ a گذاشتی؟
خوب برای اینکه برای کلاس hover هم بتونم یه جلوه ای رو در نظر بگیرم از تگ a استفاده کردم. البته میشد a رو در نظر نگرفت و hover رو برای li نوشت:
کد:
li:hover
{
..
}
ولی توی IE پشتیبانی نمیشه و IE کلاس hover رو برای تگ a فقط میشناسه. البته با ابزاری میشه hover رو هم به ie شناسوند ولی توی این مثال قصد استفاده از اونو نداشتم و برای همین تگ a رو براش در نظر گرفتم.
موفق باشید.
emad_67 آفلاین است   پاسخ با نقل قول
4 کاربر از emad_67 به خاطر این مطلب مفید تشکر کرده اند:
قدیمی شنبه 02 آذر 1387, 08:14 صبح   #7
yaqubian
مدیر بخش
 
تاریخ عضویت: بهمن 1381
محل زندگی: دهکده مجازی
پست: 1,010
تشکرها: 515
868 بار تشکر شده در 345 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

دوست عزیز emad_67
خیلی لطف کردید اما تمام مواردی که گفتید با نصب یه نرم افزار کوچولو مثل tab designer قابل انجامه!
نوع تب رو انتخاب می کنید و خودش خروجی css رو بهتون می ده!
موفق باشید
__________________
ما را نه غم دوزخ و نی حرص بهشت است!
http://www.kelasemajazi.com
yaqubian آفلاین است   پاسخ با نقل قول
قدیمی شنبه 02 آذر 1387, 09:25 صبح   #8
eAmin
کاربر دائمی
 
تاریخ عضویت: فروردین 1387
محل زندگی: Firmware 3.1.2
پست: 325
تشکرها: 190
187 بار تشکر شده در 123 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

نقل قول:
نوشته شده توسط yaqubian مشاهده تاپیک
دوست عزیز emad_67
خیلی لطف کردید اما تمام مواردی که گفتید با نصب یه نرم افزار کوچولو مثل tab designer قابل انجامه!
نوع تب رو انتخاب می کنید و خودش خروجی css رو بهتون می ده!
موفق باشید
سلام.

ممنون، ولی هدف از ایجاد چنین تاپیکی، آموزش چگونگی ساخت اینجور tab هاست.
-----
اگر قرار باشه که متکی به نرم افزار باشیم، هیچوت توی کدنویسی پیشرفت نمی کنیم، بلکه پسرفت می کنیم!
البته دروقت صرفه جویی می شه ولی...
__________________
[Simple CSS Selector]


Coming Zood...
Object Oriented & Modular JS Framework

eAmin آفلاین است   پاسخ با نقل قول
6 کاربر از eAmin به خاطر این مطلب مفید تشکر کرده اند:
قدیمی شنبه 02 آذر 1387, 09:57 صبح   #9
emad_67
کاربر دائمی
 
تاریخ عضویت: اسفند 1385
محل زندگی: تهران
پست: 1,474
تشکرها: 210
586 بار تشکر شده در 427 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

نقل قول:
دوست عزیز emad_67
خیلی لطف کردید اما تمام مواردی که گفتید با نصب یه نرم افزار کوچولو مثل tab designer قابل انجامه!
نوع تب رو انتخاب می کنید و خودش خروجی css رو بهتون می ده!
موفق باشید
درسته، ولی به شخصه زیاد علاقه ای به این نرم افزار ها ندارم و ترجیح میدم خودم همه چیزو بسازم هر چند ممکنه وقت بیشتری صرف بشه.( البته ممکنه یه نفر دیگه وقت براش بیشتر مهم باشه). توی این تاپیک هم قصد داشتم نحوه ساخت رو از ابتدا بگم(حالا خوب یا بدش بماند) چون به نظرم تاثیر بیشتری داره نسبت به اینکه من بیام و یه نرم افزار معرفی کنم یا اینکه کد html و css اونو ضمیمه کنم و بگم اینم یه نمونه تب.
موفق باشید ;)
emad_67 آفلاین است   پاسخ با نقل قول
5 کاربر از emad_67 به خاطر این مطلب مفید تشکر کرده اند:
قدیمی دوشنبه 07 بهمن 1387, 10:55 صبح   #10
hamid1081
کاربر جدید
 
تاریخ عضویت: اسفند 1384
پست: 10
تشکرها: 5
0 بار تشکر شده در 0 پست
نقل قول: نحوه ساخت تب(سربرگ) برای نمایش آیتم ها

آموزش خیلی جالبی بود.
چون من برام جالب بود که بدونم چطوری می شه این تب ها رو ساخت.
به هر حال خیلی ممنون
hamid1081 آفلاین است   پاسخ با نقل قول
پاسخ

بوک مارک کردن این تاپیک


کاربرانی که این تاپیک را مشاهده میکنند: 1 (0 کاربران و 1 مهمان)
 
ابزار های تاپیک
طریقه نمایش

قوانین ایجاد تاپیک در تالار
شما نمی توانید تاپیک جدید ایجاد کنید
شما نمی توانید به تاپیک ها پاسخ دهید
شما نمی توانید ضمیمه ارسال کنید
شما نمی توانید پاسخ هایتان را ویرایش کنید

BB code روشن است
خندانک ها روشن هستند
[IMG] روشن است
HTML خاموش است

پرش



واحد زمان برحسب ساعت لندن +3.5. ساعت هم اکنون 01:12 صبح است.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 1389, Jelsoft Enterprises Ltd.
خدمات میزبانی این سایت تحت پوشش شرکت ایران هاست می باشد.