آموزش آژاکس

ارسال شده توسط administrator
12. أوت 2010 11:42

 

 

این مقاله، یک برنامه نمونه (sample application) ایجاد می کند که از ویژگی های AJAX ASP.NET استفاده می کند.

شما در این مقاله، برنامه ای خواهید ساخت که صفحات اطلاعات کارمندان را از بانک اطلاعاتی نمونه AdventureWorks نمایش می دهد. این برنامه از کنترل UpdatePanel برای ریفرش کردن تنها بخشی از صفحه که تغییر پیدا کرده است، استفاده می کند؛ بدون اینکه page flashیی که با post back اتفاق می اقتد.این کار، "آپدیت جزیی صفحه" (partial-page update) نامیده می شود. همچنین برنامه نمونه از کنترل UpdateProgress، جهت نمایش پیام وضعیت، هنگامی که آپدیت جزیی صفحه در حال اجرا است، استفاده می کند.

 

پیش نیازها

شما برای پیاده سازی این مقاله، به موارد زیر احتیاج دارید:

  • Microsoft Visual Studio 2005 یا Microsoft Visual Web Developer Express.
  • یک وب سایت ASP.NET با قابلیت AJAX
  • بانک اطلاعاتی نمونه AdventureWorks.

ایجاد وب سایت ASP.NET

وب سایتی که بطور پیش فرض در ASP.NET ایجاد می کنید، قابلیت Microsoft Ajax را ساپورت می کند.

ایجاد یک وب سایت ASP.NET با قابلیت AJAX

  1. Visual Studio را باز کنید.
  2. در منوی File، روی New Web Site کلیک کنید.  ( پنجره New Web Site ظاهر می شود.)
  3. زیر Visual Studio installed templates، گزینه ASP.NET Web Site را انتخاب کنید.
  4. مکان (location) و زبان را وارد کنید و سپس OK کنید.

 

اضافه کردن کنترل UpdatePanel به صفحه وب ASP.NET

بعد از اینکه یک وب سایت ASP.NET ایجاد کردید، باید یک صفحه وب ایجاد کنید که حاوی کنترل UpdatePanel باشد. قبل از اینکه کنترل UpdatePanel را به صفحه اضافه کنید، باید یک کنترل ScriptManager اضافه کنید. کنترل UpdatePanel، وابسته به کنترل ScriptManager، جهت مدیریت کردن آپدیت جزیی صفحه، است.

ایجاد یک صفحه وب ASP.NET

1. در Solution Explorer، روی نام سایت کلیک راست و سپس روی Add New Item کلیک کنید.

پنجره Add New Item ظاهر می شود.

2. زیر Visual Studio installed templates، گزینه Web Form را انتخاب کنید.

3. صفحه جدید Employees.aspx را نامگذاری کنید و تیک گزینه Place code in separate file را بردارید.

4. زبانی را که می خواهید استفاده کنید، انتخاب کنید.

5. روی Add کلیک کنید.

6. به ویووی Design سوییچ کنید.

7. در تب AJAX Extensions در toolbox، روی کنترل ScriptManager دابل کلیک کنید تا آن را به صفحه اضافه کنید.

clip_image001

8. یک کنترل UpdatePanel از toolbox درگ کنید و و زیر کنترل ScriptManager دراپ کنید.

clip_image002

 

اضافه کردن محتوا (content) به کنترل UpdatePanel

کنترل UpdatePanel، آپدیت جزیی صفحه را اجرا می کند و محتوایی را که باید بطور مجزا از بقیه صفحه آپدیت شود، تعیین می کند. در این بخش ار مقاله، باید یک کنترل محدود به داده ها (data-bound) اضافه کنید که داده های بانک اطلاعاتی AdventureWorks را نمایش می دهد.

1. در تب Data در toolbox، یک کنترل GridView به ناحیه قابل ویرایش کنترل UpdatePanel درگ کنید.

2. در منوی GridView Tasks، روی Auto Format کلیک کنید.

3. در پنل Auto Format، زیر Select a scheme، گزینه Colorful را انتخاب و سپس OK کنید.

4. در منوی GridView Tasks، گزینه <New data source> را از لیست Choose Data Source انتخاب کنید.

ویزارد Data Source Configuration ظاهر می شود.

5. زیر Where will the application get data from، گزینه Database را انتخاب و سپس OK کنید.

6. برای مرحله Choose Your Data Connection، در ویزارد Configure Data Source، یک کانکشن به بانک اطلاعاتی AdventureWorks ایجاد کنید و سپس روی کلیک کنید.

7. در مرحله Configure the Select Statement، گزینه Specify a custom SQL statement or stored procedure را انتخاب و سپس روی Next کلیک کنید.

8. در مرحله Define Custom Statement or Stored Procedures، در تب SELECT، عبارت SQL زیر را وارد کنید:

SELECT FirstName, LastName FROM HumanResources.vEmployee ORDER BY LastName, FirstName

9. روی Next کلیک کنید.

10. روی Finish کلیک کنید.

11. در منوی GridView Tasks، چک باکس Enable paging را فعال کنید.

12. تغییرات را ذخیره کنید، و CTRL+F5 را فشار دهید تا صفحه را در مرورگر مشاهده کنید.

توجه داشته باشید هنگام انتخاب صفحه های داده ها، هیچ page flashیی وجود ندارد. به این دلیل که صفحه مورد نظر هیچ postbsck یا هربار آپدیت کردن کل صفحه را اجرا نمی کند.

 

اضافه کردن کنترل UpdateProgress به صفحه

1. کنترل UpdateProgress، هنگام request محتوای جدید کنترل UpdatePanel،یک پیام وضعیت (status message)، نشان می دهد.

2. یک کنترل UpdateProgress از تب AJAX Extensions درtoolbox، روی صفحه درگ کنید و آن را زیر کنترل UpdatePanel دراپ کنید.

3. کنترل UpdateProgress را انتخاب کنید، و در پنجره Properties، پراپرتی AssociatedUpdatePanelID را روی UpdatePanel1 تنظیم کنید.

این کار، کنترل UpdateProgress را به کنترل UpdatePanel، که قبلاً اضافه کرده اید، مرتبط می کند.

4. در ناحیه قابل ویرایش کنترل UpdateProgress،عبارت Getting Employees ... را تایپ کنید.

5. تغییرات را ذخیره کنید، و CTRL+F5 را فشار دهید تا صفحه را در مرورگر مشاهده کنید.

اگر هنگامی که صفحه، SQL query را اجرا می کند و داده ها را باز می گرداند تاخیری وجود داشته باشد، کنترل UpdateProgress، پیامی را نمایش می دهد که در کنترل UpdateProgress وارد کرده اید.

اضافه کردن Delay به Sample Application

اگر برنامه شما هر صفحه داده را سریعاً آپدیت می کند، شاید محتوای کنترل UpdateProgress را روی صفحه نبینید. این کنترل، پراپرتی DisplayAfter را، که شما را قادر می کند یک تاخیر (delay) قبل از نمایش کنترل قرار دهید، ساپورت می کند. این کار، اگر آپدیت خیلی سریع اتفاق بیافتد، کنترل را از flashing در مرورگر باز می دارد. این تاخیر بطور پیش فرض، روی 500 میلی ثانیه (نصف ثانیه) تنظیم است، بدین معنی که اگر آپدیت کمتر از نیم ثانیه طول بکشد، کنترل UpdateProgress نمایش داده نخواهد شد.

در محیط development، می توانید یک تاخیر مصنوعی به برنامه تان اضافه کنید تا مطمئن شوید که کنترل UpdateProgress همانطور که انتظار می رفت عمل می کند. این کار اختیاری است و فقط برای تست کردن برنامه تان است.

1. درون کنترل UpdatePanel، کنترل GridView را انتخاب کنید.

2. در پنجره Properties، روی دکمه Events کلیک کنید.

3. روی ایونت PageIndexChanged دابل کلیک کنید تا یک event handler ایجاد کنید.

4. کد زیر را به ایونت هندلر PageIndexChanged اضافه کنید تا یک تاخیر سه ثانیه ای ایجاد کنید.

در VB:

'Include three second delay for example only.
System.Threading.Thread.Sleep(3000)

 

در C#:

//Include three second delay for example only.
System.Threading.Thread.Sleep(3000);

 

5. تغییرات را ذخیره کنید، و CTRL+F5 را فشار دهید تا صفحه را در مرورگر مشاهده کنید.

از آنجاییکه حالا هر دفعه که به صفحه جدیدی از داده ها می رویم یک تاخیر سه ثانیه ای داریم، می توانید کنترل UpdateProgress را ببینید.

در VB:

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub GridView1_PageIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
'Include three second delay for example only.
System.Threading.Thread.Sleep(3000)
End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" CellPadding="4" DataSourceID="SqlDataSource1"
ForeColor="#333333" GridLines="None" OnPageIndexChanged="GridView1_PageIndexChanged">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
SelectCommand="SELECT FirstName, LastName FROM HumanResources.vEmployee ORDER BY LastName, FirstName">
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Getting employees...
</ProgressTemplate>
</asp:UpdateProgress>
</form>
</body>
</html>

 

در C#:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void GridView1_PageIndexChanged(object sender, EventArgs e)
{
//Include three second delay for example only.
System.Threading.Thread.Sleep(3000);
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" CellPadding="4" DataSourceID="SqlDataSource1"
ForeColor="#333333" GridLines="None" OnPageIndexChanged="GridView1_PageIndexChanged">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
SelectCommand="SELECT FirstName, LastName FROM HumanResources.vEmployee ORDER BY LastName, FirstName">
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Getting employees...
</ProgressTemplate>
</asp:UpdateProgress>
</form>
</body>
</html>





تگ ها:

دسته بندی ها: طراحی وب | مقالات آموزشی ASP.NET

ساخت وب سایت با قابلیت آژاکس

ارسال شده توسط administrator
11. أوت 2010 13:34

 

این مقاله چگونگی ایجاد یک Web application با قابلیت AJAX را توضیح می دهد که که می تواند بعنوان یک لیست to-do یا لیست کارها کار کند. این مقاله به شما کمک می کند یک user interface پایه برای ایجاد، مدیریت، و حذف لیست ها و آیتم های موجود در آن لیست ها ایجاد کنید. تمامی عملیاتهای insert، update، delete، sort، و paging درون یک کنترل اجرا می شود که از Microsoft Ajax استفاده می کند.

می توانید از کنترل UpdatePanel برای فعال سازی postbackهای غیرهمزمان روی صفحه استفاده کنید. ASP.NET بطور پیش فرض، هنگام روی دادن یک postback، کل صفحه را refresh می کند. اما، هنگامی که از کنترل UpdatePanel برای ایجاد postbackهای غیر همزمان استفاده می کنید، فقط عنصرهایی که درون کنترل UpdatePanel هستند، تغییر می کنند. این کار باعث می شود صفحه دینامیک تر شود و سرعت بیشتری داشته باشد.

  • taskهای آورده شده در این مقاله شامل موارد زیر است:
  • ایجاد یک بانک اطلاعاتی SQL و اضافه کردن داده ها.
  • اضافه کردن یک کنترل LinqDataSource به صفحه.
  • اضافه کردن یک فایل LINQ to SQL Classes.
  • استفاده از کنترل LinqDataSource برای اتصال به بانک اطلاعاتی با استفاده از LINQ.
  • استفاده از کنترل UpdatePanel برای اضافه کردن قابلیت Ajax به صفحه.

پیش نیازها:

جهت تکمیل مقاله، به نرم افزارهای زیر احتیاج داریم:

  • Microsoft Visual Studio یا Visual Web Developer 2010 Express.
  • SQL Server Express نصب شده روی کامپیوتر.

 

ایجاد یک وب سایت

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

این مقاله از پروژه Web site استفاده می کند. در عوض می توانید از پروژه Web application استفاده می کند.

ایجاد یک file system Web site جدید

  • در Visual Web Developer، در منوی File، روی New Web Site کلیک کنید.
  • پنجره New Web Site نمایش داده می شود.

    زیر Visual Studio installed templates، روی ASP.NET Web Site کلیک کنید.

  • در باکس Location، روی File System کلیک کنید، و نام پوشه ای را که می خواهید صفحات وب سات را در آن نگه دارید، تایپ کنید.
  • در لیست Language، روی Visual Basic یا Visual C# کلیک کنید و سپس OK کنید.

image

Visual Web Developer، پوشه و صفحه ای جدید بنام Default.aspx ایجاد می کند.

 

ایجاد بانک اطلاعاتی جدید در SQL Server

حالا که وب سایتی را ایجاد کرده اید، مرحله بعدی ایجاد بانک اطلاعاتی و یک مرجع به آن در Server Explorer است. (در Visual Web Developer 2008 Express Edition، نام Server Explorer، Database Explorer است.) وقتی یک بانک اطلاعاتی به Server Explorer اضافه می کنید، می توانید از Visual Studio برای اضافه کردن جداول، رویه های ذخیره شده (stored procedure)، viewها، و غیره استفاده کنید. همچنین می توانید داده های جدول را مشاهده کنید یا queryهای خودتان را بطور دستی یا گرافیکی یا با استفاده از پنجره Query Builder، ایجاد کنید.

اضافه کردن بانک اطلاعاتی به پروژه

  • در Solution Explorer، روی نام وب سایت کلیک راست و روی Add New Item کلیک کنید.
  • پنجره Add New Item نمایش داده می شود.

    SQL Database را انتخاب کنید، و نام بانک اطلاعاتی را Tasks.mdf بگذارید، و سپس OK کنید.

  • وقتی Visual Studio  می پرسد آیا بانک اطلاعاتی باید در پوشه App_Data ذخیره شود، YES را کلیک کنید.

 

ایجاد یک Schema و Sample Data برای بانک اطلاعاتی

می توانید از database design و ویژگی های ویرایش برای ایجاد یک schema برای جدول جدید استفاده کنید که آیتم های task را ذخیره می کند.

  • در Solution Explorer، پوشه App_Data را باز منید و روی Tasks.mdf دابل کلیک کنید.
  • نمودار درختی بانک اطلاعاتی taskها در Server Explorer (یا Server Explorer) نمایش داده می شود.

    روی پوشه Tables کلیک راست و سپس روی Add New Table کلیک کنید.

  • در ویرایشگر جدول بانک اطلاعاتی، ستون های زیر را در جدول ایجاد کنید:

 image

  • روی ردیفی که حاوی taskid است، کلیک راست کنید و سپس روی Set Primary Keyکلیک کنید.
  • در حالیکه ردیف taskid هنوز در حالت انتخاب است، در تب Column Properties، بخش Identity Specification را باز کنید و سپس (Is Identity) را روی Yes تنظیم کنید.
  • جدول را ذخیره کنید و نام آنرا TasksList بگذارید.
  • در Server Explorer، روی جدول کلیک راست و روی Show Table Data، کلیک کنید.
  • پنجره ای نمایش داده می شود که می توانید داده ها را مشاهده و اضافه کنید.

    چهاریا پنج رکورد به جدول اضافه کنید، و سپس database designer را ببندید.

مجبور نیستید value برای taskid تعیین کنید، زیرا یک identity column است که value آن بطور اتوماتیک تخصیص داده می شود. باید False یا True بودن فیلد isComplete را مشخص کنید.

 

ایجاد کنترل های Data Access

در این بخش، از کنترل LinqDataSource استفاده می کنیم و کلاس هایی را ایجاد می کنیم که موجودیت های بانک اطلاعاتی (database entities) را نمایش می دهد. کنترل و کلاس ایجاد شده، لایه data-access هستند که در این مقاله مورد استفاده قرار می گیرند.

کنترل LinqDataSource، از طریق معماری کنترل ASP.NET data-source control، LINQ را expose می کند. کنترل LinqDataSource، کد select کردن، update کردن، delete کردن اشیاء بانک اطلاعاتی را ایجاد می کند. LINQ، اصول برنامه نویسی شی گرا را به داده های رابطه ای اعمال می کند. این کنترل مدل برنامه نویسی یکپارچه ای را برای query و update کردن داده ها از انواع مختلف منابع داده ها فراهم می کند و قابلیت های داده ها را مستقیماً به زبان های C# و Visual Basic، اکستند (extend) می کند.

mapping بانک اطلاعاتی Taskها به SQL Data Context Object

جهت شروع ایجاد لایه data access، باید یک typed dataset به پروژه اضافه کنید.

ایجاد کلاسی برای جدول TasksList

  • اگر وب سایت از قبل دارای پوشه App_Code نیست، در Solution Explorer، روی نام وب سایت کلیک راست، و روی Add ASP.NET Folder ، و سپس روی App_Code کلیک کنید.
  • روی پوشه App_Code راست کلیک و سپس روی Add New Item کلیک کنید.
  • زیر Visual Studio installed templates، گزینه LINQ to SQL Classes را انتخاب کنید، و فایل را به Tasks.dbml تغییر نام دهید، و سپس روی Add کلیک کنید.

پنجره Object Relational Designer نمایش داده می شود.

  • در Server Explorer، جدول TasksList را به پنجره Object Relational Designer درگ کنید.
  • فایل Tasks.dbml را ذخیره کنید.

وقتی فایل را ذخیره می کنید، Visual Studio  دو فایل در پوشه App_Code زیر Tasks.dbml ایجاد می کند. فایل اول، Tasks.dbml.layout است؛ و فایل دوم، بسته به زبانی که هنگام ایجاد فایل Tasks.dbml انتخاب کرده اید، Tasks.designer.cs یا Tasks.designer.vb است،.

  • در Solution Explorer، فایل Tasks.designer.cs یا Tasks.designer.vb را باز کنید.

دقت کنید که این کد حاوی کلاس هایی بنام TasksDataContext و TasksList است. کلاس TasksDataContext، نمایانگر بانک اطلاعاتی و کلاس TasksList، نمایانگر جدول بانک اطلاعاتی است. constructor بدون پارامتر کلاس TasksDataContext، کانکشن استرینگ را از فایل Web.config می خواند.

  • فایل Web.config را باز کنید.

دقت کنید که رشته اتصال به بانک اطلاعاتی Tasks.mdf، در عنصر connectionStrings اضافه شده است.

  • فایل کلاس، پنجره Object Relational Designer، و فایل Web.config را ببندید.

 

 

ایجاد و پیکر بندی کنترل LinqDataSource

حالا که یک جدول بانک اطلاعاتی و کلاس هایی دارید که نمایانگر موجودیت های بانک اطلاعاتی هستند، می توانید از کنترل LinqDataSource روی صفحه وب ASP.NET استفاده کنید تا به بانک اطلاعاتی دسترسی پیدا کنید.

  • صفحه Default.aspx را باز کنید.
  • به viewی Design، سوییچ کنید.
  • یک کنترل LinqDataSource روی صفحه درگ کنید.

می تو انید پراپرتی ID را بصورت LinqDataSource1، ترک کنید.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure Data Source کلیک کنید.

 

  image

  • در لیست Choose your context object، گزینه TasksDataContext انتخاب و سپس روی Next. کلیک کنید.
  • در لیست Table، گزینه TasksLists(Table<TasksList>) را انتخاب و سپس روی Finish کلیک کنید.
  • در منوی LinqDataSource Tasks، گزینه های Enable Delete، Enable Insert، و Enable Update را انتخاب کنید.

توجه داشته باشید که مجبور به تعیین هیچ database commands برای select کردن داده ها نیستید.

  • صفحه را ذخیره کنید.

 

 

استفاده از کنترل های Data Source

در این بخش، کنترل هایی را به صفحه ای که از فایل کلاس های LINQ to SQL استفاده می کند، اضافه می کنیم، که جدول بانک اطلاعاتی به کلاس ها را map می کند. همچنین می توانید از کنترل LinqDataSource برای ایجاد data application پایه استفاده کنید.

می توانید یک کنترل ListView جهت نمایش داده ها از بانک اطلاعاتی SQL server، اضافه کنید. سپس می توانید یک کنترل DropDownList برای فیلتر کردن داده های اضافه کنید که در کنترل ListView ظاهر می شوند. در ادامه مقاله، باید کنترل ها را در کنترل UpdatePanel قراردهید تا بتوانید قابلیت های postback غیر همزمان را اضافه کنید.

نمایش داده ها با کنترل ListView

کنترل ListView برای نمایش داده ها در هر ساختار تکرارشونده مفید است، مانند کنترل های DataList و Repeater. اما کنترل ListView، برعکس این کنترل ها، ، عملیات های edit، insert، و delete و همچنین sorting و paging را ساپورت می کند.

می توانید یک کنترل ListView اضافه کنید که همه taskها را نشان می دهد. بعداً، می توانید یک لیست drop-down اضافه کنید که به شما اجازه فیلتر کردن داده ها را می دهد. کنترل ListView، به نمایش داده ها شکل می دهد و دکمه هایی را نشان می دهد که می توانند برای ویرایش و آپدیت کردن محتوا، یا قراردادن (insert) محتویات جدید مورد استفاده قرار گیرند.

اضافه کردن کنترل ListView به صفحه

  • صفحه ای را که کنترل LinqDataSource را اضافه کرده اید، باز کنید.
  • در تب Data در Toolbar، کنترل ListView را روی صفحه درگ کنید.
  • در منوی ListView Tasks، در لیست Choose Data Source، گزینه LinqDataSource1 را انتخاب کنید.
  • این کار، ListView را به کنترل LinqDataSource، که قبلاً پیکربندی کرده اید، بایند (bind) می کند.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure ListView کلیک کنید.
  • در پنجره Configure ListView، گزینه های Enable Editing، Enable Inserting، Enable Deleting، و Enable Paging را انتخاب کنید.
  • روی OK کلیک کنید.
  • صفحه را ذخیره کنید.

 

اضافه کردن کنترل DropDownList جهت فیلتر کردن داده ها

می توانید داده هایی را که در کنترل ListView، از طریق ایجاد یک لیست drop-down نمایش داده می شود، فیلتر کنید - که به شما اجازه می دهد taskهایی را که قرار است نشان دهید، انتخاب کنید. مثلاً می توانید لیستی ایجاد کنید که یا taskهای فعال یا taskهایی را که تکمیل شده اند، نشان می دهد.

می توانید کد را در کنترل ListView قراردهید تا بطور اتوماتیک یک عبارت Where، بمنظور نمایش رکوردهایی که با selection کنترل DropDownList مچ هستند، ایجاد شود.

اضافه کردن یک کنترل جهت فیلتر کردن داده ها

  • صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • درون عنصر فرم و بالای کنترل ListView، مارک آپ های زیر را دنبال کنید:

 

  • <span id="filter">
    Current List Filter:
    <asp:DropDownList ID="DropDownList1"
    AutoPostBack="true"
    runat="server">
    <asp:ListItem Text="Active" Value="False" />
    <asp:ListItem Text="Completed" Value="True" />
    </asp:DropDownList>
    </span>
    <hr id="separator" />

  • در کنترل LinqDataSource، پراپرتی AutoGenerateWhereClause را روی true تنظیم کنید، همانگونه که در مثلازیر نشان داده شده:
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="TasksDataContext"
    TableName="TasksLists"
    EnableDelete="True"
    EnableInsert="True"
    EnableUpdate="True"
    AutoGenerateWhereClause="true" >

  • مارک آپ زیر را به پارامترهای Where، بین تگ های opening و closing کنترل LinqDataSource اضافه کنید.
    <WhereParameters>
    <asp:ControlParameter
    Name="isComplete"
    ControlID="DropDownList1"
    Type="Boolean" />
    </WhereParameters>

  • صفحه را ذخیره کنید.

 

 

حالا می توانید صفحه را تست کنید تا مطمئن شوید داده هایی را که انتخاب کرده اید، نمایش می دهد.

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.
  • Completed را از لیست drop-down انتخاب کنید.

شما فقط آن taskها را خواهید دید که بصورت complete مارک خورده اند.

 

اضافه کردن قابلیت AJAX به صفحه

در این بخش، جهت فعال کردن ویژگی هایAJAX ، یک کنترل به صفحه اضافه می کنیم. سپس یک کنترل UpdatePanel به صفحه اضافه می کنیم، که اجازه اجرای taskها را در کنترل ListView، بدون postback کامل صفحه، می دهد.

اضافه کردن کنترل ScriptManager

برای استفاده از هر ویژگی ASP.NET AJAX از قبیل کنترل UpdatePanel، باید یک کنترل ScriptManager به صفحه اضافه کنید.

  • 1. صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • 2. در تب AJAX Extensions در toolbox، روی کنترل ScriptManager راست کنید تا آن را به صفحه درون عنصر فرم اضافه کنید.

قراردادن کنترل ListView درون کنترل UpdatePanel

  • در صفحه Default.aspx، مارک آپ زیر را بلافاصله بعدا از باز کردن تگ <form>اضافه کنید:
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
  • کد زیر را دقیقاً قبل از بستن تگ </form> اضافه کنید:
    </ContentTemplate>
    </asp:UpdatePanel>

این کد، یک کنترل UpdatePanel، اطراف کنترل ListView و کنترل DropDownList قرار می دهد.

  • صفحه را ذخیره کنید.

حالا می توانید دوباره صفحه را تست کنید.

 

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.

توجه داشته باشید که وقتی Active یا Completed را از list filter انتخاب می کنید، postback کامل اتفاق نمی افتد و کنترل ListView، لیست آپدیت شده ای از داده ها، بدون flicker، را نمایش می دهد.

 

خلاصه

این مقاله چگونگی اضافه کردن ListView به صفحه را با کنترل LinqDataSource، جهت اضافه کردن (add)، اصلاح (modify)، و حذف taskها از بانک اطلاعاتی به شما نشان داد. سپس یاد گرقتید چگونه قابلیت AJAX را با استفاده از کنترل UpdatePanel، اضافه کنید.

تگ ها:

دسته بندی ها: طراحی وب | مقالات آموزشی ASP.NET

آموزش AJAX

ارسال شده توسط administrator
9. أوت 2010 16:28

 

 

وقتی با Ajax یک برنامه می سازید، در واقع تجربه ای گرانبها در اختیار کاربرانتان می گذارید. می توان با استفاده از ویژگی های Ajax و کنترل هایserver-side در ASP.NET، از قبیل کنترل UpdatePanel، برای بهینه سازی server-based ASP.NET Web Forms applications استفاده کرد.

نکته: اگر می خواهید بدون استفاده از کنترل های سرور، Ajax client-side interactivity ایجاد کنید، از jQuery استفاده کنید. در Visual Studio، هنگامی که با استفاده از پراجکت تمپلیت ASP.NET Web Site ، پراجکت تمپلیت ASP.NET Web Application ، و پراجکت تمپلیت ASP.NET MVC 2 Web Application، پروژه ای را ایجاد می کنید، یک لایبرری jQuery در application ایجاد می شود. وقتی با jQuery، دولوپ می کنید، ویژوال استودیو، IntelliSense را، و Microsoft Content Delivery Network، نسخه ای قابل دانلود از لایبرری jQuery را برای نصبی کارآمد، در اختیار می گذارد.

این مقاله، روی بهبود server-based ASP.NET Web Forms applications تمرکز می کند.

چرا از ویژگی های Microsoft Ajax استفاده کنیم؟

Web Forms applicationهایی که از ویژگی های Ajax استفاده می کنند، دارای ویژگی های زیر هستند:

  • عنصرهای اینتراکتیو و آشنای UI، از قبیل progress indicators، tooltips، و پنجره pop-up
  • بازدهی بهبود یافته برای Web Forms application، زیرا قسمت های مهم پردازش صفحه وب را می توان در مرورگر انجام داد.
  • آپدیت های جزیی صفحه که فقط بخش هایی از صفحه وب را refresh می کنند که تغییر یافته اند.
  • client integration با سرویس های برنامه ASP.NET برای اعتبار سنجی فرم ها، سطح دسترسی، و پروفایل های کاربر.
  • کلاس های پروکسی، که بطور اتوماتیک generate میشوند، و متدهای فراخوانی web service را از اسکریپت کلاینت ساده می کنند.
  • قابلیت سفارشی کردن کنترل های سرویس جهت دربر گرفتن قابلیت های کلاینت.
  • ساپورت اکثر مرورگرهای معروف، از قبیل Internet Explorer، Mozilla Firefox، و Apple Safari.

معماری برنامه های Microsoft Ajax

یک برنامه Microsoft Ajax Web، یا از یک solution فقط کلاینت یا از یک solution کلاینت و سرور تشکیل شده است. یک solution فقط کلاینت، از لایبرری Microsoft Ajax استفاده می کند اما از هیچ کنترل سرور ASP.NET استفاده نمی کند. بعنوان مثال، HTML می تواند حاوی عناصر اسکریپت باشد که فایل های Microsoft Ajax Library .js را reference می کنند. لایبرری Microsoft Ajax به برنامه های Ajax اجازه می دهد کل پردازش را روی کلاینت اجرا کند. solution کلاینت و سرور شامل استفاده از هم Microsoft Ajax Library و هم کنترل های سرور ASP.NET است.

شکل زیر، عملکردی را نشان می دهد که در لایبرری های client-script و componentهای سروری که همراه .NET Framework 4 هستند، وجود دارند.

معماری سرور و کلاینت Microsoft Ajax

clip_image001

این شکل، عملکرد لایبرری کلاینت محور Microsoft Ajax را نشان می دهد، که شامل ساپورت ایجاد componentهای کلاینت، سازگاری با مرورگر، و سرویس های networking و هسته ای (Core) می باشد. همچنین این شکل عملکرد ویژگی های Microsoft Ajax سرور محور را نیز نشان می دهد، که شامل ساپورت اسکریپت، سرویس های وب، سرویس های application، و کنترل های سرور است. بخش های بعدی، شکل بالا را با جزییات بیشتر توضیح خواهند داد.

معماری Microsoft Ajax Client

معماری کلاینت، شامل لایبریی هایی برای ساپورت کامپوننت، سازگاری با مرورگر، نتورکینگ، و سرویس های هسته ای است.

کامپوننت ها

کامپوننت های کلاینت، رفتارهای پیشرفته را در مرورگر، بدون postback، فعال می کنند. این کامپوننت ها به سه دسته تقسیم می شوند:

  • Componentها، که اشیای غیر visual هستند که کد را encapsulate می کنند.
  • Behaviorها، که رفتار عنصرهای DOM موجود را گسترش می دهند.
  • Controlها، که یک عنصر DOM جدید ارائه می کنند که دارای رفتار سفارشی است.

نوع کامپوننتی که شما استفاده می کنید، بستگی به نوع رفتار کلاینتی دارد که شما می خواهید. مثلاً، یک watermark برای text box موجود را می توان با استفاده از رفتاری که به text box الصاق می شود، ایجاد کرد.

سازگاری با مرورگر

لایه سازگاری با مرورگر، سازگاری با اکثر مرورگرهای معروف را برای Microsoft Ajax فراهم می کند. این، شما را قادر به نوشتن همان اسکریپ، بدون در نظر گرفتن اینکه کدام مرورگر هدف شماست، می کند.

نتورکینگ

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

همچنین این لایه، ساپورت دسترسی به اعتبارسنجی فرم های سرور محور، اطلاعات سطح دسترسی، و اطلاعات پروفایل در اسکریپت کلاینت را نیز فراهم می کند. این ساپورت، تا وقتیکه application به لایبرری Microsoft Ajax دسترسی داشته باشد، در Web applicationهایی هم که با استفاده از ASP.NET ایجاد نشده اند نیز قابل دسترسی است.

سرویس های هسته ای

لایبرری های Ajax client-script در ASP.NET، متشکل از فایل های JavaScript (.js) هستند که دارای ویژگی هایی برای توسعه شی گرایی هستند.ویژگی های شی گرایی موجود در لایبرری های Microsoft Ajax client-script، سطج بالایی از سازگاری و پیمانه ای بودن (modularity) را در اسکریپ کردن کلاینت را فعال می کنند. سرویس های هسته ای زیر، بخشی از معماری کلاینت هسند:

  • اکستنشن های شی گرا به JavaScript از قبیل کلاس ها، فضاهای نامی، event handling، وراثت، انواع داده ای، و serialize کردن شی.
  • یک لایبرری کلاس پایه، که حاوی کامپوننت هایی از قبیل string builderها، و مدیریت خطای گسترش یافته است.
  • ساپورت لایبرری های جاواسکریپت، که یا در یک اسمبلی embed می شود یا بصورت فایل های جاواسکریپت مستقل در اختیار گذاشته می شوند. لایبرری های embed شده جاواسکریپت در یک اسمبلی می توانند نصب برنامه را آسان کنند و به حل مسائل versioning کمک می کند.

عیب یابی و مدیریت خطا

سرویس های هسته ای شامل کلاس Sys.Debug است، که متدهایی را برای نمایش اشیا در فرم های قابل خواندن در انتهای صفحه وب فراهم می کند. همچنین این کلاس، trace messageها را نشان می دهد، شما را قادر به استفاده از assortionها می کند، و به شما اجازه شروع debugger را می دهد. شی Error گسترش یافته API، جزییات استثنای مفیدی را با ساپورت مدهای release و debug در اختیار می گذارد.

جهانی سازی (globalization)

سرور Ajax و معماری کلاینت در ASP.NET، مدلی را برای محلی کردن و جهانی کردن اسکریپت کلاینت در اختیار می گذارد.این کار شما را قادر به طراحی برنامه هایی می کند که از پایه کدی واحد برای فراهم کردن UI برای موقعیت های (locale) زیادی (زبان ها و فرهنگ ها) استفاده می کنند. مثلاً، معماری Ajax، کد جاواسکریپت را طبق تنظیمات فرهنگ مرورگر کاربر، بطور اتوماتیک قادر به شکل دهی تاریخ (Date) و اشیای Number می کند، بدون نیاز به postback به سرور.

معماری سرور Ajax

قطعه های از سرور که توسعه Ajax را ساپورت می کند، متشکل از کنترل های سرور ASP.NET Web و کامپوننت هایی است که UI و روال کاری برنامه را مدیریت می کنند. همچنین قطعه های سرور، serialization، validation، و توسعه پذیری کنترل را مدیریت می کند. همچنین سرویس های وبی در ASP.NET وجود دارند که شمتا را قادر به دسترسی به سرویس های برنامه ASP.NET برای اعتبار سنجی فرم ها، سطح دسترسی، و پروفایل کاربران می کند.

ساپورت اسکریپت

ویژگی های Ajax در ASP.NET معمولاً با استفاده از لایبرری های اسکریپت کلاینت که فرآیند را بطور مستقیم روی کلاینت اجرا می کنند، پیاده سازی می شود. همچنین می توانید ویژگی های Ajax را با استفاده از کنترل های سرور که اسکریپت های ارسال شده از سرور به کلاینت را ساپورت می کند، پیاده سازی کنید.

همچنین می توانید اسکریپت کلاینت را برای برنامه های ASP.NETتان سفارشی کنید. در این مورد، همچنین می توانید از ویژگی های Ajax برای مدیریت کردن اسکریپت سفارشی تان بصورت فایل های .js (روی دیسک) یا فایل های .js قرارداده شده در اسمبلی بعنوان resource، استفاده کنید.

ویژگی های Ajax، شامل مدلی برای modeهای release و debug می باشد. مد release، چک کردن و مدیریت خطا (error checking and exception handling) را فراهم می کند که با کمترین اندازه فایل، برای اجرا بهینه سازی شده. مد debug، ویژگی های debugging بهتری از قبیل چک کردن type و argument را در اختیار می گذارد. ASP.NET، ورژن های debug را هنگامی که برنامه در مد debugging است، اجرا می کند. این کار شما را قادر به قرار دادن خطاها در اسکریپت های debug می کند و در عین حال اندازه کد release را به حداقل می رساند.

ساپورت اسکریپت برای Ajax در ASP.NET، جهت فراهم نمودن دو ویژگی زیر بکار می رود:

  • Microsoft Ajax Library، که یک type system و مجموعه ای از اکتنش های جاواسکریپت است که namespaceها، وراثت، اینترفیس، شمارش (enumeration)، refletion، و ویژگی های اضافی را در اختیار می گذارد.
  • رندرینگ جزیی صفحه، که ناحیه هایی از صفحه را با استفاده از یک postback غیرهمزمان، آپدیت می کند.

محلی سازی (localization)

معماری Microsoft Ajax، بر پایه مدل محلی ASP.NET 2.0 ساخته می شود. این موضوع، ساپورت اضافی برای فایل های .js محلی شده فراهم می کند که در یک اسمبلی قرار داده می شوند یا روی دیسک فراهم می شوند. ASP.NET می تواند اسکریپت های کلاینت محلی شده و منبع ها را بطور اتوماتیک برای زبان ها و مناطق ویژه serve کند.

سرویس های وب (Web Services)

با عملکردهای Ajax در یک صفحه ASP.NET، می توانید از اسکریپت کلاینت برای فراخوانی سرویس های وب ASP.NET (.asmx) و هم سرویس های Windows Communication Foundation یا WCF (.svc) استفاده کنید. referenceهای اسکریپت مورد نیاز بطور اتوماتیک به صفحه اضافه می شود، و در عوض کلاس های پروکسی Web service را generate می کند که از اسکریپت کلاینت مورد استفاده قرار می گیرد تا سرویس وب را فراخوانی کند.

سرویس های برنامه (Application Services)

سرویس های برنامه در ASP.NET، سرویس های وبی built-in هستند که بر اساس اعتبار سنجی فرم ها، سطح دسترسی، و پروفایل کاربران در ASP.NET هستند. می توان این سرویس ها را توسط اسکریپت کلاینت در یک صفحه وب با قابلیت Ajax، توسط یک برنامه کلاینت ویندوز، یا توسط یک کلاینت سازگار با WCF فراخوانی کرد.

کنترل های سرور

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

لیست زیر، پرکاربردترین کنترل های سرور Ajax را توضیح می دهد:

کنترل

توضیح

ScriptManager

ریسورس های اسکریپت برای کامپوننت ها کلاینت، رندرینگ جزیی صفحه، محلی سازی، جهانی سازی، و اسکریپت های سفارشی کاربر را مدیریت می کند. کنترل ScriptManagerبرای استفاده از UpdatePanel، UpdateProgress، و کنترل های Timer ضروری هستند. اما، کنترل ScriptManage، هنگام ایجاد solution فقط کلاینت، ضروری نیست.

UpdatePanel

به جای refresh کردن کل صفحه با استفاده از یک postback غیر همزمان، شما را قادر به refresh کردن بخش های انتخاب شده صفحه می کند.

UpdateProgress

اطلاعاتی در مورد آپدیت های جزیی صفحه در کنترل های UpdatePanel در اختیار می گذارد.

Timer

postbackهایی را در وقفه های تعریف شده اجرا می کند. می توانید از کنترل Timer برای پست کردن کل صفحه استفاده کنید، یا از آن همراه با کنترل UpdatePanelبرای اجرای آپدیت های جزیی صفحه در وقفه های تعریف شده استفاده کنید.

همچنین می توانید کنترل های سرور سفارشی ASP.NET ایجاد کنید که حاوی رفتارهای کلاینت Ajax است. کنترل های سفارشی ای که قابلیت های کنترل وب های دیگر ASP.NET را بهبود می بخشند، بصورت extendercontrols ارجاع (refer) می شوند.

Ajax Control Toolkit

Ajax Control Toolkit حاوی کنترل هایی است که می توانید برای ساختن برنامه های وب با قابلیت Ajax استفاده کنید. این کنترل ها نیازی به دانش جاواسکریپت یا Ajax ندارند. آنها با استفاده از مفاهیمی طراحی شده اند که برای برنامه نویسان ASP.NET Web Forms application اشنا هستند. با استفاده از Ajax Control Toolkit، می توانید برنامه های ASP.NET Web Forms با قابلیت Ajax و برنامه های وب ASP.NET MVC را با درگ کردن کنترل ها از Toolbox ویژوال استودیوبسازید. Ajax Control Toolkit، یک پروژه open-source است که بخشی از CodePlex Foundation محسوب می شود.

آموزش THEME و SKIN :آموزش گرافیک در ASP.NET

ارسال شده توسط administrator
3. أوت 2010 11:18

 

 

theme، مجموعه ای از تنظیمات پراپرتی است که به شما اجازه می دهد ظاهر صفحات و کنترل ها را تعریف کنید، و آن ظاهر را در صفحات web application، در کل یک web application، یا کل web applicationها روی سرور اعمال کنید.

تم ها و اسکین های کنترل

تم ها از یک سری از عنصرها تشکیل شده اند: اسکین ها، CSS، تصاویر، و منابع دیگر. یک تم حداقل حاوی اسکین ها خواهد بود. تمها در دایرکتوری های ویژه ای در وب سایت یا روی سرور وب شما تعریف می شوند.

اسکین ها

یک فایل اسکین ، دارای اکتنشن .skin و حاوی تنظیمات پراپرتی برای کنترل های منفرد از قبیل Button، Label، Textbox، یا کنترل های Calendar است. تنظیمات Control skin، شبیه control markup هستند، اما فقط حاوی پراپرتی هایی است که می خواهید به عنوان بخشی از تم تنظیم کنید. مثلاً، کد زیر، یک control skin برای کنترل Button است:

<asp:button runat="server" BackColor="lightblue" ForeColor="black" />

 

شما فایل های .skin را در پوشه Theme ایجاد کردید. یک فایل .skin ممکن است حاوی یک یا چند control skin برای یک یا چند control type باشد. می توانید اسکین هایی را در فایلی جدا برای هر کنترل تعریف کنید یا همه اسکین ها را برای یک تم در فایلی واحد تعریف کنید.

دو نوع control skin وجود دارد: اسکین های پیش فرض و اسکین های نام گذاری شده:

  • اسکین پیش فرض: هنگامی که تم به یک صفحه اعمال می شود،بطور اتوماتیک به همه کنترل های یک type، اعمال می شود. یک control skin، یک اسکین پیش فرض است، اگر دارای اتریبیوت SkinID نباشد. مثلاً، اگر یک اسکین پیش فرض برای کنترل Calendar ایجاد کنید، control skin به همه کنترل های Calendar که روی صفحه ای که از تم استفاده می کنند اعمال می شود. (اسکین های پیش فرض، دقیقاً بوسیله control type مچ می شوند، بطوری که اسکین کنترل Button به همه کتنرل های Button اعمال می شود، اما به کنترل های LinkButton یا کنترل هایی که از Button object مشتق می شوند اعمال نمی شود.)
  • اسکین نام گذاری شده: کنترلی با مجموعه پراپرتی های SkinID است. اسکین های نام گذاری شده بطور اتوماتیک به کنتنرل هایی توسط type اعمال نمی شوند. در عوض، اسکین نام گذاری شده را مستقیماً به کنترلی توسط تنظیم پراپرتی SkinID کنترل اعمال می کنید. ایجاد اسکین های نام گذاری شده به شما اجازه می دهند اسکین های مختلفی را برای instanceهای مختلف همان کنترل در یک برنامه تنظیم کنید.

 

CSS

یک تم می تواند حاوی فایل .css نیز باشد. وقتی شما یک فایل .css در پوشه تم قرار می دهید، style sheet بطور اتوماتیک بعنوان بخشی از تم اعمال می شود. شما با استفاده از اکتنشن .css در پوشه تم ، یک style sheet تعریف می کنید.

Theme Graphics و منابع دیگر

همچنین این تم ها ممکن است حاوی graphics و منابع دیگر از قبیل فایل های script، یا فایل های صوتی شود. مثلاً، ممکن است بخشی از تم صفحه شما حاوی یک اسکین برای کنترل TreeView باشد. می توانید graphicهای استفاده شده بمنظور نمایش دکمه expand و دکمه collapse را بعنوان بخشی از تم شامل کنید.

معمولاً فایل های منبع برای تم در همان پوشه ای هستند که فایل های اسکین برای تم وجود دارند، اما می توانند هر جایی در Web application نیز باشند، مثلاً در subfolder پوشه تم .

<asp:Image runat="server" ImageUrl="ThemeSubfolder/filename.ext" />

 

همچنین می توانید فایل های منبع تان را بیرون از پوشه تم نیز ذخیره کنید. اگر از سینتکس tilde (~) برای ارجاع به فایل های منبع استفاده می کنید، Web application بطور اتوماتیک تصاویر را پیدا خواهد کرد. مثلاً اگر منابع یک تم را در یک subfolder برنامه تان قرار دهید، می توانید از مسیرهای فرم ~/SubFolder/filename.ext برای ارجاع به فایل های منبع استفاده کنید، همانطور که در مثال زیر نشان داده شده است.

<asp:Image runat="server" ImageUrl="~/AppSubfolder/filename.ext" />

Scope کردن تم

می توانید تم هایی را برای یک Web applicationواحد، یا بعنوان یک تم جهانی که می تواند توسط همه applicationهای روی Web server استفاده شود، تعریف کنید. بعد از تعریف تم ، می توان آن را با استفاده از اتریبیوت تم یا StyleSheetTheme روی صفحه های مجزا قرار داد، یا می توان با تنظیم عنصر <pages> در پیکر بندی application به همه صفحه های یک application اعمال کنید. اگر عنصر <pages> در فایل Machine.config تعریف شود، تم به همه صفحه ها در Web applicationهای روی سرور اعمال خواهد شد.

تم های صفحه

تم صفحه، یک پوشه تم با control skins، style sheets، فایل های Graphics، و منابع دیگر است که بصورت یک subfolder در پوشه \App_Themes در وب سایت شما ایجاد شده است. هر تم ، یک subfolder متفاوت از پوشه \App_Themes است. مثال زیر، تم یک صفحه معمولی را نشان میدهد، که دو تم بنام های BlueTheme و PinkTheme را تعریف می کند.

MyWebSite
App_Themes
BlueTheme
Controls.skin
BlueTheme.css
PinkTheme
Controls.skin
PinkTheme.css

 

تم های جهانی (global)

تم جهانی، تمی است که می توانید به همه وب سایت های روی سرور اعمال کنید. تم های جهانی به شما اجازه تعریف نمایی کلی برای domain تان، هنگامی که از چندین وب سایت های که روی همان سرور هستند نگهداری می کنید، می دهد.

تم های جهانی، شبیه تم های صفحه هستند که حاوی تنظیمات property، تنظیمات style sheet، و graphic هستند. اما، تم های جهانی در پوشه ای بنام Theme ذخیره می شونده که برای سرور وب، global محسوب می شود. هر وب سایتی روی سرور، و هر صفحه ای در وب سایت، می تواند یک تم جهانی را reference کند.

ارجحیت تنظیمات تم

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

اگر پراپرتی تم صفحه را تنضیم کنید، تنظیمات کنترل در تم و صفحه ادغام می شوند تا تنظیمات نهایی برای کنترل را شکل دهند. اگر تنظیمات کنترل هم در کنترل و هم در تم تعریف شوند، تنظیمات کنترل تم هر تنظیمات صفحه ای را روی کنترل override می کند. این استراتژی تم را قادر به ایجاد نمایی ثابت در صفحات می کند، حتی اگر کنترل های روی صفحه از قبل دارای تنظیمات پراپرتی مستقلی باشند. مثلاً، به شما اجازه می دهد تمی را به صفحه ای که در نسخه قبلی ASP.NET ایجاد کرده اید، اعمال کنید.

متناوباً، می توانید تمی را با تنظیم کردن پراپرتی StyleSheetTheme بصورت style sheet اعمال کنید. در این مورد، تنظیمات صفحه محلی، بر تنظیمات تعریف شده در تمی که هنگام تعریف تنظیمات در هر دو جا تعریف شده، ارجحیت دارد. این مدلی است که توسط CSS استفاده می شود. اگر می خواهید حتی هنگامی که تمی را برای نمای کلی اعمال می کنید، قادر به تنظیمات پراپرتی های کنترل های مستقل روی صفحه باشید، ممکن است تمی را بصورت style sheet اعمال کنید.

عنصرهای تم جهانی را نمی توان بصورت جزیی با عنصرهای تم هایی در سطح application جایگزین کرد. اگر تمی در سطح application را هم نام با تم جهانی ایجاد کنید، عناصر تم در تم سطح application، عناصر تم جهانی را override نخواهند کرد.

پراپرتی هایی که می توانید با استفاده از تم ها تعریف کنید

به عنوان یک قانون، می توانید از تم ها برای تعریف پراپرتی هایی استفاده کنید که مربوط به ظاهرصفحه یا کنترل و یا محتویات استاتیک هستند. می توانید فقط پراپرتی هایی را تنظیم کنید که دارای اتریبیوت ThemeableAttribute هستند و در کلاس کنترل روی true تنظیم شده اند.

پراپرتی هایی که بجای ظاهر، رفتار کنترل را تنظیم می کنند، valueهای تم را نمی پذیرند. مثلاً، نمی توانید پراپرتی CommandName کنترل Button را با استفاده از تم تنظیم کنید. بطور مشابه، نمی توانید از تم برای تنظیم پراپرتی AllowPaging کنترل GridView یا پراپرتی DataSource استفاده کنید.

دقت کنید که نمی توانید از عبارت سازها، که عبارات کد را برای تخصیص در صفحه ای هنگام compile کردن، generate می کنند، در تم ها و اسکین ها استفاده کنید.

تم ها در مقابل cascading style sheetها

تم ها در اینکه مجموعه ای از اتریبیوت های رایج را که می توان به هر صفحه ای اعمال کرد تعریف می کنند، شبیه cascading style sheetها هستند. اما، تم ها در موارد زیر با cascading style sheetها فرق دارند:

  • تم ها می توانند پراپرتی های زیاد یک صفحه یا کنترل را تعریف کنند، نه فقط پراپرتی های استایل را. مثلاً، با استفاده از آنها می توانید برای کنترل TreeView، و template layout کنترل GridView، و غیره، گرافیک تعریف کنید.
  • تم ها می توانند حاوی گرافیک باشند.
  • تم ها مانند style sheetها، cascade نمی کنند.
  • بطورپیش فرض، هر valueی پراپرتی تعریف شده در تم که توسط پراپرتی Theme، reference شده است، valueهای پراپرتی را که بطور تعریفی روی کنترل تنظیم شده است، Override می کند، مگر اینکه شما خودتان تم را با استفاد ه از پراپرتی StyleSheetTheme مستقیماً اعمال کنید.
  • فقط یک تم را می توان به هر صفحه اعمال کرد. نمی توانید چندین تم را به یک صفحه اعمال کنید، بر عکس style sheetها که چندین style sheet را می توان اعمال کرد.

 

ملاحظات امنیتی
  • رفتار یک کنترل را طوری تغییر دهید که آنطور که انتظار می رود، رفتار نکند.
  • اسکریپت را در کامپیوتر client تزریق کنید، که منجر به ریسک cross-site scripting می شود.
  • اعتبار سنجی را تغییر دهید.
  • اطلاعات حساس را expose کنید.
  • راههای کاهش این خطرهای رایج عبارتند از:
  • دایرکتوری های جهانی و تم application را با تنظیمات مناسب کنترل access محافظت کنید. فقط باید به کاربرهای مورد اطمینان اجازه نوشتن فایل روی دایرکتوری تم را داد.
  • از تم هایی با منبع غیر قابل اطمینان استفاده کنید. همیشه قبل از استفاده از تم ها در وب سایت تان، تم های خارج از سازمانتان را برای پیدا کردن کدهای خطرناک آزمایش کنید.
  • نام تم را در داده های کوئری، expose نکنید. کاربرهای بدجنس می توانند از این اطلاعات برای استفاده از تم هایی که برای برنامه نویس ناشناس هستند استفاده کنند، و بدینوسیله اطلاعات حساس را expose می کنند.

تگ ها: , ,

دسته بندی ها: طراحی وب | مقالات آموزشی ASP.NET

آموزش تخصصی Ajax

ارسال شده توسط administrator
2. أوت 2010 15:35

 

 

مقدمه

ASP.NET AJAX، که قبلا "atlas" نامیده میشد، پیاده سازی مایکروسافت از قالب کاری بر اساس AJAX است که برای ASP.NET ایجاد شده است (گرچه می تواند در platformهای دیگر نیز مورد استفاده قرار گیرد). AJAX، مخفف عبارت Asynchronous JavaScript and XML است، که گرچه بسیار ساده است، ولی روشی برای انتقال داده ها بین سرور و کلاینت بدون ارسال کل صفحه است، و بدین طریق postback کاملی را ایجاد می کند. این کار به کاربر اجازه تجربه ای بهتر را می دهد، از آنجاییکه بارگذاری محتوای دینامیک را می توان در پشت زمینه بدون refresh یا redraw کردن نیز انجام داد. اگر تا بحال از gmail یا Outlook Web Access استفاده کرده باشید، پس حتما از یک webapplication با قابلیت Ajax استفاده کرده اید؛ بویژه اینکه گوگل Ajax را بسیار معروف کرده است.

در حالیکه استفاده از Ajax، بدون Microsoft ASP.NET AJAX کاملا امکانپذیر است، خیلی چیزها بسیار آسانتر هستند، زیرا مایکروسافت بعضی از کسل کننده ترین بخش های Ajax را در پیاده سازی شان جا داده است. مثلاً، 3 مرورگر معروف به روش های مختلفی برای استفاده از Ajax احتیاج دارند و دارای پیاده سازی های جاواسکریپت مختلفی هستند. ASP.NET AJAX، این کار را بسیار ساده کرده است، و به شما اجازه نوشتن یک کد برای هر سه مرورگر معروف را می دهد.

شروع کار

قبل از هر چیز، باید با ASP.NET آشنایی داشته باشید. اگر شما دارای IDE مناسب باشید، استفاده از ASP.NET AJAX بسیار آسان خواهد شد. توصیه می شود از Visual Web Developer 2008 Express اسنتفاده کنید.

بعد از اینکه آخرین نسخه را نصب کردید، Visual Web Developer 2008 Express را باز کنید، و هنگامی که "New Web Site..." را از منوی File انتخاب کردید، از تمپلیت "ASP.NET website" استفاده کنید.

طبق معمول، از مثال "Hello, world!" به عنوان مثال اول استفاده می کنیم. ابتدا با کد شروع می کنیم و. سپس آن را توضیح خواهیم داد. اگر قبلاً این کار را نکرده اید، باید یک پروژه وب سایت جدید در Visual Web Developer ایجاد کنید. IDE یک فایل جدید Default.aspx و Default.aspx.cs برای شما ایجاد خواهد کرد، که شیه همه صفحات دیگر ASP.NET خواهد بود. بیایید کمی AJAX به آن اضافه کنیم:

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Hello, world!</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="MainScriptManager" runat="server" />
<asp:UpdatePanel ID="pnlHelloWorld" runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="lblHelloWorld" Text="Click the button!" />
<br /><br />
<asp:Button runat="server" ID="btnHelloWorld" OnClick="btnHelloWorld_Click" Text="Update label!" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

در CodeBehind، چیز جدیدی غیر از این رویداد که باید اضافه کنید وجود ندارد:

protected void btnHelloWorld_Click(object sender, EventArgs e)
{
lblHelloWorld.Text = "Hello, world - this is a fresh message from ASP.NET AJAX! The time right now is:
"
+ DateTime.Now.ToLongTimeString();
}

در قسمت markup، در مقایسه با ASP.NET معمولی، از دو چیز جدید استفاده می کنیم، کنترل ScriptManager و کنترل UpdatePanel. کنترل ScriptManager چک می کند آیا فایل های ASP.NET AJAX شامل شده اند و اینکه AJAX support اضافه شده است، و باید به هر صفحه ای که دوست دارید از قابلیت AJAX استفاده کنید، اضافه شود. بعد از manager، یکی دیگر از پرکاربردترین کنترل ها هنگام کار با AJAX، کنترل UpdatePanel است. این کنترل به شما اجازه می دهد markupیی را که دوست دارید به طور جزیی آپدیت شود، wrap کنید، بدین معنی که بدون ایجاد یک postback واقعی در سرور، آپدیت شود. توضیحات بیشتر در مورد کنترل UpdatePanel در فصل بعد خواهد آمد. علاوه بر این دو کنترل، هر چیز دیگری، کنترل های استاندارد هستند، بدون هیچ تغییری که رفتار جایگزین را نشان می دهد.

سعی کنید سایت مثال را اجرا کنید، و روی دکمه کلیک کنید. لیبل با متن Hello world، و زمان کنونی آپدیت می شود. به طور مکرر، روی دکمه کلیک کنید، و خواهید دید که لیبل هر دفعه timestamp کنونی را بدست خواهد آورد. به غیبت عجیب پنجره چشمک زن و نوار وضعیت در حال اجرا توجه داشته باشید – هر کاری بدون آپدیت کردن هیچ چیز جز لیبل انجام نمی شود. ما اولین صفحه AJAX را ایجاد کرده ایم. اگر دوست دارید بدانید این صفحه چگونه کار می کند، "enablepartialrendering" کنترل ScriptManager را روی false تنظیم کنید:

<asp:ScriptManager ID="MainScriptManager" runat="server" enablepartialrendering="false" />

این کار جلوی استفاده از rendering جزیی را روی صفحه می گیرد، و به شما نشان می دهد بدون AJAX چگونه کار می کند.

در قسمت بعدی، نگاهی به کنترل های دیگر AJAX و چگونگی استفاده از آنها خواهیم انداخت.

کنترل UpdatePanel

احتمالاً این کنترل، مهم ترین کنترل در بسته ASP.NET AJAX است. این کنترل، اجازه render جزیی ناحیه ای را می دهد. قبلا از آن در مثال Hello world استفاده کردیم، در ادامه نگاهی عمیق تر به جنبه های دیگر این کنترل خواهیم انداخت.

تگ <asp:UpdatePanel> دارای دو زیرتگ (childtags) است: ContentTemplate و Triggers. تگ ContentTemplate ضروری است زیرا دربرگیرنده محتویات پنل است. این محتویات می تواند هر چیزی که معمولاً در صفحه گذاشته می شود، باشد،؛ از متن گرفته تا کنترل های وب. تگ trigger به شما اجازه تعریف بعضی triggerها را می دهد که پنل را وادار به آپدیت کردن محتویاتش می کند. مثال زیر، نحوه استفاد ه از این دو childtag را نشان می دهد.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>UpdatePanel</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="UpdateButton2" eventname="Click" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" id="DateTimeLabel1" />
<asp:Button runat="server" id="UpdateButton1" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server" id="UpdatePanel1" updatemode="Conditional">
<ContentTemplate>
<asp:Label runat="server" id="DateTimeLabel2" />
<asp:Button runat="server" id="UpdateButton2" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

در زیر CodeBehind آورده شده است. کافیست متد زیر را به فایل اضافه کنید:

protected void UpdateButton_Click(object sender, EventArgs e)
{
DateTimeLabel1.Text = DateTime.Now.ToString();
DateTimeLabel2.Text = DateTime.Now.ToString();
}

خوب، این مثال چه می خواهد بگوید؟ بیایید امتحانش کنیم، و روی آن دو دکمه کلیک کنیم. متوجه خواهید شد که دکمه اول، فقط datestamp اول را آپدیت می کند، در حالیکه دکمه دوم، هر دو را آپدیت می کند؛ چرا؟ چون ما پنل ها راطوری تنظیم کرده ایم که به طور شرطی آپدیت کنند، بدین معنا که محتویاتشان فقط در صورتی آپدیت می شوند که چیزی درون آنها یک postback ایجاد کند، یا یکی از triggerهای تعریف شده، اجرا شود. همانطور که می بینید، UpdatePanel اول حامل تریگری است که دکمه دوم را reference می کند. این کار تضمین می کند که پنل اول، حتی وقتی هم که کنترلی در UpdatePanel دیگر استفاده می شود، آپدیت می شود. تگ AsyncPostBackTrigger بسیار ساده است- فقط دارای دو صفت (attribute) است؛ یکی controlid که مرجعی به کنترلی است که می تواند آن را trigger کند، و دیگری eventname، که می گوید کدام enettype می تواند باعث اجرا شدن تریگر شود. اگر دوست دارید محتویات یک UpdatePanel آپدیت شوند، می توانید پراپرتی updatemode را به Always تغییر دهید.

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

کنترل UpdateProgress

یکی از مشکلات AJAX، این است که چون غیر همزمان و در پیش زمینه است، مرورگر هیچ statusیی به شما نشان نخواهد داد. اما با سرورهای و متدهای سریع، این مشکل زیاد هم بزرگ نیست، اما هروقت شما متدی دارید که زمان زیادی طول می کشد، احتمال دارد کاربر خسته شود. خوشبختانه، ASP.NET AJAX این مشکل را نیز با کنترلی بنام UpdateProgress حل می کند. این کنترل از template خودتان استفاده می کند تا نشان دهد یک متد غیر همزمان در حال کار کردن است. نگاهی به مثال زیر بیاندازید، که کنترلی را که در حال فعالیت است، نشان می دهد.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>UpdateProgress control</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdateProgress runat="server" id="PageUpdateProgress">
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel runat="server" id="Panel">
<ContentTemplate>
<asp:Button runat="server" id="UpdateButton" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

متد زیر باید به فایل CodeBehind اضافه شود:

protected void UpdateButton_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}

این مثال ساده به شما نشان خواهد داد استفاده از کنترل UpdateProgress چقدر آسان است. وقتی روی این دکمه کلیک می شود، script بمدت پنج ثانیه از standby می شود، و متن "Loading..." روی صفحه تان نمایش داده می شود. می توانید از هر چیزی در ProgressTemplate، شامل markup معمولی و کنترل های دیگر استفاده کنید. یکی از استفاده های رایج، GIF متحرک است، که با استفاده از موقعیت یابی CSS روی صفحه قرار داده شده است.

می توانید روی صفحه کنترل های چندگانه UpdateProgress داشته باشید، و با استفاده از پراپرتی AssociatedUpdatePanelID می توانید مطمئن شوید که UpdateProgress فقط هنگامی نمایش داده می شود که یک UpdatePanel ، آپدیت شده است.

آشنایی با پراپرتی DynamicLayout نیز جالب است. این پراپرتی می گوید آیا یک صفحه باید فضایی را برای کنترل progress رزرو کند یا خیر. اگر روی true تنظیم شود، که پیش فزض است، فضا دینامیک است، پس رزرو نمی شود، اما وقتی کنترل نشان داده می شود، فضا گرفته می شود. اگر دوست دارید فضا را رزر کنید، این پراپرتی را روی false تنضیم کنید. برای دیدن تفاوت، می توانید این پراپرتی را به مثال ما اضافه کنید و آن را تغییر دهید.

اگر تعدادی از postbackها سریع باشند، UpdateProgress، مدتی کوتاه نمایش داده خواهد شد، و منجر به رفتار چشمک زدن خواهد شد، که ممکن است کاربرانتان را گیج کند. به همین دلیل، می توانید حداقل زمان روی دادن را قبل از نشان دادن کنترل progress، تعیین کنید. این کار را می توان با اتریبیوت DisplayAfter انجام داد. باید عددی را بصورت میلی ثانیه تعیین کنید تا قبل از نمایش کنترل progress سپری شود؛ مثلاً اگر دوست دارید دو ثانیه صبر کنید عدد 2000 را تعیین کنید.

کنترل Timer

این کنترل به شما اجازه می دهد pstbackهایی را در بعضی از وقفه ها (interval) انجام دهید. اگر با UpdatePanels استفاده شود، که رایج ترین روش است، به صفحه شما اجازه آپدیت جزیی و زمان بندی شده را می دهد، اما می توان برای postback کردن کل صفحه نیز استفاده کرد. در این بخش، روی استفاده از تایمرهایی با UpdatePanels تمرکز خواهیم کرد.

در زیر مثالی ساده از نحوه استفاده از کنترل Timer آورده شده است که فقط هر پنج ثانیه یکبار timestamp را آپدیت می کند.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Timers</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer runat="server" id="UpdateTimer" interval="5000" ontick="UpdateTimer_Tick" />
<asp:UpdatePanel runat="server" id="TimedPanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="UpdateTimer" eventname="Tick" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" id="DateStampLabel" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

خیلی ساده است. ما یک UpdatePanel نرمال داریم که حامل یک Trigger reference به کنترل timer جدید ماست.

این بدین معناست که هروقت Timer تیک می کند – یعنی رویداد Tick را اجرا می کند – پنل آپدیت می شود. همانطور که در لیست کد CodeBehind می بینید، هر بار که Timer اجرا می شود، DateStampLabelرا اجرا می کنیم. این کار را می توان با JavaScript موثرتر انجام داد، که زمان را روی clientside آپدیت می کند بجای اینکه سرور را درگیر کند. از این مثال فقط برای نشان دادن پتانسیل کنترل Timer استفاده می شود.

روش دیگر، شامل کردن Timer درون است. انجام این کار، ما را از تعریف یک trigger بی نیاز می کند، اما باید بدانید که رفتار، بسته به اینکه آیا Timer درون است یا بیرون آن، متفاوت خواهد بود. وقتی Timer درون UpdatePanel باشد، تا وقتی که UpdatePanel کاملاً آپدیت می شود، Timer دوباره ساخته نمی شود. این بدین معناست که اگر یک تایمری با وقفه شصت ثانیه ای داشته باشیم، و آپدیت پنج ثانیه طول بکشد، رویداد بعدی شصت ثانیه بعد از رویداد قبلی اجرا نمی شود، بلکه شصت و پنج ثانیه بعد اجرا می شود. از سوی دیگر، اگر تایمر خارج از UpdatePanel باشد، کاربر می تواند فقط پنجاه و پنج ثانیه به محتویات پنل نگاه خواهد کرد، قبل از اینکه دوباره آپدیت شود.

همیشه بیاد داشته باشید که گرچه آپدیت های جزیی روی سرور به سنگینی postbackهای واقعی نیستند، اما سرور هنوز contact می شود، و ممکن است هنگام استفاده از تایمرها، ostbackهای جزیی زیادی بدست آورید؛ که می تواند سرعت را کم کند. تا جاییکه می توانید همیشه از وقفه های طولانی استفاده کنید، و دقت کنید آیا contact کردن با سرور واقعاً ضروری است یا خیر.

آموزش تخصصی CSS (قسمت چهارم)

ارسال شده توسط administrator
26. جوييه 2010 13:05

 

 

سلکتور های Grouping و Nesting در CSS

سلکتورهای Grouping

در style sheetها، اغلب عناصری با یک استایل وجود دارند.

 

h1
{
color:green;
}
h2
{
color:green;
}
p
{
color:green;
}

 

برای کوتاه کردن کد، می توان سلکتورها را group کرد.

هر سلکتور را باید با یک علامت ویرگول جدا کرد.

در مثلا زیر، سلکتورهای کد بالا با هم group شده اند:

h1,h2,p
{
color:green;
}

 

Nest کردن سلکتورها

اعمال کردن استایل برای سلکتور درون سلکتوری دیگر امکان پذیر است.

در مثال زیر، یک استایل برای همه عنصرهای p، تعیین شده است، و استایلی دیگر نیز برای عنصرهای p، که درون کلاس "marked" نست شده اند، تعیین شده است.

p
{
color:blue;
text-align:center;
}
.marked
{
background-color:blue;
}
.marked p
{
color:white;
}

 

نمایش و قابلیت دیده شدن در CSS

پراپرتی display تعیین می کند چگونه/آیا یک عنصر نمایش داده می شود، و پراپرتی visibility تعیین می کند آیا یک عنصر با قابل دیدن (visible) یا مخفی (hidden) باشد.

مخفی کردن عنصر
Display: none
یا
Visibility: hidden

مخفی کردن عنصر را می توان با تنظیم پراپرتی display روی "none" یا تنظیم پراپرتی visibility

روی "hidden" انجام داد. اما توجه داشته باشید که این دو متد نتایج متفاوتی دارد:

visibility:hidden، عنصری را مخفی کرد، اما همان فضای سابق را اشغال می کند. آن عنصر مخفی می شود، اما روی layout تاثیر خواهد گرفت.

h1.hidden {visibility:hidden;}

نمایش CSS – عنصرهای Block و Inline

عنصر block، عنصری است که کل پهنای موجود را اشغال می کند، و دارای فاصله ای (line break) قبل و بعد از کنترل است.

نمونه هایی از عنصر block:

  • <h1>
  • <p>
  • <div>

عنصر inline، فقط پهنایی را اشغال می کتد که لازم است، و فاصله ای ندارد.

نمونه هایی ار عنصر inline:

  • <span>
  • <a>
تغییر چگونگی نمایش عنصر

تغییر دادن عنصر inline به یک عنصر block یا بالعکس، می تواند برای ظاهر صفحه مفید باشد، و همچنان از استانداردهای وب تبعیت می کند.

li {display:inline;}

مثال زیر، عنصرهای span را بصورت عناصر block نمایش می دهد:

span {display:block;}

نکته مهم: تغییر نوع نمایش عنصر تنها چگونگی نمایش عنصر را نشان می دهد، دهد نه نوع عنصر را. مثلاً، عنصر Inline که display:block تنظیم شده است، اجازه ندارد عنصر block را درون خودش nest کند.

موقعیت یابی در CSS

موقعیت یابی

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

می توان عنصرها را با استفاده از پراپرتی top، bottom، left، و right نیز موقعیت یابی کرد. اما، این پراپرتی ها اثر نخواهند داشت مگر اینکه ابتدا پراپرتی position تنظیم و تعیین شود. همچنین این پراپرتی ها بسته به متد موقعیت یابی، عملکرد متفاوتی دارند.

چهار متد متفاوت موقعیت یابی وجود دارد.

موقعیت یابی استاتیک (Static Positioning)

عنصرهای HTML به طور پیش فرض بصورت استاتیک موقعیت یابی می شوند. عنصری که بصورت استاتیک موقعیت یابی شده، همیشه طبق جریان نرمال صفحه موقعیت یابی می شود.

عنصرهایی که بصورت استاتیک موقعیت یابی شده اند، تحت تاثیر پراپرتی های top، bottom، left، و right قرار نمی گیرند.

موقعیت یابی ثابت (Fixed Positioning)

عنصری با موقعیت ثابت، نسبت به پنجره مرورگر موقعیت یابی می شود.

حتی اگر پنجره scroll نیز بشود، حذف نخواهد شد:

p.pos_fixed
{
position:fixed;
top:30px;
right:5px;
}

نکته: IE، فقط زمانی valueهای fixed ساپورت می کند که یک !DOCTYPE تعیین شده باشد.

عنصرهای موقعیت یابی شده ثابت، از جریان (flow) صفحه حذف می شوند.

این عنصرها ممکن است با عنصرهای دیگر تداخل داشته باشند.

موقعیت یابی نسبی (Relative Positioning)

عنصر موقعیت یابی شده نسبی، بسبت به موقعیت نرمالش موقعیت یابی می شود.

h2.pos_left
{
position:relative;
left:-20px;
}
h2.pos_right
{
position:relative;
left:20px;
}

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

h2.pos_top
{
position:relative;
top:-50px;
}

موقعیت یابی مطلق (Absolute Positioning)

عنصر موقعیت مطلق، نسبت به عنصر اصلی اول؛ که موقعیتی غیر از استاتیک دارد، موقعیت یابی می شود. اگر چنین عنصری پیدا نشود، آنگاه containing block، <html> خواهد بود:

h2
{
position:absolute;
left:100px;
top:150px;
}

عنصرهایی که بصورت مطلق موقعیت یابی شده اند، از جریان نرمال حذف می شوند.

این عنصرها ممکن است با عنصرهای دیگر تداخل داشته باشند.

عنصرهای روی هم افتاده (Overlapping Elements)

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

پراپرتی z-index، stack order یک عنصر را تعیین می کند ( که باید در جلو، پشت دیگران قرار گیرد)

عنصر ممکن است stack order مثبت یا منفی داشته باشد:


img
{
position:absolute;
left:0px;
top:0px;
z-index:-1
}

عنصری با stack order بیشتر همیشه در جلوی عنصری با stack order کمتر قرار می گیرد.

CSS Float

CSS Float چیست؟

با CSS Float می توان عنصری را به چپ یا راست هل یا حرکت داد، که به عناصر دیگر اجازه می دهد اطرافش را wrap کنند.

از float اکثرا برای تصاویر استفاده می شود، اما هنگام کار کردن با layoutها نیز مفید است.

چگونگی حرکت (float) عنصرها

عنصرها به صورت افقی float می کنند، بدین معنا که یک عنصر فقط در جهات چپ یا راست حرکت می کند نه در جهات بالا یا پایین.

یک عنصر float شده تا جاییکه می تواند به سمت چپ یا راست حرکت می کند. یعنی تا منتهی الیه سمت چپ یا راست عنصر دربرگیرنده.

عنصر بعد از عنصر حرکت کننده، در اطراف آن flow خواهد کرد.

عنصر بعد از عنصر حرکت کننده، تحت تاثیر قرار نخواهد گرفت.

اگر تصویری به سمت راست حرکت کند، متنی نیز در اطراف آن به سمت چپ حرکت می کند:

img
{
float:right;
}

عنصرهای حرکت کننده کنار یکدیگر

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

در اینجا، ما یک گالری عکس با استفاده از پراپرتی float درست کرده ایم:

thumbnail 
{
float:left;
width:110px;
height:90px;
margin:5px;
}

غیر فعال کردن Float- استفاده از Clear

عنصرهای بعد از عناصر متحرک در اطراف آن flow خواهند کرد. برای پرهیز از این موضوع، از پراپرتی clear استفاده کنید.

این پراپرتی تعیین می کند عنصرهای متحرک دیگر به کدام سمت های یک عنصر اجازه ندارند.

با استفاده از پراپرتی clear، یک text line به گالری عکس اضافه کنید:


.text_line
{
clear:both;
}

تراز کردن افقی CSS

تراز کردن عنصرهای block

عنصر block، عنصری است که کل پهنای موجود را اشغال می کند، و دارای فاصله ای (line break) قبل و بعد از کنترل است.

نمونه هایی از عنصر block:

  • <h1>
  • <p>
  • <div>

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

در این بخش، به شما نشاه می دهیم چگونه عنصر block را برای استفاده در layout تراز کنید.

تراز کردن در مرکز با استفاده از پراپرتی margin

عنصرهای block را می توان با تنظیم مارجین های چپ و راست روی "auto" تراز کرد.

نکته مهم: استفاده از margin:auto در IE کار نمی کند مگر اینکه یک !DOCTYPE تعریف شود.

تنظیم مارجین های چپ و راست روی auto، تعیین می کند که آنها باید مارجین موجود را بطور مساوی تقسیم کنند. نتیجه این کار، عنصری در مرکز خواهد بود:

.center
{
margin-left:auto;
margin-right:auto;
width:70%;
background-color:#b0e0e6;
}

اگر پهنا 100% باشد، تراز کردن اثر نخواهد داشت.

در IE، یک margin handling bug برای عنصرهای block وجود دارد. برای اینکه مثال های بالا در IE5 کارکند، باید کدهای بیشتری وارد کنید.

تراز چپ و راست با استفاده از پراپرتی Position

یکی از متدهای تراز کردن عنصرها، استفاده از موقعیت یابی مطلق (absolute positioning) است:

.right
{
position:absolute;
right:0px;
width:300px;
background-color:#b0e0e6;
}

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

مسئله سازگاری Crossbrowser

هنگام تراز کردن عناصری مانند این، از پیش تعریف کردن margin و padding برای عنصر <body> ایده خوبی است. این کار بمعنای پرهیز از تفاوتهای visual در مرورگرهای مختلف است.

IE هنگام استفاده از از پراپرتی position مشکل دیگری نیز دارد. اگر عنصر دربرگیرنده (در caseما، <div class="container">) دارای پهنایی مشخص است، و هیچ !DOCTYPE تعریف نشده است؛ IE یک مارجین 17px در سمت راست اضافه خواهد کرد. ظاهراً این فضا برای scrollbar رزرو شده است. هنگام استفده از پراپرتی position، !DOCTYPE تعریف کنید:

body
{
margin:0;
padding:0;
}
.container
{
position:relative;
width:100%;
}
.right
{
position:absolute;
right:0px;
width:300px;
background-color:#b0e0e6;
}

تراز چپ و راست با استفاده از پراپرتی float

یکی از متدهای تراز کردن عنصرها، استفاده از از پراپرتی float است:

.right
{
float:right;
width:300px;
background-color:#b0e0e6;
}

مسئله سازگاری Crossbrowser

هنگام تراز کردن عناصری مانند این، از پیش تعریف کردن margin و padding برای عنصر <body> ایده خوبی است. این کار بمعنای پرهیز از تفاوتهای visual در مرورگرهای مختلف است.

IE هنگام استفاده از از پراپرتی float مشکل دیگری نیز دارد. اگر هیچ !DOCTYPE تعریف نشده باشد، IE یک مارجین 17px در سمت راست اضافه خواهد کرد. ظاهراً این فضا برای scrollbar رزرو شده است. هنگام استفده از پراپرتی float، !DOCTYPE تعریف کنید:

body
{
margin:0;
padding:0;
}
.right
{
float:right;
width:300px;
background-color:#b0e0e6;
}

کلاس های قلابی در CSS( CSS Pseudo-classes)

از این کلاس ها در CSS برای اضافه کردن جلوه های ویژه به بعضی از سلکتورها استفاده می شود.

سینتکس (syntax)

سیتتکس این کلاس:

selector:pseudo-class {property:value;}

همچنین می توان کلاس های CSS را با pseudo-classes نیز استفاده کرد:

selector.class:pseudo-class {property:value;}

Anchor Pseudo-classes

لینک ه8ا را می توان به روش های مختلفی در مرورگری که CSS را ساپورت می کند، نمایش داد:

a:link {color:#FF0000;}      /* unvisited link */
a:visited {color:#00FF00;} /* visited link */
a:hover {color:#FF00FF;} /* mouse over link */
a:active {color:#0000FF;} /* selected link */


نکته مهم: یک hover باید بعد از a:link و a:visited در تعریف CSS قرار گیرد تا موثر واقع شود.

نکته مهم: a:active باید بعد از a:hover در تعریف CSS قرار گیرد تا موثر واقع شود.

نکته مهم: نام های Pseudo-class به حروف بزرگ حساس نیستند.

Pseudo-classes و کلاس های CSS

می توان Pseudo-classes را با کلاس های CSS ترکیب کرد.

a.red:visited {color:#FF0000;}

<a class="red" href="css_syntax.asp">CSS Syntax</a>

اگر لینک مثال بالا بازدید شده باشد، قرمز نمایش داده خواهد شد.

CSS- The :first-child Pseudo-class

:first-child pseudo-class با عنصری معین شده که اولین child عنصر دیگر است، match می شود.

نکته مهم: برای اینکه :first-child در IE کارکند، یک <!DOCTYPE> باید تعریف شود.

عنصر اول <p> را match کنید

در مثال زیر، سلکتور با هر عنصر <p> که اولین child هر عنصر است، match می شود:

<html>
<head>
<style type="text/css">
p:first-child
{
color:blue;
}
</style>
</head>

<body>
<p>I am a strong man.</p>
<p>I am a strong man.</p>
</body>
</html>
عنصر اول <i> را در همه عنصرهای <p> مچ کنید

در مثال زیر، سلکتور با اولین عنصر <i> در همه عنصرها مچ می شود:

 
<html>
<head>
<style type="text/css">
p > i:first-child
{
font-weight:bold;
}
</style>
</head>

<body>
<p>I am a <i>strong</i> man. I am a <i>strong</i> man.</p>
<p>I am a <i>strong</i> man. I am a <i>strong</i> man.</p>
</body>
</html>

همه عنصرهای <i> را همه عنصرهای first child <p> مچ کنید

در مثال زیر، سلکتور با همه عنصرهای <i> در عنصرهای <p> که اولین child عنصر دیگر است، مچ می شود:

 
<html>
<head>
<style type="text/css">
p:first-child i
{
color:blue;
}
</style>
</head>

<body>
<p>I am a <i>strong</i> man. I am a <i>strong</i> man.</p>
<p>I am a <i>strong</i> man. I am a <i>strong</i> man.</p>
</body>
</html>

CSS- The :lang Pseudo-class

:lang pseudo-class به شما اجازه می دهد قوانین مخصوصی بر ای زبان های مختلف تعریف کنید.

نکته مهم: Internet Explorer 8 و بالاتر، :lang pseudo-class را ساپورت می کند، اگر یک <!DOCTYPE> تعریف شده باشد.

در مثال زیر، :lang class برای عنصر q با lang="no" علامت نقل قول تعریف می کند:

<html>
<head>
<style type="text/css">
q:lang(no) {quotes: "~" "~";}
</style>
</head>

<body>
<p>Some text <q lang="no">A quote in a paragraph</q> Some text.</p>
</body>
</html>

ستون CSS نشان می دهد پراپرتی در کدام ورژن CSS تعریف می شود (CSS1 یا CSS2).

 
untitled

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pseudo-elements در CSS

سینتکس

سیتنکس pseudo-elements:

selector:pseudo-element {property:value;}

 

کلاس های CSS را می توان با pseudo-elements نیز می توان استفاده کرد:

selector.class:pseudo-element {property:value;}

 

:first-line Pseudo-element

از "first-line" pseudo-element برای اضافه کردن استایل ویژه به اولین خط متن استفاده می شود.

در مثال زیر، مرورگر خط اول متن را در عنصر p، مطابق با استایل "خط اول pseudo-element " آرایش می کند.

p:first-line 
{
color:#ff0000;
font-variant:small-caps;
}

نکته مهم: "خط اول pseudo-element " را فقط می توان با عنصرهای block-level

استفاده کرد.

نکته مهم پراپرتی های زیر به "خط اول pseudo-element " اعمال می شوند:

  • font properties
  • color properties 
  • background properties
  • word-spacing
  • letter-spacing
  • text-decoration
  • vertical-align
  • text-transform
  • line-height
  • clear
:first-letter Pseudo-element

از "حرف اول pseudo-element" برای اضافه کردن استایلی ویژه به اولین حرف متن استفاده می شود.

 

p:first-letter 
{
color:#ff0000;
font-size:xx-large;
}

نکته مهم: "حرف اول pseudo-element " را فقط می توان با عنصرهای block-level

استفاده کرد.

نکته مهم پراپرتی های زیر به "حرف اول pseudo-element " اعمال می شوند:

  • font properties
  • color properties 
  • background properties
  • margin properties
  • padding properties
  • border properties
  • text-decoration
  • vertical-align (only if "float" is "none")
  • text-transform
  • line-height
  • float
  • clear
Pseudo-elements و کلاس های CSS

Pseudo-elements را می توان با کلاس های CSS ترکیب کرد:

 
p.article:first-letter {color:#ff0000;}

<p class="article">A paragraph in an article</p>

مثلا بالاحرف اول همه پاراگراف ها با class="article" را قرمز نشان می دهد.

Pseudo-elements چندگانه

می توان چندین pseudo-elements را نیز با هم ترکیب کرد.

در مثال زیر، حرف اول پاراگراف قرمز خواهد شد، با سایز فونت xx-large. بقیه خط اول، آبی و بصورت حروف کوچک خواهد بود. بقیه پاراگراف دارای اندازه فونت و رنگ پیش فرض خواهد بود.

p:first-letter
{
color:#ff0000;
font-size:xx-large;
}
p:first-line
{
color:#0000ff;
font-variant:small-caps;
}

:before Pseudo-element

":before" pseudo-element را می توان برای insert کردن مقداری content قبل از content یک عنصر استفاده کرد.

مثلا زیر، تصویری را قبل از هر عنصر <h1> درج کرد.

 
h1:before 
{
content:url(smiley.gif);
}

Pseudo-elements

ستون CSS نشان می دهد پراپرتی در کدام ورژن CSS تعریف می شود (CSS1 یا CSS2).

 
image

 

نوار پیمایش (Navigation Bar) در CSS

نوارهای پیمایش

داشتن نوار پیمایش که استفاده از آن آسان باشد، برای هر وب سایتی مهم است.

با CSS می توان منوهای کسل کننده HTML را تبدیل به نوارهای پیمایش زیبا و جذاب کرد.

نوار پیمایش – لیست لینک ها

نوار پیمایش نیاز به HTML استاندارد بعنوان پایه اش دارد.

ما در مثال هایمان، نوار پیمایش را از روی لیست استاندارد HTML می سازیم.

اساساً نوار پیمایش لیستی از لینک هاست، پس استفاده از عنصرهای <ul> و <li> بسیار مناسب است:

<ul>
<li><a href="default.asp">Home</a></li>
<li><a href="news.asp">News</a></li>
<li><a href="contact.asp">Contact</a></li>
<li><a href="about.asp">About</a></li>
</ul>

حالا بیایید bulletها و marginها و padding را از لیست حذف کنیم:

ul
{
list-style-type:none;
margin:0;
padding:0;
}

مثال بالا توضیح می دهد:

  • list-style-type:none — بولت ها را حذف می کند. نوار پیمایش نیاز به لیستmarker ها ندارد.
  • تنظیم marginها و padding روی 0، تنظیمات پیش فرض مرورگر را حذف می کند.

کد موجود در مثال بالا، کدی استاندارد است که هم در نوارهای پیمایش افقی و هم عمودی بکار می رود.

نوار پیمایش عمودی

برای ساختن نوار پیمایش عمودی، فقط به استایل کردن عنصرهای <a> نیاز داریم، بعلاوه کد بالا:

a
{
display:block;
width:60px;
}

مثال بالا توضیح می دهد:

  • display:block — لینک ها را بصورت عنصرهای block نمایش می دهد و کل ناحیه لینک را قابل کلیک می کند.
  • width:60px — عنصرهای block، کل پهنای موجود پیش فرض را اشغال می کند. ما قصد داریم 60px پهنا تعیین کنیم.

نکته مهم: همیشه پهنای عنصرهای <a> را در نوار پیمایش عمودی تعیین کنید.اگر پهنا را حذف کنید، IE می تواند نتایج غیر منتظره ای تولید کند.

نوار پیمایش افقی

دو راه برای ایجاد نوار پیمایش افقی وجود دارد. استفاده از list itemهای inline و floating.

هر دو متد بخوبی کار می کند، اما اگر می خواهید لینک ها دارای یک سایز باشند، باید از متد floating استفاده کنید.

List Itemهای Inline

یک راه ساختن نوار پیمایش افقی، تعیین عنصرهای <li> بصورت inline است، بعلاوه کدهای استاندارد بالا:

li
{
display:inline;
}

مثال بالا توضیح می دهد:

  • display:inline — بطور پیش فرض، عنصرهای <li>، عنصرهایی block هستند. در اینجا ما breakهای خط را قبل و بعد از هر list item حذف می کنیم تا آنها را روی یک خط نمایش دهیم.
list itemهای Floating

در مثا بالا، لینک ها پهناهای متفاوتی دارند.

برای همه لینک هایی که قر ار است پهنای مساوی داشته باشند، عنصر <li> را حرکت دهید و پهنایی بر ای عنصر <a> تعیین کنید:

li
{
float:left;
}
a
{
display:block;
width:60px;
}

مثال بالا نوضیح داد که:

float:left — از float بر ای حرکت دادن عنصرهای block در کنار یکدیگر استفاده کنید

display:block — لینک ها را بصورت عنصرهایی نمایش می دهد که کل ناحیه لینک را قابل کلیک می کند، و به ما اجازه تعیینهنا را می دهد

width:60px— از انجاییکه عنصرهای block، کل پهنای موجود را اشغال می کنند، نمی توانند در کنار هم حرکت کنند. ما پهنای لینک ها را 60px تعیین می کنیم.

گالری عکس در CSS

از CSS می توان برای ایجاد گالری عکس استفاده کرد.

گالری عکس

گالری عکس زیر با CSS ایجاد شده است:

<html>
<head>
<style type="text/css">
div.img
{
margin:2px;
border:1px solid #0000ff;
height:auto;
width:auto;
float:left;
text-align:center;
}
div.img img
{
display:inline;
margin:3px;
border:1px solid #ffffff;
}
div.img a:hover img
{
border:1px solid #0000ff;
}
div.desc
{
text-align:center;
font-weight:normal;
width:120px;
margin:2px;
}
</style>
</head>
<body>

<div class="img">
<a target="_blank" href="klematis_big.htm">
<img src="klematis_small.jpg" alt="Klematis" width="110" height="90" />
</a>
<div class="desc">Add a description of the image here</div>
</div>
<div class="img">
<a target="_blank" href="klematis2_big.htm">
<img src="klematis2_small.jpg" alt="Klematis" width="110" height="90" />
</a>
<div class="desc">Add a description of the image here</div>
</div>
<div class="img">
<a target="_blank" href="klematis3_big.htm">
<img src="klematis3_small.jpg" alt="Klematis" width="110" height="90" />
</a>
<div class="desc">Add a description of the image here</div>
</div>
<div class="img">
<a target="_blank" href="klematis4_big.htm">
<img src="klematis4_small.jpg" alt="Klematis" width="110" height="90" />
</a>
<div class="desc">Add a description of the image here</div>
</div>

</body>
</html>

کدر بودن و شفافیت تصویر در CSS

ایجاد تصاویر شفاف با CSS آسان است.

ایجاد تصاویر شفاف:
<html>
<head>
<style type="text/css">
img
{
opacity:0.4;
filter:alpha(opacity=40);
}
</style>
</head>
<body>

<h1>Image Transparency</h1>
<img src="klematis.jpg" width="150" height="113" alt="klematis"
onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"
onmouseout="this.style.opacity=0.4;this.filters.alpha.opacity=40" />

<img src="klematis2.jpg" width="150" height="113" alt="klematis"
onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"
onmouseout="this.style.opacity=0.4;this.filters.alpha.opacity=40" />
</body>
</html>

ایجاد یک box شفاف با متنی روی تصویر پیش زمینه
<html>
<head>
<style type="text/css">
div.background
{
width: 500px;
height: 250px;
background: url(klematis.jpg) repeat;
border: 2px solid black;
}
div.transbox
{
width: 400px;
height: 180px;
margin: 30px 50px;
background-color: #ffffff;
border: 1px solid black;
filter:alpha(opacity=60);
opacity:0.6;
}
div.transbox p
{
margin: 30px 40px;
font-weight: bold;
color: #000000;
}
</style>
</head>
<body><div class="background">
<div class="transbox">
<p>This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
</p>
</div>
</div>
</body>
</html>

نکته: مثال های بالا هنوز استاندارد نیستند. اما در همه مرورگرهای جدید کار می کند.

مثال اول - ایجاد یک تصویر شفاف

در ابتدا چگونگی ایجاد یک تصویر شفاف با CSS را به شما نشان دادیم.

تصویر معمولی:

clip_image001

همان تصویر با شفافیت:

clip_image003

به سورس کد زیر نگاه کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<img src="klematis.jpg" width="150" height="113" alt="klematis"
style="opacity:0.4;filter:alpha(opacity=40)" />

 

Firefox از پراپرتی opacity:x برای شفافیت استفاده می کند، در حالیکه IE از filter:alpha(opacity=x) استفاده می کند.

نکته: سینتکس شفافیت، opacity:x است.

در فایرفاکس، (opacity:x) می تواند مقداری بین 0.0 تا 1.0 باشد. مقدار کمتر، آن عنصر را شفافتر می کند.

در اینترنت اکسپلورر، (filter:alpha(opacity=x)) می تواند مقداری بین 0 تا 100 باشد. مقداری کمتر، آن عنصر را شفاف تر می کند.

مثال دوم متن در box شفاف

clip_image002

سورس کد این تصویر به شرح زیر است:

<html>
<head>
<style type="text/css">
div.background
{
width:500px;
height:250px;
background:url(klematis.jpg) repeat;
border:2px solid black;
}
div.transbox
{
width:400px;
height:180px;
margin:30px 50px;
background-color:#ffffff;
border:1px solid black;
/* for IE */
filter:alpha(opacity=60);
/* CSS3 standard */
opacity:0.6;
}
div.transbox p
{
margin:30px 40px;
font-weight:bold;
color:#000000;
}
</style>
</head>

<body>

<div class="background">
<div class="transbox">
<p>This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
This is some text that is placed in the transparent box.
</p>
</div>
</div>

</body>
</html>

 

ابتدا یک عنصر div class="background")) با پهنا و ارتفاع ثابت، یک تصویر پیش زمینه، و یک border ایجاد کردیم. سپس یک div کوچکتر (class="transbox") درون عنصر div اول ایجاد کردیم. این div نیز دارای پهنای ثابت، تصویر پیش زمینه، و یک border است. به علاوه، این div را شفاف کردیم.

درون div شفاف، مقداری متن درون عنصر p وارد کردیم.

Spriteهای تصویر در CSS

Spriteهای تصویر

sprite تصویر مجموعه ای از تصاویر است که درون یک تصویر واحد گذاشته شده اند.

صفحه وبی با تصاویر زیاد، مدت طولانی طول می کشد تا load شود و requestهای زیادی از سرور می کند.

استفاده از spriteهای تصویر، تعداد requestها از سرور را کاهش می دهد و پهنای باند را ذخیره می کند.

Spriteهای تصویر – مثالی ساده
img.home
{
width:46px;
height:44px;
background:url(img_navsprites.gif) 0 0;
}

<img class="home" src="img_trans.gif" /> فقط یک تصویر کوچک شفاف تعریف می کند زیرا اتریبیوت src نباید خالی باشد. تصویر نمایش داده شده، پیش زمینه تصویری است که در CSS معین کردیم.

width:46px;height:44px بخشی از تصویری را که می خواهیم استفاده کنیم، تعریف می کند

background:url(img_navsprites.gif) 0 0 پشت زمینه تصویر و موقعیتش را تعریف می کند.

این، آسان ترین راه برای استفاده از spriteهای تصویر است، حالا می خواهیم با استفاده از لینک و hover effects آن را گسترش دهیم.

Spriteهای تصویر – ایجاد لیست پیمایش

می خواهیم از sprite تصویر ("img_navsprites.gif") استفاده کنیم تا یک لیست پیمایش ایجاد کنیم.

ما از یک لیست HTML استفاده می کنیم، زیرا می تواند یک لینک باشد و همچنین تصویر پیش زمینه را نیز ساپورت می کند:

بجای استفاده از سه تصویر، از یک تصویر واحد استفاده می کنیم ("img_navsprites.gif")

clip_image001

با CSS می توان فقط قسمت از عکس را که نیاز است، نشان داد.

در مثال زیر، CSS تعیین می کند کدام بخش از تصویر "img_navsprites.gif" نشان داده شود:

 

#navlist{position:relative;}
#navlist li{margin:0;padding:0;list-style:none;position:absolute;top:0;}
#navlist li, #navlist a{height:44px;display:block;}

#home{left:0px;width:46px;}
#home{background:url('img_navsprites.gif') 0 0;}

#prev{left:63px;width:43px;}
#prev{background:url('img_navsprites.gif') -47px 0;}

#next{left:129px;width:43px;}
#next{background:url('img_navsprites.gif') -91px 0;}

 

مثال بالا توضیح داد که:

  • #navlist{position:relative;} موقعیت روی "نسبی (relative)" تنظیم می شود تا اجازه موقعیت یابی مطلق درون آن را بدهد.
  • #navlist li{margin:0;padding:0;list-style:none;position:absolute;top:0;} margin و padding روی 0 تنظیم می شوند، list-style حذف می شود، و همه list itemها موقعیت یابی مطلق می شوند.
  • #navlist li, #navlist a{height:44px;display:block;} ارتفاع همه تصاویر 44px است.

حالا بیایید شروع به موقعیت یابی و استایل هر قسمت معین کنیم:

  • #home{left:0px;width:46px;} تا منتهی الیه چپ موقعیت یابی می شوند، و پهنای تصویر 46px است
  • #home{background:url(img_navsprites.gif) 0 0;} تصویر پشت زمینه و موقعیتش را تعریف می کند (چپ 0px، بالا 0px)
  • #prev{left:63px;width:43px;} 63px به سمت راست موقعیت یابی می شود (46px پهنای home، + مقداری فضای اضافی بین آیتم ها) و پهنایش 43px است
  • #prev{background:url('img_navsprites.gif') -47px 0;} تصویر پیش زمینه را 47px به سمت راست تعریف می کند
  • #next{left:129px;width:43px;} 129px به سمت راست موقعیت یابی می شود (63px شروع #prev + 43px پهنای #prev ، + فضای اضافی)، و پهنا 43px است.
  • #next{background:url('img_navsprites.gif') no-repeat -91px 0;} تصویر پیش زمینه را 91px به سمت راست تعزیف می کند (46px پهنای #home، + 1px تقسیم کننده خط + 43px پهنای #prev + 1px نقسیم کننده خط)
Spriteهای تصویر – افکت hover

حالا می خواهیم افکت hover را به لیست پیمایش مان اضافه کنیم.

عکس جدیدمان ("img_navsprites_hover.gif") شامل سه تصویر پیمایش و سه تصویر جهت استفاده برای افکت های hover می شود.

clip_image001[6]

از آنجاییکه این تصوبر، تصویری واحد است، نه شش فایل مجزا، هنگامی که کاربری روی تصویر hover می کند، تاخیری در loading وجود نخواهد داشت.

حالا فقط سه خط کد اضافه کنید تا افکت hover اضافه شود:

#home a:hover{background: url('img_navsprites_hover.gif') 0 -45px;}
#prev a:hover{background: url('img_navsprites_hover.gif') -47px -45px;}
#next a:hover{background: url('img_navsprites_hover.gif') -91px -45px;}

مثال بالا توضیح داد که:

  • از آنجاییکه list item حاوی یک لینک است، می توانیم از :hover pseudo-class
  • #home a:hover{background: transparent url(img_navsprites_hover.gif) 0 -45px;} برای هر سه تصویر hoverف ما یک موقعیت پیش زمینه تعیین می کنیم، فقط 45px پایین تر.

Media Types در CSS

Media Types به شما اجازه می دهند تعریف کنید سندهای چگونه در mediaهای مختلف present شوند. می توان اسناد را به طرق مختلف روی صفحه، روی کاغذ، با مرورگری شنیداری، و غیره نمایش داد.

Media Types

برخی از پراپرتی های CSS، فقط برای بعضی از media طراحی شده است. مثلاً پراپرتی "voice-family" برای user agentهای شنیداری (aural) طراحی شده است. بعضی از پراپرتی های دیگر را می توان برای media typeهای مختلف استفاده کرد. مثلاً، پراپرتی "font-size" را می توان هم برای screen وهم برای print media استفاده کرد، اما شاید با مقادیر مختلف. معمولا یک سند نیاز به فونت بزرگتری روی screen نسبت به کاغذ دارد، و خواندن فونت های sans-serif روی screen آسانتر است، در حالیکه خواندن فونت های serif، روی کاغذ آسانتر است.

قانون @media

قانون @media، اجازه اعمال قوانین استایل مختلف به media مختلف در همان style sheet را می دهد.

استایل موجود در مثال زیر، به مرورگر می گوید فونت verdana با 40px را روی screen نمایش دهد. اما اگر صفحه چاپ شود، دارای فونت Times با 40px خواهد بود. توجه داشته باشید که font-weight هم روی screen و هم روی کاغذ، روی bold تنظیم شده است:

<html>
<head>
<style>
@media screen
  {
  p.test {font-family:verdana,sans-serif;font-size:14px;}
  }
@media print
  {
  p.test {font-family:times,serif;font-size:10px;}
  }
@media screen,print
  {
  p.test {font-weight:bold;}
  }
</style>
</head>
<body>
....
</body>
</html>

Media Typeهای مختلف

نکته: نام media type به حذوف کوچک یا بزرگ حساس نیستند.

 

image

 

 

 

سلکتورهای اتریبیوت در CSS

عنصرهای استایل HTML با اتریبیوت های معین

استایل کردن عنصرهای HTML که دارای اتریبیوت های معین هستند، امکان پذیر است، نه فقط class و id.

نکته: اینترنت اکسپلورر 7 و بالاتر، در صورتیکه !DOCTYPE تعریف شده باشد، سلکتورهای اتریبیوت را ساپورت می کند. Attribute selection در نسخه های پایین تر IE ساپورت نمی شوند.

سلکتور اتریبیوت

مثال زیر، همه عنصرها را با title attribute ، استایل می کند:

[title]
{
color:blue;
}

 

اتریبیوت و سلکتور value

مثال زیر، همه عنصرها با title="W3Schools" را استایل می کند:

[title=W3Schools]
{
border:5px solid green;
}

 

اتریبیوت و سلکتور value - مقادیر چندگانه

مثلا زیر، همه عنصرها با title attribute که حاوی valueی معینی هستند را استایل می کند. این مثال حتی اگر اتریبیوت دارای valueهایی باشد که توسط space جدا شده اند نیز کار می کند:

[title~=hello] { color:blue; }

مثال زیر، همه عنصرها با lang attribute که حاوی valueی معینی هستند را استایل می کند. این مثال حتی اگر اتریبیوت دارای valueهایی باشد که توسط ( - ) جدا شده اند نیز کار می کند:

[lang|=en] { color:blue; }

استایل دادن به فرم ها

سلکتورهای اتریبویت برای استایل دادن به فرم هایی بدون class یا ID مفید هستند:

 

input[type="text"]
{
width:150px;
display:block;
margin-bottom:10px;
background-color:yellow;
}
input[type="button"]
{
width:120px;
margin-left:35px;
display:block;
}

 

"نبایدها" در CSS

در زیر به تکنولوژی ای اشاره شده است که باید هنگام استفاده از CSS از آنها پرهیز کرد.

رفتارهای Internet Explorer

رفتارها (behaviors) چیستند؟ رفتارها در IE5معرفی شدند. behaviors، روشی برای اضافه کردن رفتار به عنصرهای HTML با استفاده از استایل های CSS هستند.

چرا باید از آن پرهیز کرد؟ behavior attribute، فقط توسط internet explorer ساپورت می شوند.

در عوض از چه چیزی استفاده کنیم؟ در عوض از JavaScript و HTML DOM استفاده کنید.

مثال اول: Mouseover Highlight

فایل HTML زیر، دارای عنصر <style> است که رفتاری را برای عنصر <h1> تعریف می کند:

<html>
<head>
<style type="text/css">
h1 { behavior:url(behave.htc); }
</style>
</head>

<body>
<h1>Mouse over me!!!</h1>
</body>
</html>

 

سند اچ تی ام ال "behave.htc" در زیر نشان داده شده است:

 

<attach for="element" event="onmouseover" handler="hig_lite" />
<attach for="element" event="onmouseout" handler="low_lite" />

<script type="text/javascript">
function hig_lite()
{
element.style.color='red';
}

function low_lite()
{
element.style.color='blue';
}
</script>

مثال دوم - Typewriter Simulation

فایل HTML زیر دارای عنصر <style> است که رفتاری را برای عنصری با آی دی "typing" تعریف می کند:

<html>
<head>
<style type="text/css">
#typing
{
behavior:url(behave_typing.htc);
font-family:"courier new";
}
</style>
</head>

<body>
<span id="typing" speed="100">IE5 introduced DHTML behaviors.
Behaviors are a way to add DHTML functionality to HTML elements
with the ease of CSS.<br /><br />How do behaviors work?<br />
By using XML we can link behaviors to any element in a web page
and manipulate that element.</p>
</span>
</body>
</html>

 

سند اچ تی ام ال "typing.htc" در زیر نشان داده است:

<attach for="window" event="onload" handler="beginTyping" /> 
<method name="type" />

<script type="text/javascript">
var i,text1,text2,textLength,t;

function beginTyping()
{
i=0;
text1=element.innerText;
textLength=text1.length;
element.innerText="";
text2="";
t=window.setInterval(element.id+".type()",speed);
}

function type()
{
text2=text2+text1.substring(i,i+1);
element.innerText=text2;
i=i+1;
if (i==textLength)
{
clearInterval(t);
}
}
</script>

 

خلاصه

در این سلسله از مقالات، چگونگی ایجاد style sheetها برای کنترل استایل و layout چندین صفحه وب بطور همزمان را یاد گرفتید.

هچنین یاد گرفتید چگونه از CSS برای اضافه کردن پیش زمینه، فرمت دادن به متن، اضاه و فرمت کردن borderها، و تعیین margin و padding عناصر استفاده کنید.

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

تگ ها:

دسته بندی ها: طراحی وب

آموزش تخصصی CSS (قسمت سوم)

ارسال شده توسط administrator
22. جوييه 2010 11:28

دور قاب CSS (CSS Box Model)

تمامی عناصر HTML را می توان box در نظر گرفت. در CSS، عبارت "box model" هنگام صحبت در مورد design و layout استفاده می شود.

CSS Box Model، الزاماً یک box است که دور عناصر HTML را می گیرد، و تشکیل شده است از: حاشیه ها، قاب ها (border)، padding، و محتوای واقعی.

box model، به ما اجازه می دهد قابی را اطراف عناصر و فضای عناصر در رابطه با عناصر دیگر قرار دهیم.

تصویر زیر، box model را تشریح می کند:

clip_image001

توضیح بخش های مختلف:

margin: نواحی اطراف border را پاک می کند. margin رنگ پیش زمینه ندارد، و کاملا شفاف است

border: یک border اطراف padding و content را می پوشاند. border، از رنگ پیش زمینه box تاثیر می گیرد

padding: نواحی اطراف content را پاک می کند. padding از رنگ پیش زمینه box تاثیر می گیرد

content: محتوای box، یعنی جاییکه متن و تصاویر ظاهر می شوند

به منظور تنظیم صحیح پهنا و ارتفاع عنصر در همه مرورگرها، باید بدانید box model چگونه کار می کند.

پهنا و ارتفاع عنصر

نکته مهم: هنگامی که پراپرتی پهنا و ارتفاع عنصر با CSS را تعیین می کنید، فقط پهنا و ارتفاع ناحیه content را تعیین می کنید. به منظور درک اندازه عنصر، همچنین باید padding، border، و margin را نیز اضافه کنید.

کل پهنای عنصر در مثال زیر، 300px است:

width:250px;
padding:10px;
border:5px solid gray;
margin:10px;

بیایید محاسبه ریاضی اش را هم انجام دهیم:

250px (پهنا)
+ 20px (چپ و راست padding )
+ 10px (چپ و راست border )
+ 20px (چپ و راست margin )
= 300px

تصور کنید فقط 250px فضا دارید. بیایید عنصری با پهنای کل بسازیم:

width:220px;
padding:10px;
border:5px solid gray;
margin:0px;

 

کل پهنای عنصر همیشه باید بصورت زیر برگزار شود:

کل پهنای عنصر = پهنا + padding چپ + padding راست + border چپ + border راست + margin چپ + margin راست

کل ارتفاع عنصر نیز باید بصورا زیر محاسبه شود:

کل ارتفاع عنصر = ارتفاع + padding بالا + padding پایین + border بالا + border پایین + margin بالا + margin پایین

مبحث سازگاری مرورگرها

اگر مثال قبلی را در Internet Explorer امتحان کرده باشید، دیده اید که کل ارتفاع دقیقاً 250px نبود.

IE، هنگام تعیین پراپرتی پهنا، padding و border را در پهنا محاسبه می کند، مگر اینکه یک DOCTYPE تعریف شود.

برای حل این مشکل، کافیست یک DOCTYPE به کد اضافه کنید:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style type="text/css">
div.ex
{
width:220px;
padding:10px;
border:5px solid gray;
margin:0px;
}
</style>
</head>

 

CSS Border

پراپرتی های CSS border، به شما اجازه تعیین استایل و رنگ border عنصر را می دهند.

استایل border

پراپرتی border-style، تعیین می کند چه نوع borderیی نمایش داده شود.

clip_image001[12] هیچ یک ازپراپرتی های border تا وقتی که پراپرتی border-style تنظیم نشوند، تاثیری نخواهند داشت!

valueهای border-style

none: بدون border

dotted: یک border نقطه چین تعریف می کند

dashed: یک border خط چین تعریف می کند

solid: یک border با خط صاف تعریف می کند

double: دو border تعریف می کند. پهنای این دو border، اندازه valueی border-width است

groove: یک border سه بعدی تعریف می کند. ابن افکت بستگی به valueی border-color دارد

پهنای border

پراپرتی border-width برای تنظیم پهنای border استفاده می شود.

پهنا به صورت پیکسل، یا با استفاده از یکی از valueی از پیش تعریف شده نازک، متوسط، و ضخیم تنظیم می شود.

نکته: پراپرتی border-width در صورتی که به تنهایی استفاده شود، موثر نخواهد بود. ابتدا از پراپرتی border-width برای تنظیم borderها استفاده کنید.

 

p.one
{
border-style:solid;
border-width:5px;
}
p.two
{
border-style:solid;
border-width:medium;
}

 

رنگ border

پراپرتی border-color برای تنظیم border استفاده می شود. رنگ را می توان به طرق زیر تنظیم کرد:

  • نام – نام یک رنگ، مثلاً "قرمز"
  • RGB – مقدار RGB، مثلاً "rgb(255,0,0)"
  • Hex – مقدار Hex، مثلاً ""#ff0000

همچنین می توان رنگ border را به صورت "شفاف" نیز تنظیم کرد.

نکته: پراپرتی "border-color" در صورتی که به تنهایی استفاده شود، کار نمی کند. ابتدااز پراپرتی "border-style" جهت تنظیم borderها استفاده کنید.

p.one
{
border-style:solid;
border-color:red;
}
p.two
{
border-style:solid;
border-color:#98bf21;
}

 

Border – ضلع های مجزا

در CSS، ایجاد borderهای مختلف برای ضلع های مختلف ممکن است.

p
{
border-top-style:dotted;
border-right-style:solid;
border-bottom-style:dotted;
border-left-style:solid;
}

مثال بالا را با یک پراپرتی واحد نیز می توان تنظیم کرد:

border-style:dotted solid;

 

راپرتی border-style ممکن است از یک تا چهار value داشته باشد.

  • border-style: dotted solid double dashed
    • border بالا، نقطه چین است
    • border سمت راست، خط صاف است
    • border پایین، دوبل است
    • border سمت چپ، خط چین است
  • border-style: dotted solid double
    • border بالا، نقطه چین است
    • border های سمت راست و چپ، خط صاف هستند
    • border پایین، دوبل است
  • border-style: dotted solid
    • border های سمت بالا و پایین، نقطه چین هستند
    • border های سمت راست و چپ، خط صاف هستند
  • border-style: dotted
    • همه borderها، خط صاف هستند

در مثلا بالا، از پراپرتی border-style استفاده شده است؛ اما با border-width و border-color نیز کار می کند.

Border – پراپرتی سریع نویسی (Shorthand property)

همانطور که در مثال بالا می بینید، هنگام کارکردن با borderها، پراپرتی های زیادی وجودی دارند.

برای کوتاه کردن کد، می توان همه پراپرتی های border را می توان در یک پراپرتی خلاصه کرد. این پراپرتی، shorthand property نامیده می شود.

پراپرتی سریع نویسی برای پراپرتی بردر، "border" است:

border:5px solid red;

 

هنگام استفاده از پراپرتی border، ترتیب valueها عبارت است از:

  • border-width
  • border-style
  • border-color

اگر یکی از valueهای بالا وجود نداشته باشد، تا وقتی که valueهای دیگر در ترتیب خود باشند، مشکلی پیش نمی آید.

outlineهای CSS

outline، خطی است که اطراف عناصر و بیرون از لبه border کشیده می شود تا عنصر را برجسته تر کند.

پراپرتی outline، استایل، رنگ، و پهنای outline را تنظیم می کند.

مثال زیر چگونگی رسم یک outline را در اطراف عنصر نشان می دهد:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style type="text/css">
p
{
border:1px solid red;
outline:green dotted thick;
}
</style>
</head>

<body>
<p><b>Note:</b> Internet Explorer 8 (and higher) supports the outline property
if a !DOCTYPE is specified.</p>
</body>
</html>

 

Margin در CSS

پراپرتی margin، فضای اطراف عناصر را تعریف می کند.

margin، فضای اطراف عنصر (بیرون border) را پاک می کند. margin، رنگ پیش زمینه ندارد، و کاملا شفاف است.

margin بالا، راست، پایین، و چپ را می توان با استفاده از پراپرتی های جداگانه، بطور مستقل تغییر داد. برای تغییر همه marginها بطور همزمان، می توان از پراپرتی shorthand margin استفاده کرد.

Valueهای ممکن

image

Margin- ضلع های مجزا

در CSS، ایجاد borderهای مختلف برای ضلع های مختلف ممکن است.

 


margin-top:100px;
margin-bottom:100px;
margin-right:50px;
margin-left:50px;

 

Margin – پراپرتی سریع نویسی ((Shorthand property

برای کوتاه کردن کد، می توان همه پراپرتی های border را می توان در یک پراپرتی خلاصه کرد. این پراپرتی، shorthand property نامیده می شود.

پراپرتی سریع نویسی برای همه پراپرتی های مارجین، "margin" است:

margin:100px 50px;

 

پراپرتی مارجین ممکن است از یک تا چهار value داشته باشد:

margin: 25px 50px 75px 100px

  •  
    • margin بالا، 25px است
    • margin سمت راست، 50pxاست
    • margin پایین، 75px است
    • margin سمت چپ، 100px است

margin: 25px 50px 75px

  •  
    • margin بالا، 25px است
    • margin های سمت راست و چپ، 50px هستند
    • margin پایین، 75px است

margin: 25px 50px

  •  
    • margin های سمت بالا و پایین، 25px هستند
    • margin های سمت راست و چپ، 50px هستند

margin: 25px

  •  
    • همه marginها، 25px هستند

Padding در CSS

پراپرتی CSS padding، فضای بین border عنصر و محتوای عنصر را تعریف می کند.

Padding

padding، فضای اطراف محتوا (درون border) عنصر را پاک می کند. padding تحت تاثیر رنگ پیش زمینه عنصر است.

padding بالا، راست، پایین، و چپ را می توان با استفاده از پراپرتی های جداگانه، بطور مستقل تغییر داد. برای تغییر همه paddingها بطور همزمان، می توان از پراپرتی shorthand padding استفاده کرد.

Valueهای ممکن

image

 

Padding- ضلع های مجزا

در CSS، ایجاد paddingهای مختلف برای ضلع های مختلف ممکن است.

padding-top:25px;
padding-bottom:25px;
padding-right:50px;
padding-left:50px;

 

Padding – پراپرتی سریع نویسی ((Shorthand property

برای کوتاه کردن کد، می توان همه پراپرتی های margin را می توان در یک پراپرتی خلاصه کرد. این پراپرتی، shorthand property نامیده می شود.

پراپرتی سریع نویسی برای همه پراپرتی های پدینگ، "padding" است:

padding:25px 50px;

 

پراپرتی پدینگ ممکن است از یک تا چهار value داشته باشد:

padding: 25px 50px 75px 100px

  •  
    • padding بالا، 25px است
    • padding سمت راست، 50pxاست
    • padding پایین، 75px است
    • padding سمت چپ، 100px است

padding: 25px 50px 75px

  •  
    • padding بالا، 25px است
    • padding های سمت راست و چپ، 50px هستند
    • padding پایین، 75px است

padding: 25px 50px

  •  
    • padding های سمت بالا و پایین، 25px هستند
    • padding های سمت راست و چپ، 50px هستند

padding: 25px

  •  
    • همه paddingها، 25px هستند

تگ ها:

دسته بندی ها: طراحی وب

آموزش تخصصی CSS (قسمت دوم)

ارسال شده توسط administrator
20. جوييه 2010 14:31

 

پیش زمینه CSS

propertyهای پیش زمینه CSS برای تعریف افکت های یک عنصر بکار می رود.

propertyهای CSS برای افکت های پیش زمینه استفاده می شوند:

  • رنگ پیش زمینه (background-color)
  • تصویر پیش زمینه (background-image)
  • تکرار پیش زمینه (background-repeat)
  • الصاق پیش زمینه (background-attachment)
  • موقعیت پیش زمینه (background-position)
رنگ پیش زمینه

property رنگ پیش زمینه، رنگ پیش زمینه یک عنصر را تعیین می کنند.

رنگ پیش زمینه صفحه در سلکتور body تعریف می شود:

body {background-color:#b0c4de;}

 

رنگ پیش زمینه را می توان از طریق طرق زیر تعیین کرد:

  • نام – نام یک رنگ، مثلاً "قرمز"
  • RGB – مقدار RGB، مثلاً "rgb(255,0,0)"
  • Hex – مقدار Hex، مثلاً ""#ff0000

در مثال زیر، عنصر های h1، p، و div دارای رنگهای پیش زمینه مختلفی هستند:

h1 {background-color:#6495ed;}
p {background-color:#e0ffff;}
div {background-color:#b0c4de;}

 

تصویر پیش زمینه

property تصویر پیش زمینه، تصویری را برای استفاده به عنوان پیش زمینه عنصر تعیین می کند.

این تصویر بطور پیش فرض تکرار می شود تا کل عنصر را بپوشاند.

تصویر پیش زمینه صفحه را می توان بشکل زیر تعیین کرد:

body {background-image:url('paper.gif');} 

 

مثال زیر، ترکیب بدی از متن و تصویر پیش زمینه است. این متن تقریباً غیر قابل خواندن است:

body {background-image:url('bgdesert.jpg');}

 

تصویر پیش زمینه – تکرار افقی و عمودی

بطور پیش فرض، property تصویر پیش زمینه، تصویری را هم بطور افقی و هم عمودی تکرار می کند.

بعضی از تصویر ها فقط باید افقی یا عمودی تکرار کرد، مگر نه عجیب غریب دیده می شوند، مانند مثال زیر:

body
{
background-image:url('gradient2.png');
}

 

اگر تصویر فقط افقی تکرار شود (repeat-x)، پیش زمینه بهتر بنظر می رسد:

 

body
{
background-image:url('gradient2.png');
background-repeat:repeat-x;
}

 

تصویر پیش زمینه – تعیین موقعیت و عدم تکرار

نشان دادن تصویر فقط یکبار، توسط property تکرار پیش زمینه (background-repeat) تعیین می شود:

body
{
background-image:url('img_tree.png');
background-repeat:no-repeat;
}

 

در مثال بالا، تصویر پیش زمینه در همان مکانی که متن نشان داده شده، نشان داده می شود. ما می خواهیم موقعیت تصویر را تغییر دهیم، بطوریکه زیاد با متن تداخل نداشته باشد.

موقعیت تصویر توسط property موقعیت پیش زمینه (background-position) تعیین می شود:

body
{
background-image:url('img_tree.png');
background-repeat:no-repeat;
background-position:right top;
}

 

متن CSS

رنگ متن

property رنگ برای تعیین رنگ متن استفاده می شود. رنگ را می توان از طرق زیر تعیین کرد:

  • نام – نام یک رنگ، مثلاً "قرمز"
  • RGB – مقدار RGB، مثلاً "rgb(255,0,0)"
  • Hex – مقدار Hex، مثلاً ""#ff0000

رنگ پیش فرض برای صفحه در بدنه سلکتور تعریف می شود.

body {color:blue;}
h1 {color:#00ff00;}
h2 {color:rgb(255,0,0);}

 

تراز کردن متن (Text Alignment)

property تراز متن برای تعیین تراز افقی متن استفاده می شود.

می توان متن را در میان، چپ یا راست صفحه چید، یا می توان justify کرد.

وقتی متن justify می شود، هر خط کشیده می شود بطوریکه هر خط دارای پهنای مساوی خواهد بود، و حاشیه های چپ و راست صاف می شوند.

h1 {text-align:center;}
p.date {text-align:right;}
p.main {text-align:justify;}

 

decoration متن

از این property برای تعیین یا حذف decorationها از متن استفاده می شود.

اکثراً از این property برای حذف underline از لینکها استفاده می شود:

a {text-decoration:none;}

 

همچنین می توان برای decorate کردن متن نیز استفاده کرد:

h1 {text-decoration:overline;}
h2 {text-decoration:line-through;}
h3 {text-decoration:underline;}
h4 {text-decoration:blink;}

 

انتقال متن (Text Transformation)

از این property برای تعیین بزرگ یا کوچک بودن حروف متن استفاده می شود.

می توان از آن برای بزرگ یا کوچک کردن حروف، یا بزرگ کردن حرف اول هر کلمه استفاده کرد.

p.uppercase {text-transform:uppercase;}
p.lowercase {text-transform:lowercase;}
p.capitalize {text-transform:capitalize;}

 

Indentation متن

از این property برای تعیین indentation سطر اول متن استفاده می شود.

p {text-indent:50px;}

 

فونت CSS

propertyهای فونت CSS، نوع فونت، ضخیم بودن، اندازه و سبک متن را تعریف می کنند.

تفاوت بین فونت های SERIF و Sans-serif

clip_image001[1]

گروه فونت های CSS

در CSS، دو گروه فونت وجود دارد:

گروه معمولی – گروهی از فونت ها با ظاهری مشابه (مانند "serif"، یا Monospace)

گرو مخصوص – نوع بخصوصی از فونت ها ( مانند Times New Roman یا Arial)

گروه فونت

گروه فونت متن با property نوع فونت تعیین می شود.

این property باید چندین نام فونت را به صورت سیستم "fallback" داشته باشد. اگر مرورگر اولین فونت را ساپورت نکند، از فونت بعدی استفاده می کند.

با فونتی که دوست دارید، شروع کنید، و با فونت معمولی تمام کنید، تا به مرورگر اجازه دهید فونتی مشابه در گروه معمولی را انتخاب کند.

p{font-family:"Times New Roman", Times, serif;}

استایل فونت

property استایل فونت (font-style) اکثراً برای کج (italic) کردن متن بکار می رود.

این property دارای سه value است:

  • نرمال – متن بطور عادی نمایش داده می شود
  • کج – متن بصورت کج نمایش داده می شود
  • اریب – متن بصورت "تکیه زده" نمایش داده می شود ( این value شبیه قبلی است، اما کمتر استفاده می شود)
p.normal {font-style:normal;}
p.italic {font-style:italic;}
p.oblique {font-style:oblique;}

اندازه فونت

این property،اندازه فونت را تعیین می کند.

داشتن قابلیت مدیریت اندازه فونت در طراحی وب مهم است. اما، نباید از تنظیمات اندازه فونت برای شبیه کردن پاراگراف ها به هدینگ یا بالعکس استفاده کرد.

همیشه از تگ HTML مناسب، از قبیل <h1> - <h6> برای هدینگ ها و از <p> برای پاراگراف ها استفاده کنید.

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

فونت مطلق:

  • متن را به اندازه ای معین در می آورد
  • به کاربر اجازه تغییر اندازه فونت را در همه مرورگرها نمی دهد
  • فونت مطلق هنگامی مفید است که اندازه فیزیکی خروجی مشخص باشد

فونت نسبی:

  • اندازه را نسبت به عنصر مجاور تعیین می کند
  • به کاربر اجازه تغییراندازه متن در مرورگر را می دهد.

تعیین اندازه فونت با پیکسل ها

تنظیم اندازه متن با پیکسل ها به شما امکان کنترل کامل روی اندازه متن را می دهد.

h1 {font-size:40px;}
h2 {font-size:30px;}
p {font-size:14px;}

مثال بالا به Firefox، Chrome، و Safari اجازه resize کردن متن را می دهد، ولی به Internet Explorer نمی دهد.

می توان متن را با استفاده از ابزار zoom در همه مرورگرها resize کرد ( اما این کار، کل صفحه را resize می کند، نه فقط متن را).

تعیین اندازه فونت با Em

خیلی از برنامه نویسان جهت پرهیز از مشکل resize کردن ذر Internet Explorer، از em بجای پیکسل استفاده می کنند.

واحد اندازه em، توسط W3C معرفی شده است.

یک em برابر با اندازه کنونی فونت است. اندازه متن پیش فرض در مرورگرها 16px است. پس اندازه پیش فرض یک em، برابر با 16px است.

تبدیل پیکسل به em را می توان از طریق این فرمول انجام داد: pixels/16=em

h1 {font-size:2.5em;} /* 40px/16=2.5em */
h2 {font-size:1.875em;} /* 30px/16=1.875em */
p {font-size:0.875em;} /* 14px/16=0.875em */

در مثال بالا، اندازه متن در em همان اندازه مثال قبلی در پیکسل است. اما، با اندازه em، تنضیم اندازه متن در همه مرورگرها ممکن است.

متاسفانه، هنوز مشکلی در IE وجود دارد. هنگام resize کردن متن، از مقداری که باید، بزرگتر ، و از مقداری که باید، کوچکتر می شود.

استفاده از ترکیبی از درصد و Em

solutionیی که در همه مرورگرها جواب می دهد، تنظیم اندازه فونت به درصدی از عنصر بدنه است:

body {font-size:100%;}
h1 {font-size:2.5em;}
h2 {font-size:1.875em;}
p {font-size:0.875em;}

حالا کد ما کار می کند. و در همه مرورگرها اندازه یکسان را نشان می دهد، و به همه مرورگرها اجازه zoom یا resize کردن متن را می دهد.

لینک های CSS

لینک ها را می توان به روش های مختلفی style کرد.

Style کردن لینک ها

لینک ها را می توان با هر پراپرتی CSS، استایل کرد ( مثلاً رنگ، گروه فونت، رنگ پشت زمینه).

نکته ویژه در مورد لینک ها این است که می توان آنها را به طور متفاوتی، بسته به حالتی که در آن هستند، استایل کرد.

لینک ها چهار حالت دارند:

  • a:link – یک لینک نرمال و بازدید نشده
  • a:visited – لینکی که کاربر بازدید کرده است
  • a:hover – یک لینک، هنگامی که کاربر روی آن کلیک می کند
  • a:active – یک لینک، لحظه ای که کلیک می شود
a:link {color:#FF0000;}      /* unvisited link */
a:visited {color:#00FF00;} /* visited link */
a:hover {color:#FF00FF;} /* mouse over link */
a:active {color:#0000FF;} /* selected link */

برای تنظیم استایل برای حالت های مختلف لینک، چند قانون وجود دارد:

  • a:hover باید بعد از a:link و a:visited باشد
  • a:active باید بعد از a:hover باشد

استایل های رایج لینک

در مثال بالا، لینک، رنگ را بر اساس حالتی که در آن است تغییر می دهد.

بیایید نگاهی به روش های رایج دیگر برای استایل کردن لینک ها بیاندازیم:

decoration متن

از پراپرتی text-decoration اکثراً برای حذف underline از لینک ها استفاده می شود:

a:link {text-decoration:none;}
a:visited {text-decoration:none;}
a:hover {text-decoration:underline;}
a:active {text-decoration:underline;}

رنگ پیش زمینه

پراپرتی رنگ پیش زمینه (background-color)، رنگ پیش زمینه برای لینک را تعیین می کند:

 
a:link {background-color:#B2FF99;}
a:visited {background-color:#FFFF85;}
a:hover {background-color:#FF704D;}
a:active {background-color:#FF704D;}

لیست های CSS

پراپرتی های لیست CSS به شما اجازه می دهند:

  • لیستی متفاوت از item markerها را برای لیست های سفارش داده شده تعیین کنید
  • لیستی متفاوت از item markerها را برای لیست های سفارش داده نشده تعیین کنید
  • تصویری را بعنوان لیست item marker تعیین کنید

لیست

در HTML، دو نوع لیست وجود دارد:

  • لیست های سفارش داده شده – لیست آیتم ها با bullet نشانه گذاری می شوند
  • لیست های سفارش داده شده – لیست آیتم ها به اعداد یا حروف نشانه گذاری می شوند

با CSS، می توان لیست ها را بیشتر style کرد، و می توان تصاویر را بعنوان لیست item marker استفاده کرد.

لیست Item Markerهای مختلف

نوع لیست item marker، با پراپرتی list-style-type تعیین می شود:

ul.a {list-style-type: circle;}
ul.b {list-style-type: square;}

ol.c {list-style-type: upper-roman;}
ol.d {list-style-type: lower-alpha;}

بعضی از مقادیر property مخصوص لیست های سفارش داده نشده هستند، و بعضی شان مخصوص لیست های سفارش داده شده.

 
untitled
 
 

یک تصویر بعنوان List Item Marker

جهت تعیین یک تصویر بعنوان List Item Marker، از پراپرتی list-style-image استفاده کنید:

ul
{
list-style-image: url('sqpurple.gif');
}

مثال بالا به یک اندازه در همه مرورگرها نمایش داده نمی شود. IE و Opera، مارکر تصویر را کمی بزرگتر از Firefox، Chrome، و Safari نمایش می دهند.

اگر می خواهید image-marker در همه مرورگرها به یک اندازه نمایش داده شوند، یک crossbrowser solution در زیر توضیح داده شده است.

Crossbrowser Solution

مثال زیر، image-marker را به یک اندازه در همه مرورگرها نمایش می دهد:

ul
{
list-style-type: none;
padding: 0px;
margin: 0px;
}
li
{
background-image: url(sqpurple.gif);
background-repeat: no-repeat;
background-position: 0px 5px;
padding-left: 14px;
}

این مثال توضیح می دهد که:

  • برای ul:
  •  
    • list-style-type را روی none تنظیم کنید تا list item marker را حذف کنید
    • هم padding و هم margin را روی 0px تنظیم کنید
  • برای li
    • URL تصویر را تعیین کنید، و آن را ققط یکبار نمایش دهید (no-repeat)
    • تصویر را جایی قرار دهید که می خواهید (چپ 0px و پایین 5px)
    • متن را در لیست با padding چپ قرار دهید

لیست – تسریع در نوشتن CSS

تعیین کردن همه پراپرتی در یک پراپرتی واحد نیز ممکن است. به این پراپرتی، shorthand property می گویند.

shorthand propertyیی که برای لیست ها استفاده می شود، پراپرتی list-style است:

 
ul
{
list-style: square url("sqpurple.gif");
}

هنگام استفاده از این پراپرتی، ترتیب valueها به ترتیب زیر است:

  • list-style-type
  • list-style-position
  • list-style-image

اگر یکی از valueهای بالا وجود نداشته باشد، تا وقتی که valueهای دیگر در ترتیب خود باشند، مشکلی پیش نمی آید.

 
 
 
 

جدول های CSS

ظاهر یک جدول HTML را می توان با CSS به طور چشم گیری بهبود داد:

 
image

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

قاب های جدول (Table Border)

جهت تعیین کردن قاب های جدول در CSS، از پراپرتی border استفاده کنید.

مثال زیر، قابی سیاه را برای جدول تعیین می کند، عنصر های th، و td:

table, th, td
{
border: 1px solid black;
}

 

توجه داشته باشید که جدول مثال بالا دارای قاب های دوبل است. دلیلش این است که هم جدول و هم عناصر th، و td دارای قاب های مجزا هستند.

جهت نمایش دادن قاب مجزا برای جدول، از پراپرتی border-collapse استفاده کنید.

Collapse Borderها

پراپرتی border-collapse تعیین می کند آیا قاب های جدول به یک قاب مجزا یا ادغام شوند یا جدا شوند:

table
{
border-collapse:collapse;
}
table,th, td
{
border: 1px solid black;
}

 

ارتفاع و پهنای جدول

ارتفاع و پهنای جدول بوسیله پراپرتی های پهنا و ارتفاع تعریف می شوند.

مثال زیر پهنای جدول را روی 100%، و ارتفاع عنصر th را روی 50px تنظیم می کند:

table 
{
width:100%;
}
th
{
height:50px;
}

 

تراز کردن متن جدول

متن درون جدول با پراپرتی های text-align و vertical-align تراز می شود.

پراپرتی text-align، تراز افقی مانند چپ، راست، یا مرکز را تنظیم می کند:

td
{
text-align:right;
}

 

پراپرتی vertical-align، تراز عمودی مانند بالا، پایین، یا وسط را تنظیم می کند:

td
{
height:50px;
vertical-align:bottom;
}

 

padding جدول

جهت کنترل فضای بین قاب و محتوای جدول، باید از پراپرتی padding روی عناصر td و th استفاده کرد:

td
{
padding:15px;
}

 

رنگ جدول

مثال زیر، رنگ قاب ها، متن و رنگ پیش زمینه عناصر td و th را تنظیم می کند:

table, td, th
{
border:1px solid green;
}
th
{
background-color:green;
color:white;
}


تگ ها:

دسته بندی ها: طراحی وب

آموزش تخصصی CSS (قسمت اول)

ارسال شده توسط administrator
19. جوييه 2010 10:47

در این سلسله ازمقالات، شما چگونگی استفاده از CSS جهت کنترل style و layout چندین صفحه وب بطور همزمان را یاد خواهید گرفت.

برای یادگیری CSS، شما باید درکی پایه ای از مفاهیم HTML و XHTML داشته باشید.

نمونه از CSS

body
{
background-color:#d0e4fe;
}
h1
{
color:orange;
text-align:center;
}
p
{
font-family:"Times New Roman";
font-size:20px;
}

 

CSS چیست؟

  • CSS مخفف Cascading Style Sheets است
  • styleها چگونگی نمایش عناصر HTML را تعریف می کنند
  • styleها برای حل یک مشکل به HTML 4.0 اضافه شدند
  • External Style Sheets می تواند در در انجام کار صرفه جویی کند
  • External Style Sheets در فایل های CSS ذخیره می شوند

نمایش CSS

سند HTML را می توان با styleهای مختلف نمایش داد.

Styleها مشکل بزرگی را حل کردند

HTML هرگز به قصد در برگرفتن tag برای فرمت کردن یک سند ایجاد نشد.

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

وقتی tagهایی مانند <font> و attributeهای رنگ به HTML 3.2 اضافه شد، کابوسی برای برنامه نویسان بود. develop کردن وبسایت های بزرگ، که فونت ها و اطلاعات رنگ به هر صفحه مجزا اضافه شدند، فرآیندی طولانی و پرهزینه شد.

برای حل این مشکل، کنسرسیوم World Wide Web، تصمیم گرفت CSS را ایجاد کند.

در HTML 4.0، می توان کل فرمتینگ را از سند HTML حذف کرد، و در فایل CSS جداگانه ای ذخیره کرد.

امروزه، همه مرورگرها CSS را ساپورت می کنند.

CSS، در انجام مقدار زیادی کار صرفه جویی می کند

CSS، تعریف می کند عناصر HTML چگونه نمایش داده می شوند.

معمولاً Styleها در فایلهای .css ذخیره می شوند. style sheetهای خارجی شما راتنها با ویرایش یک فایل قادر به تغییر ظاهر و layout همه صفحات موجود در یک وبسایت می کند.

مثال

فایل HTML زیر، لینکی به یک style sheet خارجی با تگ <link> است:

<html>
<head>
<link rel="stylesheet"
type="text/css" href="ex1.css" />
</head>

<body>

<h1>This header is 36 pt</h1>
<h2>This header is blue</h2>

<p>This paragraph has a left margin of 50 pixels</p>

</body>
</html>

 

این، فایل style sheet است:

body
{
background-color:yellow;
}
h1
{
font-size:36pt;
}
h2
{
color:blue;
}
p
{
margin-left:50px;
}

 

سینتکس CSS

قاعده CSS، دارای دو بخش اصلی است: یک selector، و یک یا چندین تعریف (declaration):

clip_image001

selector، معمولاً عنصر HTML است که می خواهید style کنید.

هر declaration، از یک property و یک value تشکیل شده است.

property، استایل اتریبیوتی (style attribute) است که می خواهید تغییر دهید. هر property دارای یک value است.

نمونه از CSS

declarationهای CSS، همیشه با یک نقطه ویرگول (;) تمام می شوند، و گروههای declaration در کمانک {} قرار می گیرند:

p {color:red;text-align:center;}

 

برای اینکه CSS را بیشتر قابل خواندن کنید، می توانید هر declaration را در یک خط قرار دهید، مانند مثال زیر:

 

p
{
color:red;
text-align:center;
}

Commentهای CSS

می توانید ازcommentها برای توضیح کدتان استفاده کنید، و ممکن است هنگامی که source code را ویرایش می کنید، به شما کمک کنند. مرورگرها، کامنت ها را نادیده می گیرند.

 
/*This is a comment*/
p
{
text-align:center;
/*This is another comment*/
color:black;
font-family:arial;
}

Selectorهای id و class

CSS علاوه بر تنظیم یک style برای عنصر HTML، به شما اجازه تعیین selectorهای خودتان به نام های "id" و "class" را هم می دهد.

سلکتور id

از سلکتور id برای تعیین style برای عنصر واحد و چندگانه استفاده می شود.

سلکتور id از اتریبیوت عنصر HTML استفاده می کند، و با یک "#" تعریف می شود.

قانون style زیر به عنصری با آی دی ="para1" اعمال می شود:

 
#para1
{
text-align:center;
color:red;
}

نام id را با عدد شروع نکنید! زیرا در Mozilla/Firefox کار نمی کند.

سلکتور class

از سلکتور class برای تعیین یک style برای گروهی از عناصر استفاده می شود. برخلاف سلکتور id، سلکتور class اغلب روی چندین عنصر بکار می رود.

این کار به شما اجازه تعیین یک style معین برای هر عنصر HTML با همان کلاس را می دهد.

سلکتور کلاس از اتریبیوت کلاس HTML استفاده می کند، و با یک "." تعریف می شود.

در مثال زیر، همه عناصر HTML با کلاس ""center، وسط چین خواهند شد:

.center {text-align:center;}

هرگز نام یک کلاس را با عدد شروع نکنید! زیرا فقط در Internet Explorer ساپورت می شود.

سه راه برای insert کردن CSS

  • External style sheet
  • Internal style sheet
  • Inline style

Style Sheet خارجی (external)

Style Sheet خارجی، هنگامی که style به صفحات زیادی اعمال می شود، مناسب است. با یک Style Sheet خارجی، می توانید ظاهر کل یک سایت ر با تغییر دادن یک فایل عوض کنید. هر صفحه باید با استفاده از تگ <link> به style sheet لینک شود. تگ <link>، درون بخش head قرارمی گیرد:

 
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>

Style Sheet خارجی، را می توان در یک text editor نوشت. این فایل نباید حاوی هیچ تگ html باشد. style sheet شما باید با پسوند .css ذخیره شود. نمونه ای از یک style sheet در زیر نشان داده شده است:

 
hr {color:sienna;}
p {margin-left:20px;}
body {background-image:url("images/back40.gif");}

فضاهای بین مقدار property و واحدها را خالی نگذارید!

Style Sheet داخلی (internal)

Style Sheet داخلی باید هنگامی مورد استفاده قرار گیرد که یک سند واحد، style منحصر به فردی دارد. styleهای داخلی با استفاده از تگ <style> در بخش head صفحه HTML تعریف می شود، مانند مثال زیر:

 
<head>
<style type="text/css">
hr {color:sienna;}
p {margin-left:20px;}
body {background-image:url("images/back40.gif");}
</style>
</head>

Styleهای Inline

استایل inline، با ترکیب کردن contentبا presentation، بسیاری از مزایای style sheetها را از دست می دهد. از این متد باید به ندرت استفاده کرد.

برای استفاده از استایل های inline، باید از اتریبیوت استایل در تگ مربوط استفاده کرد. اتریبیوت استایل ممکن است هر نوع خصوصیت CSS را در بر گیرد. این مثال چگونگی تغییر دادن رنگ و حاشیه چپ یک پاراگراف را نشان می دهد:

 
<p style="color:sienna;margin-left:20px">This is a paragraph.</p>

Style Sheetهای چندگانه

اگر بعضی از propertyها برای یک selector در style sheetهای مختلف تعیین شده باشد، valueها از style sheet معینی ارث برده خواهند شد.

مثلاً، یک style sheet خارجی دارای propertyهای زیر برای سلکتور h3 است:

 
h3
{
color:red;
text-align:left;
font-size:8pt;
}

و یک style sheet داخلی دارای propertyهای زیر برای سلکتور h3 است:

 
h3
{
text-align:right;
font-size:20pt;
}

اگر صفحه ای با style sheet داخلی به یک style sheet خارجی لینک شود، propertyهای h3 اینگونه خواهد بود:

 
color:red;
text-align:right;
font-size:20pt;

رنگ، از style sheet خارجی ارث می برد و text-alignment و اندازه فونت با style sheet داخلی جایگزین می شود.

Styleهای چندگانه به یک استایل cascade می شوند

Styleها را می توان به طرق زیر معین کرد:

  • درون یک عنصر HTML
  • درون بخش head صفحه HTML
  • در یک فایل CSS خارجی

نکته: حتی style sheetهای خارجی چندگانه را نیز می توان درون یک سند HTML واحد reference کرد.

ترتیب cascade کردن

هنگامی که بیش از یک style که برای عنصر HTML تعیین شده، وجود داشته باشد، از کدام style استفاده می شود؟

معمولاً می توان گفت که همه styleها، با قوانین زیر به یک style sheet مجازی cascade می شود، و قانون چهارم بالاترین اولویت را دارد:

  • پبش فرض مرورگر
  • style sheet خارجی
  • style sheet داخلی (در بخش head)
  • استایل inline (درون عنصر HTML)

بنابراین، یک استایل inline، بالاترین اولوین را دارد، که بدین معناست که استایلی را که درون تگ <head> تعریف شده، یا در یک style sheet خارجی، یا در مرورگر را override می کند.

نکته: اگر لینک به style sheet خارجی بعد از style sheet داخلی در HTML <head> داخلی قرار داده شود، style sheet خارجی، style sheet داخلی را override می کند.


تگ ها:

دسته بندی ها: طراحی وب