مهدی ولی خانی (ولیخانی) هستم .متولد دوم خرداد سال 63 . فارغ التحصیل رشته نرم افزار کامپیوتر ، مقطع کاردانی ، دانشگاه جامع علمی - کاربردی واحد داده پردازی. در حال حاضر حرفه ی من طراحی و برنامه نویسی وب می باشد . هدف اصلی من از انتخاب رشته نرم افزار کامپیوتر فقط ورود به دنیای طراحی و برنامه نویسی تحت وب بود . در واقع بزرگترین سرگرمی من طراحی و برنامه نویسی می باشد .(چه بهتر که تحت وب باشه!) ساعات زیادی از وقت روزانه من پشت یک کامپیوتر در اتاقم میگذره . به موسیقی زیاد علاقه دارم . دو سبک موسیقی را بسیار می پسندم . موسیقی اصیل ایرانی و موسیقی راک . رنگ مورد علاقه آبی و تیم مورد علاقه پرسپولیسه .

<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910
RSS 2.0 | Atom 1.0 | CDF
Google Reader
del.icio.us blog.mehdiVK.net latest Posts
Add to my Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online

my Feedster
Add to my AOL
Furl blog.mehdiVK.net latest Posts
Subscribe to Rojo


Total Posts: 191
This Year: 0
This Month: 0
This Week: 0
Comments: 255
newtelligence dasBlog 1.9.6264.0


وبلاگ مهدی ولیخانی
وبلاگ مهدی ولیخانی در رابطه با تکنولوژی دات نت
Sunday, September 07, 2008
CSS attribute selectors ها

یکی از وِیژگی هائی که در CSS 2 اضافه شد و در نسخه سوم نیز گسترش یافت css attribute selector ها هستند ، css attribute selector ها به شما این امکان را میدهند که style های خود را بر اساس مقادیر attribute های تگ های HTML نسبت دهید . فرض کنید میخواهید کد css ی بنویسید که یک آیکون rss به انتهای لینک های اضافه کند که دارای پسوند .rss و باشد ، یا میخواهید به لینک های که مقدار مشخصه title آنها xml است یک آیکون xml اضافه کنید و فونت نوشته را هم تغییر دهید ، کلیه این کارها با استفاده از css attribute selector ها میسر می باشد . در زیر به انواع مختلف استفاده از این ویژگی جالب css خواهیم پرداخت .البته برای تمامی روش های فوق یک روش سنتی هم وجود دارد و آن هم نسبت دادن کلاس خاص به هر المانی است که میخواهیم نوع نمایش خاصی داشته باشد . طبیعتا روش دوم ساده تر و صد البته زمان بر تر و خسته کننده تر از روش اول می باشد .

1- دسترسی به تگ هائی که دارای یک مشخصه هستند:
فرض کنید قرار است یک سری استایل مشخص را برای نمامی تگ هائی که دارای مشخه title هستند نسبت دهیم . کافیست از کد زیر استفاده نمائیم:

[attribue]
        {
              color:brown;
        }
کافیست در کد فوق به جای attribute مقدار title را قرار دهیم . اگر بخواهیم تنها لینک هائی که شامل مشخصه title هستند را هدف قراردهیم  می توانیم از کد زیر استفاده کنیم :
a[attribue]
        {
              color:brown;
        }

2 - برای هدف قراردادن تگ هائی که دارای مشخصه خاصی با یک مقدار مشخص هستند می توانیم از کد زیر استفاده نمائیم:
[attribue=value]
        {
              YOUR CSS
        }
بطور مثال برای تگ های لینکی که دارای مقدار href=http://friendfeed.com هستند می توانیم از کد زیر استفاده نمائیم:
a[href=http://friendfeed.com]
        {
              color:red;
        }

3 - برای هدف قراردادن تگ هائی که شامل یک مشخصه خاص هستند که مقدار این مشخصه حاوی یک کلمه خاص هست:
بطور مثال برای هدف قراردادن  تمامی لینک هائی که در مشخه title آن از کلمه web استفاده شده است می توانیم از کد زیر استفاده نمائیم:
a[title~=web]
        {
              color:red;
        }
توجه داشته باشید که در روش فوق کاراکتر Space جداکننده کلمات از همدیگر می باشد.
در صورتیکه بخواهیم - جداکننده محسوب شود به جای =~ از =| استفاده میکنیم.

4 - برای هدف قراردادن تگ هائی که شامل یک مشخصه خاص هستند که مقدار این مشخصه بک یک عبارت خاص ختم می شود :
به طور مثال با استفاده از کد زیر می توانیم یک آیکون در انتهای لینک های مربوط به فایل های با پسوند mov قرار دهیم .
a[href$='.mov']
        {
              padding-right: 17px;
              background: url(icons/video.png) no-repeat right;
        }

5 - برای هدف قراردان تگ هائی که شامل یک مشخصه خاص هستند که مقدار این مشخصه با یک عبارت خاص شروع می شود:
اگر بخواهیم سناریو فوق را برای لینک هائی که با mailto شروع می شوند پیاده سازی کنیم ، میتوانیم از کد زیر استفاده نمائیم:
a[href ^="mailto:"]
        {
                padding-right: 18px;
                background: url(icons/email.png) no-repeat right;
        }

6 - برای هدف قراردادن تگ هائی که شامل یک مشخصه خاص هستند که مقدار این مشخصه دارای یک عبارت می باشد:
فرض کنید من دوست داشته باشم بقل هر لینکی که href ان حاوی mehdivk هست یک آیکون asp.net قرار دهم ، می توانم از این کد استفاده کنم:
a[href *="mehdivk"]
        {
                padding-right: 17px;
                background: url(icons/aspdotnet.png) no-repeat right;
        }

منابع:
1 - CSS 3 attribute selectors (بخش توسعه دهندگان مرورگر اپرا)
  (  )  ( Comments [1] | Trackback )
Monday, April 28, 2008
استایل فارسی برای فرند فید

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

پی نوشت :
بالاخره مشکلات این سايت userstyles.org هم برطرف شد و شما می توانید این استایل رو بر روی دو افزونه محبوب استایلیش و گریس مانکی نصب نمائید . جهت مشاهده صفحه ابن استایل  و نصب آن کلیک نمائید.
  (  |  )  ( Comments [3] | Trackback )
Thursday, April 10, 2008
Center کردن یک تگ Div در صفحه در استاندارد XHTML

مشخصه align=Center در XHTML پشتیبانی نمی شود ، برای اینکه بتوانید یک تگ div را در موقعیت وسط صفحه  و یا تگ پدر ققرار دهید می توانید از کد CSS زیر استفاده نمائید.

margin:0 auto;

به همین سادگی.
  (  |  )  ( Comments [1] | Trackback )
Saturday, September 15, 2007
تغییر ارتفاع بخش Bookmark bar مرورگر فایرفاکس

به صورت پیش فرض نوار Bookmark فایرفاکس که در پائین Address Bar قرار دارد Bookmark های شما را در یک سطر نمایش میدهد و در صورتیکه تعداد بوک مارک های شما خیلی زیاد باشد و در یک سطر جا نشود به دو سطر انتقال داده نمی شود بلکه از یک فلش در انتهای این بخش استفاده می شود که با کلیک بر روی آن می توانید بوک مارک های بیشتری را ببینید ، برای من که خیلی خوشایند نبود و دوست داشتم که نوار بوک مارک هایم در دو سطر و یا بیشتر (به هر تعداد که بوک مارک دارم)افزایش پیدا کند ، به عبارت دیگر در جستجوی راه حلی برای افزایش ارتفاع این بخش از فایرفاکس بودم ، به صورت معمول و با استفاده از کشیدن انتهای این بخش به پائین که نشد ارتفاعش را زیاد کنم ، جستجو در گوگل مرا به این صفحه هدایت کرد که در آن توضیحی در رابطه با چگونگی افزایش ارتفاع این بخش از فایرفاکس داده شده است.

روش کار به این شکل است که شما باید یک فایل با نام userChrome.css را در شاخه chrome پروفایل خود در فایرفاکس ایجاذ کنید و در این فایل کد زیر را قرار دهید :

/* Multi-row bookmarks toolbar */
#bookmarks-ptf {display:block !important; }
#bookmarks-ptf toolbarseparator {display:inline !important; }
#bookmarks-ptf .bookmark-item { visibility: visible !important;}
#overflow-padder { width: auto !important; } 
/* this controls the length of the bookmarks */
#bookmarks-chevron { display: none !important; }

 

البته به جز این بخش که در واقع محدودیت یک سطری را برای شما برمیدارد با اضافه کردن بخش زیر هم می توانید یک محدودیت برای حداکثر ارتفاع این بخش تعریف کنید ، لذا برای اعمال  این محدودیت کافیست که کد زیر را نیز به انتهای بخش فوق اضافه نمائید.
#PersonalToolbar {max-height:999px !important;}

به جای 999px هم که مقدار مورد نظر خود را وارد نمائید.

در صورتیکه به شاخه پروفایل خود بروید مشاهده می کنید که فایلی با نام userChrome-example.css در این شاخه وجود دارد ، نکته ای که وجود دارد این است که در داخل این فایل مقداری کد های css هم وجود دارد که باید در فایل شما هم باشد ، لذا کدهائی که در این فایل است  را در ابتدای فایل خود و قبل از هر چیز دیگری کپی کنید.
این هم تصویری از بخش بالائی مرورگر فایرفاکس من.



حال اگر نمی دانید که این Profile شما در کجای هارد شما قرار دارد پیشنهاد میکنم این مطلب که شرح محل قرارگیری این پوشه در سیستم عامل های مختلف را نشان می دهد بخوانید.

در صورتیکه با اجرای این روش مشکلی دارید میتوانید در بخش نظرات مطرح کنید و یا بخش نظرات منبع این مطلب را بخوانید.

در انتها فایل آماده UserChrome.css را در قالب یک فایل .rar برایتان آماده کرده ام که می توانید از آن استفاده کنید.

Technorati Tags: , ,

  (  |  )  ( Comments [2] | Trackback )
Friday, September 14, 2007
زبان XHTML و مشخصه Height=100% برای تگ Table - بخش دوم

در بخش اول این مقاله به عدم پشتیبانی XHTML از Height=100% اشاره کردیم ، به بیان یک راه حل برای حل این مشکل پرداختیم ، راه حل ارائه شده مشکل را بصورت کامل در مرورگر FireFox حل می کرد اما همچنان در IE با مشکل Scroll داشتن صفحه روبرو بودیم ، در این پست تمام تلاش خود را برای ارائه یک راه حل (شاید هم تنها راه حل) برای از بین بردن این Scroll آزاردهنده خواهیم کرد .

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

بخش 1 - اضافه کردن css
در صورتیکه بخش css مطلب قبلی را به یاد داشته باشید بخشی که باعث میشد که Scroll در مرورگر IE ایجاد شود بخش زیر بود :

#MainCell
{
    background-color:gray;
    height:100%;
}
در صورتیکه بتوانیم از دستورات شرطی css استفاده کنیم و بخش height=100% را به شکلی تنظیم کنیم که تنها وقتی مرورگری به غیر از IE بود در صفحه استفاده شود مشکل تا حدودی حل می شود ، اشتباه نکنید قرار نیست ما این بخش را با استفاده از جاوا اسکریپت پیاده سازی کنیم ، این بخش را بوسیله قدرت css پیاده سازی خواهیم کرد.

مرورگر IE تا نسخه 6 از این نوع css پشتیبانی نمی کرد:
html>body #MainCell
{ height:100%; }
پس اگر قرار باشد بخشی را در فایل css داشته باشیم که بخواهیم در مرورگری به غیر از IE استفاده شود از همین بخش استفاده می کردیم ، کافی بود آن بخش اختصاصی را به شیوه فوق در فایل css   تعریف کنیم ، اما مشکل اینجاست که IE 7.0 از این نوع css هم پشتیبانی می کند ، اما خوب باز هم یک ترفند دیگری وجود دارد ، آن هم استفاده از css زیر است که IE 7.0 هم آن را پشتیبانی نمی کند:
html>/**/body #MainCell
{
        height:100%;
}
با این کار تونستیم بخشی که مشکل ساز هست را در IE استفاده نکنیم ، اما با حذف این بخش دیگر Footer به انتهای صفحه منتقل نمی شود ، اینجاست که جاوا اسکریپت این مشکل را حل خواهد کرد:

بخش 2 - اضافه کردن Javascript ی که تنها در IE اجرا شود
سناریوی این بخش هم به این صورت است که یک متد را در دو رویداد PageLoad , PageResize صفحه صدا میزنیم ، در متد فراخوانده شده کاری که می کنیم این است که ارتفاع صفحه را در یک متغیر ذخیره کرده ، دو مقدار ثابت 150 , 75 پیکسل که مربوط به Header , Footer هستند را از آن کم کرده مقدار باقی مانده که همانا! مقدار فضای باقی مانده از صفحه است را به سلولی که قرا است محتویات صفحه در آن قرار بگیرد نسبت می دهیم ، به این شکل:

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <style> body , html { height:100%; margin:0px; } #MainTable { height:100%; width:100%; } #MainCell { background-color:gray; height:100%; } #HeaderCell { height:150px; background-color:blue; } #FooterCell { height:75px; background-color:red; } </style> </head> <body onload="Page_OnLoad();" onResize="Page_OnLoad();"> <table id="MainTable"> <tr><td id="HeaderCell"></td></tr> <tr><td id="MainCell"></td></tr> <tr><td id="FooterCell"></td></tr> </table> <script type="text/javascript" language="javascript"> function Page_OnLoad() { document.getElementById("MainCell").style.height =
document.body.clientHeight - 250; } </script> </body> </html>

با این دو بخش مشکل به صورت کامل حل شد ، اما شاید این سوال برای شما پیش بیاید که چرا استفاده از تگ های Div نسبت به این روش سخت تر هست ، برای اینکه که سادگی و سختی و مشکلاتی که در هر روش وجود دارد را شما خودتان ببینید و خودتان تصمیم بگیرید که در صورت نیاز از کدام روش استفاده نمائید آن روش را هم در یک پست جداگانه ارائه خواهم داد ، اما در طراحی روز دنیا از Table دیگر استفاده نمی شود و این روش به نوعی منسوخ باشد!

نمونه صفحه که هم در IE , هم در FF کار می کند را می توانید از زیر دانلود کنید:


موفق باشید.

Technorati Tags: , , , , , ,

  (  |  |  )  ( Comments [1] | Trackback )
Thursday, October 05, 2006
روشی برای پیاده سازی پیغام های در حال پردازش ...
یکی از نیاز های سیستم های مبتنی بر Ajax داشتن پیغام های Waiting می باشد . با استفاده از یک سری عکس های gif . و نوشته می توان وضعیت فعلی را به کاربر گزارش داد.
روش های مختلفی برای پیاده سازی این داستان می باشد . یکی از این روش ها که من خیلی دوست دارم ، روش قفل کردن صفحه می باشد . در این روش به همراه نمایش پیامی مبنی بر در حال پردازش بودن صفحه ، صفحه خاکستری (یا هر رنگ دیگری) می شود به نحوی که کاربر نمیتواند بر روی عناصر موجود در صفحه کلیک کنید . ناچارا کاربر باید تا اتمام کار منتظر بماند .
در زیر به آموزش پیاده سازی این روش می پردازیم . روش زیر بر روی دو مرورگر FireFox , Internet Explorer قابل اجرا می باشد .
تنها با چند خط css و جاوا اسکریپت می توان چنین سیستمی را پیاده سازی کرد . برای شروع کار ما صفحه زیر را در نظر می گیرم..
<html>
<head>
</head>
<body>
<input type="submit" value="SubmitForm" />
</body>
</html>

می خواهیم الگوریتمی را پیاده سازی کنیم که صفحه به محض کلیک بر روی کنترل Submit قفل شود تا پردازش سمت سرور بدون مشکل شروع و نهایتا پایان یابد . بعد از اتمام پردازش صفحه به حالت عادی بازگردد. کار قفل کردن صفحه و نمایش پیغام را با استفاده از دو تک DIV تو در تو پیاده سازی می کنیم ...
صفحه html را به شکل زیر کامل میکنیم .
<html>
<head>
</head>
<body>
<div align="center" id="FreezePane" class="FreezePaneOff">
<div id="InnerFreezePane" class="InnerFreezePane"> </div>
</div>
<input type="submit" value="SubmitForm" />
</body>
</html>

در صفحه فوق تگ DIV که نام آن FreezePane می باشد نقش اصلی را بازی می کند . .
الگوریتم هم به شکل زیر می باشد :
با کلیک کاربر بر روی دکمه توسط جاوا اسکریپت کلاس FreezePane از FreezePaneOff به FreezePaneOn تبدیل شود
بخش جاوا اسکریپت را به کد صفحه اضافه می کنیم . همان بخشی که وظیفه تغییر کلاس ها را بر عهده دارد .
<html>
<head>
<script language="JavaScript">
function FreezeScreen(msg)
{
scroll(0,0);
var outerPane = document.getElementById('FreezePane');
var innerPane = document.getElementById('InnerFreezePane');
if (outerPane) outerPane.className = 'FreezePaneOn';
if (innerPane) innerPane.innerHTML = msg;
}
</script>
<head>
<body>
<div align="center" id="FreezePane" class="FreezePaneOff">
vdiv id="InnerFreezePane" class="InnerFreezePane"> </div>
</div>
<input type="submit" value="SubmitForm" />
</body>
</html>

چیزی که در این میان صحبتی از آن نشده است CSS است که به 90 درصد کار را انجام میدهد .
سه کلاس FreezePaneOff و FreezePaneOn و InnerFreezePane را هم به شکل زیر به صفحه اضافه می کنیم :
<html>
<head>
<script language="JavaScript">
function FreezeScreen(msg)
{
scroll(0,0);
var outerPane = document.getElementById('FreezePane');
var innerPane = document.getElementById('InnerFreezePane');
if (outerPane) outerPane.className = 'FreezePaneOn';
if (innerPane) innerPane.innerHTML = msg;
}
</script>
<style type="text/css">
.FreezePaneOff
{
visibility: hidden;
display: none;
position: absolute;
top: -100px;
left: -100px;
}
.FreezePaneOn
{
position: absolute;
top: 0px;
left: 0px;
visibility: visible;
display: block;
width: 100%;
height: 100%;
background-color: #666;
z-index: 999;
filter:alpha(opacity=85);
-moz-opacity:0.85;
padding-top: 20%;
}
.InnerFreezePane
{
text-align: center;
width: 66%;
background-color: #171;
color: White;
font-size: large;
border: dashed 2px #111;
padding: 9px;
}
</style>
</head>
<body>
<div align="center" id="FreezePane" class="FreezePaneOff">
<div id="InnerFreezePane" class="InnerFreezePane"> </div>
</div>
<input type="submit" value="SubmitForm" />
</body>
</html>

تنها چیزی که باقی می ماند این است که در Event کلیک دکمه تابع FreezeScreen را صدا بزنیم که الگوریتم ما شروع شود .
<html>
<head>
<script language="JavaScript">
function FreezeScreen(msg)
{
scroll(0,0);
var outerPane = document.getElementById('FreezePane');
var innerPane = document.getElementById('InnerFreezePane');
if (outerPane) outerPane.className = 'FreezePaneOn';
if (innerPane) innerPane.innerHTML = msg;
}
</script>
<style type="text/css">
.FreezePaneOff
{
visibility: hidden;
display: none;
position: absolute;
top: -100px;
left: -100px;
}
.FreezePaneOn
{
position: absolute;
top: 0px;
left: 0px;
visibility: visible;
display: block;
width: 100%;
height: 100%;
background-color: #666;
z-index: 999;
filter:alpha(opacity=85);
-moz-opacity:0.85;
padding-top: 20%;
}
.InnerFreezePane
{
text-align: center;
width: 66%;
background-color: #171;
color: White;
font-size: large;
border: dashed 2px #111;
padding: 9px;
}
</style>
</head>
<body>
<div align="center" id="FreezePane" class="FreezePaneOff">
<div id="InnerFreezePane" class="InnerFreezePane"> </div>
</div>
<input type="submit" value="SubmitForm" onclick="FreezeScreen('Your Data is Being Processed...');" />
</body>
</html>

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


این مقاله بر گرفته از مقاله آقای Scott Mitchell با عنوان Prevent Users from Submitting a Form Twice می باشد که در آدرس زیر قابل مشاهده است .
http://www.4guysfromrolla.com/webtech/100406-1.shtml

نویسنده این مقاله یک نسخه نمایشی هم برای این مطلب آماده کرده است که در آدرس زیر قابل مشاهده می باشد .
http://www.4guysfromrolla.com/demos/DontSubmitTwice2.htm


در صورتیکه نیاز به فایل های gif Animator برای پیاده سازی سیستم فوق دارید سه وب سایت زیر به شما در این راه کمک خواهند کرد : موفق باشید .

  (  |  |  )  ( Comments [0] | Trackback )