پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

طراحی باکس جستجو با فتوشاپ و CSS

web-search-box

از جمله ابزارهایی که در گوشه و کنار بیشتر سایت ها و وبلاگ ها به چشم می خورد، امکان جستجو و باکس مربوط به آن است که عموما به صورت گرافیکی و به کمک برنامه هایی نظیر فتوشاپ در کنار کدنویسی HTML و CSS ساخته شده اند، البته روش های مختلفی ممکن است برای ایجاد این گونه جلوه ها مورد استفاده قرار گیرد، اما در آموزش پیش رو می خواهیم یکی از راحت ترین و در عین حال استانداردترین آنها را توضیح دهیم، لذا اگر می خواهید برای سایت یا وبلاگتان چنین قابلیتی ایجاد کنید یا اینکه طراح قالب هستید و علاقمند به فراگیری شیوه های متفاوت، با ادامه مطلب همراه ما باشید.

ساخت چارچوب باکس با HTML


همان طور که پیش تر گفتیم، باکس های جستجو در واقع فرمهای HTML هستند که با افزودن دکمه ارسال (submit) و پس زمینه گرافیکی تکمیل می شوند، پس آنچه ما در گام اول احتیاج داریم ساخت یک فرم html، یک فیلد از نوع input و یک دکمه ارسال یا submit است که در نمونه کد زیر این کار را انجام داده ایم.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>وبگو | طراحی فیلد جستجو</title>
<!-- https://webgoo.ir -->
</head>
<body>
<div class="search-box">
<form action="#" method="get">
<input class="search-input" type="text" value="جستجو..." maxlength="125">
<input class="search-submit" type="submit" value="">
</form>
</div>
</body>
</html>
توضیح:
- همان طور که ملاحظه می کنید، فرم html بالا داخل یک بلاک div با کلاس فرضی search-box قرار دارد، در ادامه خواهیم دید که این بلاک در واقع نقش پس زمینه را برای باکس جستجو بازی می کند.
- فیلد input و دکمه submit نیز هر کدام یک کلاس css فرضی دارند که برای اعمال تغییرات ظاهری از آنها استفاده خواهیم کرد.

استایل css باکس جستجو


پس از نوشتن چارچوب html کار، باید فرم اولیه آن را با استایل css شکل دهیم.
<style type="text/css">
.search-box{
    width:200px;
    height:28px;
    background:#000 url(search-box.jpg);
    display:inline-block;
    direction:rtl;
    overflow:hidden;/*IE 6*/    
}
.search-input{
    width:166px;
    height:25px;
    background-color:transparent;
    display:inline-block;
    border:0px;
    padding:2px;
    font-family:Tahoma, Geneva, sans-serif;
    font-size:11px;
    color:#666;
    line-height:16px;/*IE */
}
.search-input:focus{
    outline:none;
}
.search-submit{
    width:25px;
    height:25px;    
    border:0px;
    padding:0px;
    background-color:transparent;
    display:inline-block;
    cursor:pointer;
}
</style>
توضیح:
- به این دلیل که ما از یک تصویر گرافیکی برای پس زمینه استفاده خواهیم کرد، لذا پس زمینه عناصر موجود در فرم را به صورت نامرئی (transparent) و بدون خط حاشیه (border) تنظیم می کنیم.
- در بلاک search-box که در واقع بلاک اصلی باکس جستجو است، از یک تصویر با نام search-box.jpg به عنوان پس زمینه استفاده کرده ایم، این تصویر را باید به صورت نمونه زیر در فتوشاپ (با ابعاد 200 در 28 پیکسل) طراحی کنید.
search-box
برای طراحی می توانید از ابزار Rounded Rectangle Tool و قابلیت Blending Options در فتوشاپ استفاده کنید.
- برای تنظیم جلوه های ظاهری فیلد input و دکمه submit نیز از دو کلاس css با نام های دلخواه search-input و search-submit استفاده کرده ایم، به این طریق تقریبا بیشتر ویژگی های مربوط به سفارشی سازی توسط استایل css قابل تنظیم است.
نکته: اگر دقت کرده باشید، برای حالت focus کلاس search-input از مقادیر outline و none استفاده کرده ایم، این کار برای غیر فعال کردن نمایش خط حاشیه فرم (در حالتی که کاربر در فیلد کلیک می کند) در برخی مرورگرها مانند گوگل کروم و سافاری است، علاوه بر این برای سازگاری با نسخه های قدیمی مرورگر اینترنت اکسپلورر، خاصیت overflow و line-height نیز در استایل استفاده شده است.

افزودن قابلیت تعاملی به باکس جستجو


باکس جستجوی ما تقریبا آماده شده است، اما قبل از اینکه پیش نمایش کار را با هم ببینیم، بد نیست یک قابلیت تعاملی نیز به فیلد اضافه کنیم، این قابلیت تعاملی می تواند بسته به هدف و سلیقه شما، طرح های مختلف داشته باشد و در آن از css یا جاوا اسکریپت و یا ترکیب این دو استفاده شود، اما در اینجا قصد داریم با چند تابع جاوا اسکریپت ساده، قابلیت محو شدن و آشکار شدن خودکار نوشته پیش فرض داخل فیلد را به فرم اضافه کنیم، بدین منظور کد جاوا اسکریپت زیر را نیز به صفحه خود اضافه می کنیم (در بالای صفحه و بین تگ های head).
<script type="text/javascript">
//<![CDATA[
function searchClear(thisfield, defaulttext, color){
    if (thisfield.value == defaulttext){
        thisfield.value = "";
        if (!color){
            color = "666666";
        }
        thisfield.style.color = "#" + color;
    }
}
function searchShow(thisfield, defaulttext, color){
    if (thisfield.value == ""){
        thisfield.value = defaulttext;
        if (!color){
            color = "666666";
        }
        thisfield.style.color = "#" + color;
    }
}
//]]>
</script>
نکته: برای فراخوانی توابع بالا، از رویدادهای onclick (برای حالتی که کاربر در فیلد کلیک می کند) و onblur (برای حالتی که کاربر خارج از فیلد کلیک می کند) استفاده کرده و فیلد input را به صورت زیر ویرایش می کنیم.
<input class="search-input" type="text" value="جستجو..." maxlength="125" onclick="searchClear(this, 'جستجو...')" onblur="searchShow(this, 'جستجو...')">

کد نهایی و پیش نمایش آنلاین


در زیر یک نمونه کامل از باکس جستجو به همراه پیش نمایش آنلاین آن را می توانید ملاحظه و بررسی کنید.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>وبگو | طراحی فیلد جستجو</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    font-size:12px;
    direction:rtl;
}
.search-box{
    width:200px;
    height:28px;
    background:#000 url(search-box.jpg);
    display:inline-block;
    direction:rtl;
    overflow:hidden;/*IE 6*/    
}
.search-input{
    width:166px;
    height:25px;
    background-color:transparent;
    display:inline-block;
    border:0px;
    padding:2px;
    font-family:Tahoma, Geneva, sans-serif;
    font-size:11px;
    color:#666;
    line-height:16px;/*IE */
}
.search-input:focus{
    outline:none;
}
.search-submit{
    width:25px;
    height:25px;    
    border:0px;
    padding:0px;
    background-color:transparent;
    display:inline-block;
    cursor:pointer;
}
</style>
<script type="text/javascript">
//<![CDATA[
function searchClear(thisfield, defaulttext, color){
    if (thisfield.value == defaulttext){
        thisfield.value = "";
        if (!color){
            color = "666666";
        }
        thisfield.style.color = "#" + color;
    }
}
function searchShow(thisfield, defaulttext, color){
    if (thisfield.value == ""){
        thisfield.value = defaulttext;
        if (!color){
            color = "666666";
        }
        thisfield.style.color = "#" + color;
    }
}
//]]>
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است یا پشتیبانی نمی شود!
</noscript>

<div class="search-box">
<form action="#" method="get">
<input class="search-input" type="text" value="جستجو..." maxlength="125" onclick="searchClear(this, 'جستجو...')" onblur="searchShow(this, 'جستجو...')">
<input class="search-submit" type="submit" value="">
</form>
</div>
<hr>
به طور خلاصه باکس بالا از یک بلاک با پس زمینه ثابت، یک فرم html و دو فیلد از نوع input و submit تشکیل شده است.
</body>
</html>
پیش نمایش
دسته بندی: مهارتهای وب » طراحی وب
related مطالب بیشتر:
زیبا سازی فرم های وب با CSS
چگونه برای سایت یا وبلاگ خود قالب طراحی کنیم؟
طراحی قالب سه بعدی وب با فتوشاپ و CSS
آموزش نحوه کاهش حجم تصاویر وب با فتوشاپ
آموزش انتقال قالب از فتوشاپ به کد HTML و CSS
دیدگاه
more ۱۶ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
محمود
۲۰:۱۳ ۱۴۰۰/۱۱/۲۵
خیلی ممنون و متشکر.
محمود
۱۶:۲۲ ۱۴۰۰/۱۱/۲۵
سلام مهندس
بسیار ممنون و سپاس
کدها بسیار خوب کار کرد. فقط وقتی که باکس سرچ خالی است با کلیک روی سرچ حروف و ارقام زیادی از کدهای مختلف را نشان می دهد. یعنی کلاً صفحه تغییر می کند. اگر ممکن است کدها را طوری تغییر بدهید که موقعی که باکس سرچ خالی است و روی سرچ کلیک می شود اتفاقی نیافتد .
با تشکر
تغییرات مد نظر روی کدهای یادداشت قبلی اعمال شد.
محمود
۱۱:۴۲ ۱۴۰۰/۱۱/۲۳
سلام
من کد زیر را برای انجام جستجوی محتوای هر صفحه پیدا کردم. ولی همینطور که می بینید با کلمات و جملات لاتین مشکلی ندارد. ولی کلمه های فارسی را آشکار نمی کند. لطفن کمک کنید و کد را طوری تغییر بدهید که کلمات و جمله های فارسی را نیز آشکار کند. اگر به مکان کلمه هم برود که چه بهتر. مثلا اگر کلمه مورد نظر در پایین صفحه بود، با کلیک روی جستجو کلمه را در مکان خودش نمایش دهد. با تشکر
<script>
function highlightSearch() {
var text = document.getElementById("query").value;
if(text.length > 0){
text = encodeURIComponent(text);
var query = new RegExp("(" + text + ")", "gim");
var e = document.getElementById("searchtext").innerHTML;
e = encodeURIComponent(e);
var enew = e.replace(/(<b>|<\/b>)/igm, "");
enew = e.replace(/(%3Cb%3E|%3C%2Fb%3E)/igm, "");
document.getElementById("searchtext").innerHTML = enew;
var newe = enew.replace(query, "<b>$1</b>");
newe = decodeURIComponent(newe);
document.getElementById("searchtext").innerHTML = newe;
}
}
</script>
<style>
#searchtext b{
background-color: #FF9;
color: #555;
}
div {
padding: 10px;
}
</style>
<body>
<div id="search" name="search" dir="rtl">
<input name="query" id="query" type="text" size="30" maxlength="30" />
<input name="searchit" type="button" value="Search" onclick="highlightSearch()" />
<div id="searchtext">
<p>
The emergency meeting also saw a number of reforms proposed, including an agreed change to FIFA's code of ethics, allowing details of ongoing investigations to be released.
</p>
</ol>
<span style="color: #ff00ff;">گردش مواد در بدن</span>
یاخته برای اینکه به حیات خود ادامه دهد ، نیاز دارد با پیرامون خود تبادل مواد انجام دهد. در جانداران پر یاخته ای این فرایند توسط دستگاه گردش مواد صورت می گیرد.
<ol>
<li>دستگاه گردش مواد در انسان از چه بخش هایی تشکیل شده است؟</li>
</ol>
جواب: <span style="color: #800080;">از قلب، رگ ها و خون تشکیل شده است.</span>
</body>
کد بالا برای جستجو و هایلایت (Highlight) کردن متن با JavaScript ویرایش و برای حروف فارسی بهینه سازی و سازگار شد. کد فقط رنگ پس زمینه متن را تغییر می دهد، برای انتقال به کلمه مورد نظر نیاز به توسعه کد است که انجام آن خیلی زمانبر می شود.
سید جلال
۱۷:۳۴ ۱۳۹۶/۰۸/۲۵
با سلام من قصد دارم یک باکس سرچ درست کنم که بتونه از یک لیست که نام و نام خانوادگی و تعداد نفرات در آن مشخص شده سرچ کنه
برای این منظور صرف طراحی بخش کاربری کفایت نمی کند، باید برنامه نویسی PHP و کار با پایگاه داده MySQL بلد باشید.
زینب
۱۵:۲۳ ۱۳۹۶/۰۸/۰۶
سلام می خواستم بدونم اگه به جای تگ input از کنترل textbox در asp استفاده کنیم چجوری از کدهای script استفاده کنیم؟ آخه در کنترل های textbox در asp رویدادهای onclick و onblur و onfocus نیست و نمیشه از این ویژگی ها استفاده کرد. من هم حتما باید از textbox ها استفاده کنم چون فرم دارم طراحی می کنم و بعدا برای textbox ها باید کدنویسی کنم.
لطفا منو راهنمایی کنید. خیلی دنبال این موضوع هستم و راه حلی پیدا نمیکنم. خیلی کارم گیر کرده.
ممنون میشم
لطفا در این رابطه به سایت های مرتبط با ASP.NET مراجعه کنید، تا آنجا که اطلاع داریم می توانید رویداد را با کدهای جاوا اسکریپت به تگ input نسبت دهید، در این حالت تگ input باید ID خاص خود را داشته باشید و در هنگام بارگذاری صفحه رویداد به آن نسبت داده شود، مثال:
<script type="text/javascript">
window.onload = function(){
var input = document.getElementById('my-input');
var button = document.getElementById('my-button');

button.onclick = function(){
alert(input.value);
}
}
</script>
<input id="my-input" type="text" value="1">
<input id="my-button" type="button" value="Click">
همچنین می توانید از addEventListener نیز در جاوا اسکریپت استفاده کنید.
زهرا
۱۵:۳۹ ۱۳۹۶/۰۵/۱۹
سلام
من از کدها استفاده کردم و همه چیز درست بود فقط از کدهای جاوا اسکریپت نتونستم استفاده کنم. یعنی من این کدها رو در قسمت head گذاشتم و فراخوانی هم کردم اما وقتی میرم تو سایت اجرا می کنم و تو باکس کلیک که میکنم متنی که داخل باکس هست به صورت خودکار پاک نمیشه.
اگه ممکنه راهنمایی کنید چیکار کنم که این عمل رو درست انجام بده.
البته من سایز باکس و تصویر رو هم تغییر دادم و فکر نمیکنم کدهای جاوا اسکریپت برای پاک شدن متن هنگام کلیک و برگشتن دوباره آن ربطی به تغییرات ایجاد شده در css داشته باشد.
ممنون از مطالبتون
باید تمام قسمت ها مطابق با با الگوی آموزش باشد، در تگ input رویداد onclick و onblur را لحاظ کردید؟
نوید
۱۱:۴۴ ۱۳۹۵/۰۵/۲۳
سلام ممنون از سایت خوبتون.
من تمام این کدارو وارد کردم ولی اون تصویر پس زمینه نشون نمیده ، تصویرم ذخیره کردم
لطفا آدرس صفحه را جهت بررسی درج کنید!
آرزو
۲۰:۱۴ ۱۳۹۳/۰۷/۲۸
با سلام
من یه باکس سرچ طراحی کردم وقتی که باکسم هم اندازه ی اندازه های داده شده در این آموزش بود مشکلی نداشتم اما به محض تغییر در سایز باکس مورد نظر همه چیز خراب شد به این صورت که عکس button با یه فاصله ی 40px که مربوط به دکمه بود از border باکس اصلی فاصله گرفت و دقیقا زیر کلمه جستجو قرار گرفت (این در حالی بود که دکمه، دقیقا کنار input قرار داشت و پایین و یا بالا نرفته بود) یعنی در حالت کلی مشکل اصلیم مربوط به جابجا شدن عکسی بود که برای button در فتوشاپ گذاشته بودم. مشکل از کجاست؟ لطفا راهنماییم کنید. با تشکر
سلام
برای تغییر اندازه باکس باید تمام width های مرتبط را به میزانی مساوی افزایش دهید، به طور مثال width در کلاس search-box و search-input باید به یک مقدار افزایش داشته باشد (به فرض + 20 شود)، اگر این تناسب رعایت شود دلیلی برای بهم ریختن فرم وجود ندارد.
مهدی
۱۶:۱۸ ۱۳۹۳/۰۵/۲۳
عالی و مفید
مینا
۱۶:۵۲ ۱۳۹۲/۱۱/۲۵
سلام ببخشید خییلی ممنون بسیار زیبا تونستم ایجادش کنم اما میشه کمکم کنین چطور اون دکمه سرچ رو فعال کنم که عمل جستجو رو انجام بده؟؟؟
سلام
برای فعال کردن دکمه باید برنامه نویسی PHP یا سایر زبان های سمت سرور بلد باشید، البته از جستجوی گوگل برای سایت ها و وبلاگ ها نیز می توانید استفاده کنید (که آموزش آن در سایت وجود دارد، عبارت "جستجو" را در قسمت جستجوی سایت وارد کنید).
۱۰:۲۳ ۱۳۹۱/۱۰/۱۰
با سلام و درود
استاد عزیز که پاسخ ها را می نویسی
شما باید در قالب سایتتان تمام مشکلات احتمالی را برطرف کنید و اگر دسترسی ندارید به برنامه نویس محترم بگویید که از font face استفاده کند که اگر هم بر فرض محال فونت تاهوما ایراد داشت سایت شما مشکل نداشته باشه
یک برنامه نویس موفق همیشه همه جوانب رو در نظر میگیره
با تشکر (در ضمن از لحن حرف زدنم ناراحت نشید اگر هم شدید معذرت میخوام من قصدم خیر خواهی بود)
سلام
از نقد سازنده شما ممنونیم، اما مشکل (بالا) از سیستم کاربر بوده و ارتباطی به سایت ندارد، فونت Tahoma (در کنار Geneva, sans-serif, Arial, Helvetica و...) جزء فونت های استاندارد و پیش فرض سیستم عامل ها است که در اصطلاح به آنها فونت های امن وب (web-safe) می گویند و تنها در صورتی دچار مشکل می شود که به فرض سیستم کاربر دچار مشکل باشد، خاصیت font face در css نسخه 3 معرفی شده و در مرورگرهای قدیمی یا در برخی دستگاه ها پشتیبانی نمی شود.
به هر صورت خیلی ممنون از اینکه یادآوری کردید.
es
۱۲:۰۷ ۱۳۹۱/۰۹/۲۰
ممنون از پاسختون این طور که متوجه شدم کل سیستم دچار مشکل شده و فونت ها دچار مشکل شدن
thanx
es
۱۱:۲۴ ۱۳۹۱/۰۹/۲۰
در فایرفاکس هم این شکله:
http://ibt.hostesr.com/img/dda6e957f1e5.png
وقتی فونت Tahoma در سیستم قابل دسترس نباشد یا اینکه مشکلی داشته باشد، مرورگر از فونت پیش فرض استفاده می کند که همان Arial است.
es
۱۱:۰۰ ۱۳۹۱/۰۹/۲۰
سلام
من یک سری فونت نصب کردم بعد از اون سایت شما به این شکل در اومد:
http://upload.tehran98.com/images/pnhxd19v1bf83dbpj835.png
حالا کدوم فونت ها رو پاک کنم تا درست بشه؟
سلام
در حال حاضر سایت از فونت استاندارد Tahoma استفاده می کند، پس باید مشکلی در این فونت وجود داشته باشد، فونت Tahoma True Type به صورت پیش فرض در ویندوز وجود دارد و در سایت های فارسی زبان به طور گسترده استفاده می شود، باید نسخه اصلی را جایگزین نسخه فعلی کنید.
mid
۲۲:۴۹ ۱۳۹۱/۰۹/۱۹
سلام
من یه باکس سرچ با ابعاد بزرگتر طراحی کردم و فقط سایز css هاتون رو با طراحیم مچ کردم اما نتونستم طراحی کنم؟!!
مشکل چیه ؟ دقیقا همین کدها فقط تغییر در سایز باکس ها و button
سلام
باید اندازه ها برای همه عناصر متناسب تغییر کنند و بهتر است بلاک اصلی یک مقدار عرض بیشتر داشته باشد (تا دکمه ارسال به پایین هدایت نشود)، برای تست و اطمینان از نحوه نمایش عناصر می توانید از تکنیک زیر استفاده کنید:
overflow:hidden را از کد css حذف کنید، برای background-color ها دو رنگ متمایز در نظر بگیرید تا دقیقا محل فیلد و دکمه در کنار هم مشخص شود، اگر دکمه ارسال مشخص نبود یا به پائین کشیده شده بود باید عرض بلاک search-box را بیشتر در نظر بگیرید.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
2 × 6
20 × 20
=