طراحی رابط کاربری نظرسنجی بوسیله HTML و CSS3 و jQuery

دسته بندی: رابط کاربری
زمان مطالعه: 8 دقیقه
۲۵ تیر ۱۳۹۳

به نام خدا

سلام دوستان عزیز

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

پیش نمایش

نکته :

البته فریم ورکهایی مثل jqueryui هم این نوع دکمه ها رو دارن ولی به نظر من بعضی چیزها رو باید با نحوه کارشون آشنا شد تا بتونیم طراحی خوبی رو بعمل بیاریم. البته درسته میگن چرخ رو از اول اختراع نمیکنن ولی به هر حال تا حدودی باید بدونیم چرخ چطور کار میکنه تا بتونیم بهتر ازش کار بکشیم!!

فهرست محتوای این مقاله

روند کار

ما تو این کار از چک باکس و دکمه رادیویی استفاده میکنیم چون میخوایم از طریق متد POST و یا GET اطلاعات رو ارسال کنیم ولی اون رو به کاربر نشون نمیدیم. تنها چیزی که کاربر میبینه یک div گرافیکی که با کلیلک روی اون استایل div تغییر میکنه یعنی کاربر اون رو در حالت انتخاب قرار داده و در پشت پرده اتفاقات ما چک باکس یا دکمه رادیویی با کلیک روی div مورد نظر تیک میخوره و با حذف اون تیکش هم برداشته میشه. بعدشم با ارسال اون بر اساس دکمه تیک خورده اطلاعات منتقل میشه نه یه div گرافیکی. البته اگه بخوایم با ای جکس نظرسنجی رو ارسال کنیم میشه چک باکس هم نذاشت.

نکته :

تو این روش وقتی رو div کلیک میکنیم بالتبع چک باکس یا دکمه رادیویی تیک میخوره یعنی همزمان این اتفاق میفته ولی میشه فقط کلاس div هارو همزمان اعمال کرد و وقتی کاربر فرم رو ارسال کرد با توجه به div که انتخاب شده و کلاس active (جلوتر بهش میرسیم) اون بوسیله جی کوئری چک باکس یا دکمه رادیویی مورد نظر رو تیک بزینم. اینطوری کار رو میذاریم آخر انجام میدیم. من اولی رو انجام میدم دومی با خودتون!

بریم سراغ کارمون:

کد HTML :

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>طراحی رابط کاربری نظرسنجی بوسیله HTML و CSS3 و jQuery</title>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
	<script type="text/javascript">
		//jQuer Code is here
	</script>
</head>
<body>

<div id="wrapper">
	<div class="pollbox poll1">
		<h3>نظرسنجی</h3>
		<p>نظر شما در مورد طراحی قالب چیست؟</p>
		<div class="case green">
			خیلی خوب
			<input type="radio" name="poll1" value="verygood">
		</div>
		<div class="case green">
			خوب
			<input type="radio" name="poll1" value="good">
		</div>
		<div class="case green">
			معمولی
			<input type="radio" name="poll1" value="medium">
		</div>
		<div class="case green">
			بد
			<input type="radio" name="poll1" value="bad">
		</div>
		<div class="case green">
			خیلی بد
			<input type="radio" name="poll1" value="verybad">
		</div>
		<input type="submit" value="ثبت">
	</div>

	<div class="pollbox poll2">
		<h3>نظرسنجی</h3>
		<p>کدام از زبان های زیر را دوست دارید؟</p>
		<div class="case dark">
			PHP
			<input type="checkbox" name="php" value="php">
		</div>
		<div class="case dark">
			HTML
			<input type="checkbox" name="html" value="html">
		</div>
		<div class="case dark">
			CSS
			<input type="checkbox" name="css" value="css">
		</div>
		<div class="case dark">
			MySQL
			<input type="checkbox" name="mysql" value="mysql">
		</div>
		<div class="case dark">
			JavaScript
			<input type="checkbox" name="javascript" value="javascript">
		</div>
		<input type="submit" value="ثبت">
	</div>
</div>
</body>
</html>

توضیحات HTML :

طبق معمول اول فایل کتابخانه جی کوئری رو بارگذاری میکنیم. داخل قسمت اسکریپت خالیه که قراره کدهای جاوا اسکریپت داخلش قرار بگیره. divبا شناسه wrapper که کل محتوا رو داخلش قرار میدیم.(دوست داشتین نذارین!) خب ما دو سیستم نظرسنجی رو پیاده می کنیم که یکی از دکمه رادیویی استفاده کرده یعنی میتونیم فقط یه مورد رو انتخاب کنیم و دومی از از چک باکس یعنی حق انتخاب چند مورد رو داریم. این قسمت ها کاملا مشخصه اصل مطلب اینجاست که ما بجای یه دکمه چک باکس یا رادیویی اومدیم از div استفاده کردیم و دکمه رو برای نگه داشتن اطلاعات و ارسال اونا به سمت سرور داخل همون div قرار دادیم. کلاس green و dark رو فقط برای استایل به گزینه انتخاب شده قرار دادیم. تا اینجا هر div به منزله یه دکمه انتخابی حساب میشه. خب حالا میریم سراغ استایل دهی. میخوایم کاری کنیم تا وقتی کاربر روی گزینه که div هست کلیک کنه یه استایل به اون داده میشه یعنی الان کاربر اون رو انتخاب کرده.

کد CSS :

body{
	direction: rtl;
	text-align: right;
}
#wrapper{
	padding: 50px;
}
.pollbox{
	border-radius: 5px;
	background: #F7F7F7;
	border: 1px solid #CACACF;
	width: 300px;
	padding: 15px;
	float: right;
	margin: 10px;
	border-right: 3px solid #C9C9C9;
	border-bottom: 3px solid #C9C9C9;
	overflow: hidden;
}
.pollbox h3{
	margin : -18px;
	padding: 12px 15px;
	border-bottom: 1px solid #E0E0E0;
	background-image: -webkit-linear-gradient(#B9FF91,#FFF);
    background-image:    -moz-linear-gradient(#B9FF91,#FFF);
    background-image:     -ms-linear-gradient(#B9FF91,#FFF);
    background-image:      -o-linear-gradient(#B9FF91,#FFF);
}
.pollbox p{
	padding: 10px 4px;
}
.pollbox .case{
	margin: 4px 5px;
	padding: 10px;
	border-radius: 5px;
	background: #F8F8F8;
	border: 1px solid #E2DCDC;
	border-bottom: 4px solid #CFCFCF;
	border-right: 4px solid #CFCFCF;
	cursor: pointer;
	color: #5A5A5A;
	-webkit-transition:all 0.2s linear;
	-moz-transition:all 0.2s linear;
	transition:all 0.2s linear;
}
.pollbox .case:hover{
	background: #E8FCF0;
	border-color: #C4EEEC
}
.pollbox .case.active.green{
	background: #4CA12B;
	background-image: -webkit-linear-gradient(#4CA12B,#2B6813);
    background-image:    -moz-linear-gradient(#4CA12B,#2B6813);
    background-image:     -ms-linear-gradient(#4CA12B,#2B6813);
    background-image:      -o-linear-gradient(#4CA12B,#2B6813);
	border-bottom: 4px solid #438F26;
	border-right: 4px solid #438F26;
	color: #FFF;
	box-shadow: inset 2px 2px 19px rgba(4, 70, 2, 0.55);
}
.pollbox .case.active.dark{
	background: #555;
	background-image: -webkit-linear-gradient(#8A8B8B,#5E5B5B);
    background-image:    -moz-linear-gradient(#8A8B8B,#5E5B5B);
    background-image:     -ms-linear-gradient(#8A8B8B,#5E5B5B);
    background-image:      -o-linear-gradient(#8A8B8B,#5E5B5B);
	border-bottom: 4px solid #000;
	border-right: 4px solid #000;
	color: #FFF;
	box-shadow: inset 2px 2px 19px rgba(4, 70, 2, 0.55);
}
.pollbox input[type='submit']{
	border: 1px solid #D3CCCC;
	padding: 12px 70px;
	border-radius: 5px;
	margin: 20px auto;
	margin-bottom: 5px;
	display: block;
	background: #E4DEDE;
	background-image: -webkit-linear-gradient(#E4DEDE,#F7F7F7);
    background-image:    -moz-linear-gradient(#E4DEDE,#F7F7F7);
    background-image:     -ms-linear-gradient(#E4DEDE,#F7F7F7);
    background-image:      -o-linear-gradient(#E4DEDE,#F7F7F7);
	border-bottom: 5px solid #D1D4D6;
	border-right: 5px solid #D1D4D6;
	cursor: pointer;
	-webkit-transition:all 0.03s linear;
	-moz-transition:all 0.03s linear;
	transition:all 0.03s linear;
}
.pollbox input[type='submit']:active{
	border-bottom-width: 2px;
	border-right-width: 2px;
	margin-bottom: 8px;
}
.pollbox input[type='submit']:focus{
	outline: none;
}
.pollbox input[type='radio'],.pollbox input[type='checkbox']{
	display: none;
}

توضیحات CSS :

به هر کدام از بخش های مربوطه رو استایل دادیم. مثلا خود div با کلاس pollbox و سرتیتر و هر کدام از گزینه ها که به صورت انتخاب نشده استایل اونارو اعمال میکنیم. از خط 50 شروع به استایل برای زمانی که گزینه در حالت انتخاب قرار داره میکنیم. یه کلاس رنگ سبز برای نظر سنجی یک انتخابی و کلاس مشکی برای چند انتخابی. همونطور که میبینید هر دو دارای کلاس active در قبل از خود هستند. یعنی وقتی این کلاس با گزینه انتخاب شده باشه استایلش به استایل انتخاب شده تبدیل میشه وقتی هم نباشه همون استایل معمولی خط 32 رو میگیره. تا اینجا میتونیم بفهمیم که اگه با جاوا اسکریپت یا جی کو ئری بتونیم با کلیک رو گزینه کلاس active رو به اون اضافه و یا کم کنیم نمای گرافیک کار رو ساختیم و کاربر میتونه با کلیک روی گزینه اون رو انتخاب کنه (که در بخش جاوا اسکریپت بهشم میرسیم) و یا از انخاب خارج کنه(البته  انتخابی در کا نیست چون فقط با استایل  بازی کردیم یعتی تا اینجا فقط برا سرگرمی خوبه). باقی استایل ها رو جاش نیست توضیح بدم.

نکته اصلی رو تو خط 99 میتونیم ببینیم جایی که دکمه چک باکس و دکمه رادیویی رو از چشم کاربر مخفی کردیم و به جاش یه گزینه گرافیکی به اون نشون دادیم.

نکته :

به جای این دکمه ها میشه از hidden هم استفاده کرد.

تا اینجای کار فقط تونستیم گرافیک اولیه رو آماده کنیم. فعلا کلیک کردن روی گزینه فایده ای نداره. پس بهتره بریم سراغ جی کوئری:

 

$(function () {
    $("div.poll1>.case").click(function(){
    	$(this).parent().find("input:radio").attr("checked",false);
    	$(this).siblings(".case").removeClass("active").end().addClass("active").children("input").attr("checked",true);
    });
    $("div.poll2>.case").click(function(){
    	$(this).toggleClass("active");
    	var check = $(this).children().attr("checked");
    	if(check != "checked"){
    		$(this).children().attr("checked",true);
    	}else{
    		$(this).children().attr("checked",false);
    	}
    });
});

توضیحات jQuery :

در مورد حالت یک انتخابی یعنی دکمه رادیویی : با کلیک روی هر یک از گزینه ها (خط2) اول میره سراغ عنصر والد گزینه کلیک شده و تمام دکه های رادیویی رو پیدا میکنه و تیکش رو برمیداره. بعدش(خط4) اول تمام عناصر همتراز گزینه انتخاب شده(یعنی تمام div هایی که به عنوان گزینه در اختیار کاربر قرار دادیم) رو انتخاب میکنه کلاس active هر کدوم رو حذف میکنه. بعدش با متد end زنجره رو تموم میکنه یعنی الان دوباره داخل this که گزینه انتخاب شده س هستیم. حالا کلاس active  رو اعمال میکنه و اینجاست که رنگ گزینه انتخابی به حالت اننتخابی در اومده. حالا نوبت فرزندیه که نوعش  input هست و اون رو تیک میزنه.

در مورد چند انتخابی یعنی چک باکس : اول از همه میتونیم از متد toggleClass کلاس اکتیو رو روش بدون دردسر کنترل کنیم یعنی با هربار کلیک کلاس active حذف میشه و کلیک بعدی اضافه میشه که خودش یعنی انتخاب و خروج از انتخاب گزینه مورد نظر(خط7). تو خط 8 وضعیت حالت انتخابی گزینه کلیک شده رو بررسی میکنیم و داخل متغیر check قرار میدیم تا ببینم اگه گزینه تیک خورده تیکش رو برداریم و بالعکس. خط 9 تا 13 هم همین کارو بررسی کردیم و انجام دادیم.

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

دانلود فایل پروژه

دوستان عزیز دوست داشتم با آموزش ویدپویی در خدمت شما باشم که متاسفانه نشد. امیدوارم مطلب به دردبخور باشه. در ضمن زیبایی کار شما به استایل های زیبای شما بستگی داره

موفق باشید:.

چه امتیازی به این مقاله می دید؟
نویسنده حامد مودی
دو روزه مسافر دنیاییم دیگه زندگی نامه نمیخواد. میخواد؟

نظرات کاربران

مهران

خییلییییییییییییییی عالی بود

سروش

ممنون خیلی عالی بود 😳

mohammad nikkhah

سلام
لطفا همه اموزش هاتون رو ویدیویی کنین اموزش های متنی قابل فهم نیستند !
ممنون

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 
گزارش مشکل