تنظیم موقعیت در وسط و حذف حاشیه ها با CSS

اگر یک طراح وب حرفه ای یا علاقمند به طراحی قالب شخصی برای سایت یا وبلاگ خود باشید حتما با کدهای CSS آشنا هستید و بارها از آنها در شکل دهی فرم و ظاهر صفحات وب استفاده کرده اید، اگرچه کار با CSS به طور کلی چندان پیچیده و سخت نیست اما همواره جزئیات و ریزه کاری هایی وجود دارند که باعث می شوند نکاتی هرچند ساده به نظر مبهم و حل نشده باقی بمانند، در این مطلب می خواهیم یکی از شایع ترین این موارد را با هم مرور کنیم که تنظیم موقعیت عناصر HTML و به طور خاص بلاک های div در وسط بلاک والد یا در مرکز صفحه نمایش و همچنین حذف حاشیه ها از لبه های کناری مرورگر و صفحه نمایش به کمک CSS است، این نوع تکنیک ها معمولا در طراحی رابط کاربری وب و قالب هایی که از تمام ظرفیت صفحه نمایش استفاده می کنند مورد نیاز خواهند بود.
نحوه تنظیم بلاک در وسط بلاک والد با استفاده از CSS
در هنگام طراحی و کدنویسی قالب های وب معمولا تنظیم بلاک ها در سمت چپ یا راست بلاک والد به کمک عنصر float و مقادیر left, right یا استفاده از display با مقادیر inline-block و در نظر گرفتن margin مناسب به آسانی ممکن است، اما مشکل بیشتر کاربران تنظیم بلاک در وسط بلاک والد آن است که در تمام مرورگرها نیز یکسان باشد، در مثال زیر این کار را برای لایه div با کلاس فرضی center-block انجام داده ایم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | تنظیم بلاک در وسط بلاک والد با CSS</title>
<!-- Webgoo.ir -->
<style type="text/css">
html, body{
margin:0px;
padding:0px;
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.parent-block{
width:100%;
height:200px;
background-color:#C0C0C0;
border:1px solid #F90004;
}
.center-block{
width:300px;
height:200px;
background-color:#CC3;
margin-left:auto;
margin-right:auto;
}
</style>
</head>
<body>
<div class="parent-block">
<div class="center-block"></div>
</div>
<hr>
برای تنظیم بلاک در وسط بلاک والد از margin-left و margin-right با مقادیر auto استفاده می کنیم، در نمونه کد بالا بلاک رنگی در وسط بلاک والد خود قرار گرفته و متمایز است.
</body>
</html>
پیش نمایشهمانطور که در کد ملاحظه می کنید از margin-left و margin-right با مقادیر auto استفاده کرده ایم، با این کار مرورگر بلاک مربوطه را در وسط بلاک والد آن تنظیم می کند، علاوه بر این می توانیم با مقادیر
margin: 0 auto;
نیز یک بلاک را در وسط عنصر والد آن تنظیم کنیم.نحوه تنظیم بلاک در وسط صفحه با استفاده از CSS
در طراحی رابط کاربری وب ممکن است نیاز به نمایش بلاکی در وسط صفحه مرورگر باشد که معمولا جهت نمایش پنجره پاپ آپ سفارشی یا نمایش پیام تائید، ایجاد قسمت ورود به سایت و مواردی از این دست استفاده می شود، طراحی این قسمت نیز با کدنویسی HTML و تعیین استایل CSS مناسب ممکن است:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | تنظیم بلاک در وسط صفحه نمایش با CSS</title>
<!-- Webgoo.ir -->
<style type="text/css">
html, body{
margin:0px;
padding:0px;
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.popup-block{
position:fixed;
top:50%;
left:50%;
width:300px;
height:200px;
margin-top:-100px;
margin-left:-150px;
background-color:#318DAF;
}
</style>
</head>
<body>
<div class="popup-block"></div>
<hr>
برای تنظیم بلاک در وسط صفحه نمایش از position با مقادیر fixed یا absolute استفاده می کنیم، همچنین خاصیت های top و left باید با مقدار 50 درصد تعریف شوند، نکته مهم دیگر اینکه متناسب با top و left باید margin-top و margin-left با نصف مقدار height و width به صورت منفی مقداردهی شوند.
</body>
</html>
پیش نمایشاز چند خاصیت در این تکنیک استفاده شده، ابتدا بلاک div را با اندازه پیکسلی مشخص ایجاد و با خاصیت position و مقادیر fixed یا absolute مقداردهی می کنیم، این کار باعث می شود بلاک ما به صورت مستقل از سایر عناصر والد خاصیت های CSS را اجرا کند، در گام دوم برای اینکه بلاک در وسط صفحه قرار بگیرد با خاصیت top و left (یا right) از بالای صفحه نمایش 50 درصد و از سمت چپ (یا راست) نیز 50 درصد حاشیه ایجاد می کنیم، با توجه به اینکه تاثیر مقادیر از لبه های کناری بلاک محاسبه می شود و عنصر دقیقا در وسط صفحه قرار نمی گیرد باید margin-top و margin-left با مقادیر منفی در نظر بگیریم تا دقیقا از وسط بلاک مقدار top و left محاسبه شود، قاعدتا برای این کار باید margin-top و margin-left را با نصف مقادیر height و width به صورت منفی در نظر بگیریم تا بلاک از موقعیت فعلی خود به سمت بالا و چپ حرکت کند و دقیقا در وسط صفحه نمایش قرار گیرد.
حذف حاشیه ها از لبه های کناری با استفاده از CSS
به طور معمول مرورگرهای وب خاصیت هایی را با مقادیر مشخص به صورت پیش فرض روی عناصر موجود در صفحه وب اعمال می کنند که یکی از این موارد در نظر گرفتن مقدار padding و margin برای تگ html یا body است که موجب می شود اندک فضای خالی در گوشه ها و لبه های کناری مرورگر و صفحه نمایش ایجاد شود، خوشبختانه برای حذف این حاشیه هایی که شاید مد نظر ما نباشند می توانیم در قسمت استایل CSS برای این دو تگ padding و margin اختصاصی با مقدار 0 تعریف کنیم تا قالب به اصطلاح به طور کامل به گوشه های پنجره مرورگر بچسبد و تمام فضای موجود را پوشش دهد، به طور مثال:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | حذف حاشیه ها از لبه های کناری با استفاده از CSS</title>
<!-- Webgoo.ir -->
<style type="text/css">
html, body{
margin:0px;
padding:0px;
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.top-block{
width:auto;
height:200px;
background-color:#CC3;
}
</style>
</head>
<body>
<div class="top-block"></div>
<hr>
با استفاده از ویژگی های padding و margin و در نظر گرفتن مقدار 0 برای تگ html و body، فاصله پیش فرض حاشیه های صفحه نمایش از تگ والد قالب حذف می شود.
</body>
</html>
پیش نمایشدر مثال بالا بلاکی با کلاس فرضی top-block را بین تگ body ایجاد کرده ایم که حاشیه آن 0 است و برای body و html نیز از مقادیر padding و margin با مقدار 0 استفاده کرده ایم، به این ترتیب هیچ حاشیه اضافه ای بین قالب وب و صفحه نمایش ایجاد نمی شود و می توانیم از تمام فضای موجود استفاده کنیم، این شیوه امروزه یک روش مرسوم در بین طراحان وب و به خصوص در طراحی قالب های واکنش گرا (Responsive) است، برخی طراحان نیز از فایل هایی تحت عنوان Reset استفاده می کنند که با این روش تمام خاصیت های پیش فرض CSS مرورگرها را نادیده می گیرند.
نکته: با وجود اینکه در استانداردهای جدید کنسرسیوم جهانی وب W3C تگ html نباید padding و margin پیش فرض داشته باشد، با این حال برخی مرورگرها همچنان رویه خاص خودشان را دارند و بهتر است که در کنار تگ body برای تگ html نیز padding و margin را برابر 0 قرار دهیم.
دسته بندی: آموزش کاربردی » CSS
برچسب ها: CSS

مخفی کردن عناصر وب با CSS
آموزش استفاده از فونت فارسی در وب با CSS
ساخت منوی آبشاری (عمودی) با تگ ul li و CSS
حذف اسکرول افقی (Horizontal Scroll) با CSS
ایجاد منو برای سایت یا وبلاگ با استفاده از CSS
دیدگاه


محمد
۱۸:۴۰ ۱۳۹۳/۰۵/۰۸
سلام
از چه کدی استفاده کنم که فوترم ته ته دایو اصلی قرار بگیرد و با افزایش یا کاهش hieght دایو اصلی فوترم یا پانوشت تکان نخورد.
از چه کدی استفاده کنم که فوترم ته ته دایو اصلی قرار بگیرد و با افزایش یا کاهش hieght دایو اصلی فوترم یا پانوشت تکان نخورد.
لطفا عبارت "چسبیدن فوتر قالب به پائین صفحه" را در وب جستجو کنید.
تیمور
۱۰:۳۸ ۱۳۹۳/۰۴/۰۸
سلام
من مشکل مژگان رو خوندم و تست کردم
من به جای استفاده از div از span استفاده کردم
هنوز اول کارم ولی فکر کنم یه جا خونده بودم که div یک تگ outline و span یک تگ inline هست که باعث میشه ستون ها توی یه خط قرار بگیرن..
من مشکل مژگان رو خوندم و تست کردم
من به جای استفاده از div از span استفاده کردم
هنوز اول کارم ولی فکر کنم یه جا خونده بودم که div یک تگ outline و span یک تگ inline هست که باعث میشه ستون ها توی یه خط قرار بگیرن..
ضمن تشکر از شما به خاطر شرکت در بحث، البته مشکل این کاربر به حالت Zoom صفحه مربوط می شود که حتی در حالت inline باعث به هم ریخته شدن بلاک های در یک ردیف می شود.
مژگان
۲۱:۲۲ ۱۳۹۳/۰۴/۰۲
اما من اگه 32 هم میدم بازم وقتی صفحه رو خیلی کوچیک کنم باز ستون سوم میاد خط بعد!؟!؟
32 یک مثال بود! باید طوری فرمت بندی کنید که به اینگونه مشکلات بر نخورید، به طور مثال ساختار تو در توی بهتری ایجاد کنید، یا بدون اینکه در ظاهر کار خللی ایجاد شود، در موارد لازم فاصله های خالی در بین بلاک های قالبتان داشته باشید (در کل رفع اینگونه مشکلات تا حدود زیادی به داشتن تجربه کار با CSS برمی گردد و فرمول ثابتی وجود ندارد!).
مژگان
۱۲:۳۹ ۱۳۹۳/۰۳/۳۱
سلام. سایتت خیلی عالیه. خیلی ممنون بابت مطالب مفیدی که میذاری تو سایت.
یه سوال دارم کدی که میذارم رو ببین. میخوام که یه دایو 100% پهنا داشته باشه و داخل اون 3 تا دایو داشته باشم که هر کدوم 33% پهنا داشته باشه. این کد رو نوشتم ولی در تغییر سایز ستون سوم میره خط بعد.
یه سوال دارم کدی که میذارم رو ببین. میخوام که یه دایو 100% پهنا داشته باشه و داخل اون 3 تا دایو داشته باشم که هر کدوم 33% پهنا داشته باشه. این کد رو نوشتم ولی در تغییر سایز ستون سوم میره خط بعد.
<html>
<head>
<meta charset="utf-8"/>
<title>
test
</title>
</head>
<style>
.main{
width:100%;
height:100%;
display: inline-block;
}
.col1{
width:33%;
height:100%;
display: inline-block;
background-color:#fa1;
}
.col2{
width:33%;
height:100%;
display: inline-block;
background-color:#bb8;
}
.col3{
width:33%;
height:100%;
display: inline-block;
background-color:#f88;
}
</style>
<body>
<div class="main">
<div class="col1">
ستون اول
</div>
<div class="col2">
ستون دوم
</div>
<div class="col3">
ستون سوم
</div>
</div>
</body>
</html>
برای مشکل به هم ریخته شدن بلاک ها در هنگام Zoom مرورگر چاره استانداردی وجود ندارد، تنها راه حل این است که طوری فرمت بندی کنید که یک فضای خالی برای بلاک ها وجود داشته باشد، به طور مثال به جای 33 از 32 درصد استفاده کنید، سایت های زیادی در وب در قسمتی این مشکل را دارند و لذا این حالت خیلی عجیب نیست!
hosein
۱۹:۵۵ ۱۳۹۲/۱۰/۳۰
سلام
ممنون از آموزشهاي css
من يه مشكل دارم و اونم نحوه اولويت بندي بلاك هاي css در صفحه هست يعني چطوري ميتونم تعيين كنم كه كدوم بلاك روي بلاك ديگه نمايش داده شه.
مثلا ّبلاك منو و بلاك اسلايدر خبري
من ميخوام بلاك منو روي بلاك اسلايدر نمايش داده بشه؟
ممنون از آموزشهاي css
من يه مشكل دارم و اونم نحوه اولويت بندي بلاك هاي css در صفحه هست يعني چطوري ميتونم تعيين كنم كه كدوم بلاك روي بلاك ديگه نمايش داده شه.
مثلا ّبلاك منو و بلاك اسلايدر خبري
من ميخوام بلاك منو روي بلاك اسلايدر نمايش داده بشه؟
برای این موارد باید بر خاصیت های مختلف CSS و اثر آنها در تنظیم عناصر HTML، با تمرین و تکرار زیاد مسلط شوید، پاسخ ساده ای برای سوالتان وجود ندارد!
شقایق
۱۷:۵۳ ۱۳۹۲/۰۴/۲۲
مرسی مرسی مرسی
۲۱:۱۶ ۱۳۹۲/۰۴/۱۶
چشم داداش عذر میخوام مزاحم شدم بازم مزاحم میشم اگه مشکلی نباشه ممنون بابت جواب موفق باشید
۱۷:۴۷ ۱۳۹۲/۰۴/۱۶
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><-BlogAndPostTitle-></title>
<meta name="description" CONTENT="<-BlogAndPostTitle-> - <-BlogDescription->" />
<meta name="keywords" content="<-BlogAndPostTitle->, <-BlogId->" />
<meta http-equiv="Cache-control" content="public" />
<meta name="generator" content="blogfa.com" />
<link rel="alternate" type="application/rss+xml" title="<-BlogTitle->" href="<-BlogXmlLink->" />
<meta name="robots" content="index, follow" />
<meta name="author" content="<-PostAuthor->" />
<meta name="copyright" content="Copyright (C) 2013" />
<meta name="designer" content="قالب های پاتوق باز طرح | patoghbaz.ir" />
<link rel="shortcut icon" href="http://s2.picofile.com/file/7708795050/img1.gif" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
</body>
</html>
این متا تگ ها مشکلی ندارند؟مشکل خاصی دیده نمی شود!
نکته: لطفا حتی الامکان سوالات را در مطالب مرتبط مطرح نمائید.
نکته: لطفا حتی الامکان سوالات را در مطالب مرتبط مطرح نمائید.
۱۴:۱۰ ۱۳۹۲/۰۴/۱۶
سلام
من کل مطالب آموزشی سی اس اس ها رو خوندم خیلی عالی بود بی نهایت تشکر میکنم همیشه موفق باشید و امیدوارم این اموزش ها ادامه داشته باشه
اگه امکانش هست واسم یه باکس درست کنید و با یه دکمه که روی آن دکمه کلیک کنی ارتفاع باکس دو یا سه برابر بشه آیا امکان نوشتن همچین ابزاری با سی اس اس هست؟ ممنون
من کل مطالب آموزشی سی اس اس ها رو خوندم خیلی عالی بود بی نهایت تشکر میکنم همیشه موفق باشید و امیدوارم این اموزش ها ادامه داشته باشه
اگه امکانش هست واسم یه باکس درست کنید و با یه دکمه که روی آن دکمه کلیک کنی ارتفاع باکس دو یا سه برابر بشه آیا امکان نوشتن همچین ابزاری با سی اس اس هست؟ ممنون
نظر لطف شما است، در مورد نوشتن باکس که با کلیک تغییر اندازه دهد، متاسفانه به دلیل فرصت کم امکان نوشتن کد نیست، ضمن اینکه در CSS رویداد خاصی برای onclick وجود ندارد، تنها مورد مشابه selector active است که با onclick فرق می کند، حالت active زمانی اجرا می شود که ماوس در حالت نگهداشته شده باشد، مثال:
#block {
width:100px;
height:50px;
}
#block:active {
width:300px;
height:150px;
}
برای onclick باید از جاوا اسکریپت استفاده کنید.۱۳:۰۳ ۱۳۹۲/۰۴/۱۶
خیلی گلی داداش ممنون من به max-height توجه نکرده بودم :دی
فريبا
۱۷:۳۱ ۱۳۹۲/۰۴/۰۵
سلام
اگه ممكنه در مورد فريم ورك هاي CSS هم توضيح بدين؟
ممنون
اگه ممكنه در مورد فريم ورك هاي CSS هم توضيح بدين؟
ممنون
اگر منظورتان آموزش نحوه طراحی فریم ورک های CSS است، به جهت مفصل و پیشرفته بودن مبحث در آینده به آن خواهیم پرداخت، اما به اختصار مانند سایر زبان های برنامه نویسی، در CSS نیز برای اهداف زیر از فریم ورک استفاده می شود:
- یک بار نویسی و چندین بار استفاده.
- توسعه پذیری.
- یکپارچگی.
- و...
به عبارت دیگر فریم ورک در اینجا چیزی نیست جزء مجموعه ای منظم از کلاس ها و الگوهای آماده در یک یا چند فایل CSS که می توان در پروژه های مختلف (بدون نیاز به نوشتن کدها و اعمال تغییرات جدید) از آنها استفاده کرد، این شیوه بیشتر مورد استفاده افراد و شرکت هایی است که به طور اختصاصی در زمینه طراحی وب فعال هستند و مهم ترین مزیت آن افزایش سرعت در انجام کارها است.
- یک بار نویسی و چندین بار استفاده.
- توسعه پذیری.
- یکپارچگی.
- و...
به عبارت دیگر فریم ورک در اینجا چیزی نیست جزء مجموعه ای منظم از کلاس ها و الگوهای آماده در یک یا چند فایل CSS که می توان در پروژه های مختلف (بدون نیاز به نوشتن کدها و اعمال تغییرات جدید) از آنها استفاده کرد، این شیوه بیشتر مورد استفاده افراد و شرکت هایی است که به طور اختصاصی در زمینه طراحی وب فعال هستند و مهم ترین مزیت آن افزایش سرعت در انجام کارها است.
Mehran
۱۱:۵۲ ۱۳۹۱/۱۲/۲۱
یه دنیا ممنون...
ahmad
۰۱:۴۰ ۱۳۹۱/۱۱/۱۷
واقعا عالیه در حد لالیگا
سعید
۰۳:۰۰ ۱۳۹۱/۰۷/۱۲
مرسی از آموزشهای خوبتون. یه سوال: اگر بخوایم موقع تغییر اندازه صفحه شکل تگهای دیو ثابت بمونه باید چه روشی رو پیش بگیریم؟
برای اینکه اندازه تگ های div مقادیر ثابت باشد باید از مقدار دهی پیکسلی (px) استفاده کنید، دقت کنید که اگر بلاک div زیرمجموعه بلاک دیگری باشد، بلاک اصلی هم باید به صورت پیکسلی مقدار دهی شود.
فریبا
۲۲:۲۹ ۱۳۹۱/۰۵/۱۵
سلام
بابت مطالب عالی سایتتون یه دنیا از تون ممنونم.
یه سوال: چطور میشه داخل یک div دو تا div دیگر گذاشت یعنی یه div برای کل سایت که داخلش یه div برای هدر یه div برای فوتر یه div برای محتوا که داخل این div دو تا div دیگه یکی برای منوهای عمودی یکی هم برای متن.
بابت مطالب عالی سایتتون یه دنیا از تون ممنونم.
یه سوال: چطور میشه داخل یک div دو تا div دیگر گذاشت یعنی یه div برای کل سایت که داخلش یه div برای هدر یه div برای فوتر یه div برای محتوا که داخل این div دو تا div دیگه یکی برای منوهای عمودی یکی هم برای متن.
این کار چندان سخت نیست، منتها اگر با CSS و خاصیت های عناصر آن آشنا باشید، در html کافی است بلاک های div را تو در تو و طبق قاعده تگ ها، با توجه به نیاز خود در طراحی، ایجاد کنید، به فرض مثال زیر را ملاحظه کنید:
<div><!-- شروع بلاک اصلی -->
<div></div><!-- بلاک هدر -->
<div></div><!-- بلاک منوی سایت -->
<div><!-- شروع بلاک محتوا -->
<div></div><!-- سایدبار سمت راست -->
<div></div><!-- محتوای وسط صفحه -->
<div></div><!-- سایدبار سمت چپ -->
</div><!-- پایان بلاک محتوا -->
</div><!-- پایان بلاک اصلی -->
به این حالت در اصطلاح بلاک های آشیانه ای می گویند، در کل محدودیتی به لحاظ تعداد بلاک های تو در تو نیست، اما به طور طبیعی میزان استانداردی از آنها، قالب های معمول وب را فرم می دهند و نیازی نیست که الزاما از تعداد زیادی div استفاده کنیم، پس از قرار دادن div ها، بخش مهم کار، استایل نویسی و نسبت دادن کلاس های css به آنها است که لازمه آن، آشنایی و تجربه نسبی در این خصوص است.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.