در ابتدا تذکر می دهم که اگر این مطلب را از طریق لینک مستقیم صفحه می بینید، از elementهای اضافی صفحه وحشت نکنید! همچنین به منظور یادگیری بهتر، یک وبسایت در همین زمینه آماده شده است، که از آدرس fa.learnlayout.com قابل دسترسی است. در اینجا سعی دارم تا به مروری کلی درباره پیکربندی با CSS بپردازم. من فرض را بر آن می گیرم که شما از قبل می دانید که Selectorها، Propertyها و Valueها چه هستند. و همچنین شما باید بدانید که پیکربندی یعنی چه! و یا حداقل در حال یادگیری آن باشید.اگر که مبتدی هستید و می خواهید Html و CSS را فرا بگیرید من توصیه می کنم که از این لینک آغاز کنید.
استفاده نکردن از پیکربندی
اگر شما یک ستون خیلی بزرگ از محتوا می خواهید راحت ترین کار آن است که از هیچ پیکربندی اضافه ای استفاده نکنید. اما اگر این پهنا خیلی زیاد باشد، برای کاربر خیلی دشوار خواهد بود که پس از خواندن یک خط طولانی و دراز چشمش را به عقب برگرداند تا ابتدای خط بعدی را پیدا کند.قبل از آنکه به روش های اصلاح کردن این مشکل بپردازیم، بیایید به بررسی بیشتر در رابطه با display
display
قطعا مهمترین چیز برای کنترل پیکربندی display است. هر عنصر به طور پیش فرض این صفت را مقدار دهی کرده است، و این که چه مقداری دارد، به نوع آن عنصر وابسته است. این مقدار، به طور پیش فرض برای اکثر عنصر ها block یا inline است.
block
<div>
div
یک عنصر سطح بلاک است. یک عنصر سطح بلاک، از خط جدید آغاز می شود و از چپ و راست تا جایی که می تواند به کناره ها کشیده می شود. سایر عناصر معمول سطح بلاک عبارتند از p و form و در HTML5 عناصر جدیدتر header، footer، section اضافه شده اند. عناصر زیاد دیگری هم وجود دارند.
</div>
div
inline
spannone
یک نوع دیگر از مقادیر قابل قبول برای display مقدار noneاست. برخی از عنصر های خاص مثل script از این مقدار به عنوان مقدار پیش فرض استفاده می کنند. همچنین با کمک جاوااسکریپت، از این عنصر برای پنهان سازی عناصر درون صفحه، بدون آنکه حذف شوند استفاده می شود.
دقت شود که این با آنکه از صفت visibility
استفاده کنیم فرق می کند. وقتی که از visibility برای پنهان سازی استفاده می کنیم، وقت نمایش داده شدن عنصر را از بین برده ایم، و جای آن را یک فضای خالی می گیرد. اما در این حالت، گویی که عنصر وجود ندارد.
مقادیر دیگر
همچنین برای display مقادیر دیگری هم مثل list-itemو table وجود دارد، که برای مشاهده ی لیست کاملی از آنها می توانید به این لیست مراجعه کنید. ما در باره ی inline-block و flex به صحبت خواهیم پرداخت.
همان طور که گفتم، هر عنصری به طور پیش فرض برای display مقداری تعیین کرده است، اما همیشه این مقدار قابل بازنویسی است! اگر چه این بی معنی است که یه div را به صورت inline استفاده کنیم، اما این امکان وجود دارد، تا گاهی که معنی خاصی مد نظر است بتوان انجام داد. یک نوع معمول از این بازنویسی برای عنصر li
به کار می رود تا آن را به حالت inline استفاده کنیم. این باعث می شود که لیست ها و فهرست های افقی داشته باشیم.
margin: auto;
#main {
width: 600px;
margin: 0 auto;
}
<div id="main">
مقداردهی width
برای یک عنصر سطح بلاک، از اینکه آن عنصر تا حد ممکن به کناره ها کشیده شود جلوگیری می کند. همچنین شما با قرار دادن مقدار margin های چپ و راست به auto می توانید آن را به صورت وسط چین تغییر حالت بدهید. با این کار، عنصر، آن مقداری که شما برای پهنای آن در نظر گرفته بودید را می گیرد، و بقیه ی جای باقی مانده به صورت مساوی به طرفین آن تقسیم می شود.
مقداردهی width
تنها زمانی مشکل ایجاد می شود که اندازه ی صفحه کمتر از اندازه ی عنصر شما باشد. در این حالت مرورگر، یک scrollbar افقی ایجاد می کند، که زیاد جالب به نظر نمی رسد. در ادامه به حل این مشکل می پردازیم...
</div>
max-width
#main {
max-width: 600px;
margin: 0 auto;
}
<div id="main">
استفاده از max-width
به جای width راه حل مناسب تری به نظر می رسد. به خصوص این مساله وقتی جدی تر می شود که بخشی از مخاطب ها از موبایل استفاده می کنند. به هر حال، max-width در اکثر مرورگر ها پشتیبانی می شود حتی IE7! به همین خاطر نیازی به نگرانی در استفاده از آن نیست.
</div>
استفاده از max-width
لایه های تو در تو
وقتی صحبت از پهنا می شود، باید یک مساله مهم را در نظر گرفت: جعبه های تو در تو. وقتی که شما برای عنصر خودتان یک پهنای خاصی را در نظر می گیرید، باید بدانید که ممکن است که عنصر شما کمی از آن بزرگ تر شود. زیرا برای عنصر شما حاشیه و padding وجود دارد که این اندازه ها را باید به پهنای عنصر اضافه کرد. این مساله را در دو مثال زیر بهتر می توانید ببینید. دقت کنید که برای هر دو مثال به یک اندازه پهنا در نظر گرفته شده است.
.simple {
width: 500px;
margin: 20px auto;
}
.fancy {
width: 500px;
margin: 20px auto;
padding: 50px;
border: solid blue 10px;
}
<div class="simple">
کوچکتر ...
</div>
کوچکتر ...
</div>
<div class="fancy">
بزرگتر ...
</div>
بزرگتر ...
</div>
برای مدت زمان طولانی این مساله راه حلی نداشت، یا اینکه تنها راه حل آن استفاده از محاسبات ذهنی بود. به این صورت که باید یک مقداری کمتر از آنچه که مد نظر بود برای پهنا استفاده می شد تا با مقدار حاشیه و padding به اندازه ی مناسب برسد. اما خوشبختانه دیگر نیازی به استفاده از این روش نیست ...
یکپارچه سازی
با گذشت زمان آشکار شد که استفاده از محاسبات ذهنی چندان جالب نیست، به همین خاطر یک صفت جدید ساخته شد که این مشکل را بر طرف می کند: box-sizing
. وقتی که شما برای یک عنصر box-sizing: border-box; را مقداردهی می کنید، دیگر حاشیه و padding باعث بزرگتر شدن عنصر نمی شوند. به نمونه های زیر دقت کنید، اینها همان نمونه های قبلی هستند، با این تفاوت که برای هر دوی آنها box-sizing: border-box; مقداردهی شده است.
.simple {
width: 500px;
margin: 20px auto;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.fancy {
width: 500px;
margin: 20px auto;
padding: 50px;
border: solid blue 10px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
<div class="simple">
جعبه ای که کوچکتر بود
</div>
جعبه ای که کوچکتر بود
</div>
<div class="fancy">
جعبه ای که بزرگتر بود
</div>
جعبه ای که بزرگتر بود
</div>
از آنجایی که این حالت خیلی بهتر است، بسیاری از برنامه نویسان ترجیح می دهند که این ویژگی را برای همه ی عنصرها به کار ببرند، به همین خاطر از دستورات زیر در ابتدای برنامه خود استفاده می کنند.
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
با این کار این تضمین به وجود می آید که برای همه ی عناصر، هیچ گاه اندازه ی حاشیه به پهنای اصلی اضافه نشود.
از آنجایی که box-sizing
جدید است، باید آن را با پیشوندهای -webkit- و -moz- استفاده کرد، همان طور که در مثال ها هم آمده است. همچنین در خاطر داشته باشید که این ویژگی در مروگر لعنتی IE از نسخه ی ۸ به بعد اضافه شده است.
position
اگر بخواهیم پیکربندی های پیچیده تری داشته باشیم باید راجه به position
بدانیم. خیلی آسان است، و اسم ها طوری هستند که به آسانی به خاطر سپرده می شوند. اجازه دهید به آنها بپردازیم، اما شاید لازم باشد که شما این صفحه را بوکمارک کنید!
static
.static {
position: static;
}
<div class="static">
حالت static
برای position مقدار پیش فرض است. یک عنصر با position: static; شکل خاصی برای جایگیری ندارد، و در هر کجا که آورده شود در همانجا هم نمایش داده می شود.
</div>
حالت static
relative
.relative1 {
position: relative;
}
.relative2 {
position: relative;
top: -20px;
left: 20px;
background-color: white;
width: 500px;
}
<div class="relative1">
مقدار relative
نیز مانند مقدار static است، با این تفاوت که کمی ویژگی های اضافه نیز به آن اضافه می شود.
</div>
مقدار relative
<div class="relative2">
با استفاده از تغییر دادن top
، right، bottom، و left می توان جای عنصر را نسبت به آن جایی که باید قرار بگیرد تغییر داد. همچنین فضایی که با جا به جا شدن عنصر ما خالی می شود، برای سایر عناصر غیر قابل دسترسی خواهد ماند.
</div>
با استفاده از تغییر دادن top
fixed
<div class="fixed">
ثابت
</div>
ثابت
</div>
در جایگذاری ثابت یک عنصر، جای آن عنصر نسبت به viewport تعیین می شود و با scroll کردن پنجره هم تغییر نمی کند. برای تعیین جای یک عنصر باید از relative
، top، right، bottom و left اسفاده کرد.
حتما به عنصر زرد رنگ گوشه ی تصویر دقت کرده اید. برای آن از CSS های زیر استفاده شده است:
.fixed {
position: fixed;
bottom: 0;
right: 0;
width: 200px;
background-color: white;
}
یک عنصر با جایگذاری ثابت در صفحه هیچ فضای خالی ای ایجاد نمی کند.
مرورگرهای موبایل از این ویژگی به صورت خیلی متزلزل پشتیبانی می کنند، برای اطلاعات بیشتر می توانید به اینجا سر بزنید
absolute
مقدار absolute
نیز مانند حالت قبل است. با این تفاوت که جایگذاری در آن وابسته به نزدیک ترین پدر جایگذاری شده است و نه viewport. اگر یک عنصر با جایگذاری absolute هیچ پدر جایگذاری شده ای نداشته باشد، آنگاه از body برای جایگذاری استفاده می کند و با scroll کردن صفحه بالا و پایین می کند. دقت شود که یک عنصر جایگذاری شده، به هر عنصری گفته می شود که در آن position هر چیزی باشد غیر از static.
در اینجا یک مثال ساده را می بینیم:
.relative {
position: relative;
width: 600px;
height: 400px;
}
.absolute {
position: absolute;
top: 120px;
right: 0;
width: 300px;
height: 200px;
}
<div class="relative">
مقدار position
برای این عنصر relative است. اگر این برای این عنصر position: static; باشد، آنگاه عنصر فرزند، این عنصر را تکذیب کرده و از body برای جایگذاری استفاده می کند.
مقدار position
<div class="absolute">
جایگذاری این عنصر absolute است و برای آن از عنصر پدر کمک می گیرد.
</div>
</div>
جایگذاری این عنصر absolute است و برای آن از عنصر پدر کمک می گیرد.
</div>
اینها خیلی به درد بخور هستند، اما تا در عمل استفاده نشوند به طور کامل گویا نخواهند بود، در ادامه به یک مثال عملی تر می پردازیم.
position example
با این مثال کمی روش های به کار گیری position در عمل بیشتر مشخص می شود.
.container {
position: relative;
}
nav {
position: absolute;
left: 0px;
width: 200px;
}
section {
/* position is static by default */
margin-left: 200px;
}
footer {
position: fixed;
bottom: 0;
left: 0;
height: 70px;
background-color: white;
width: 100%;
}
body {
margin-bottom: 70px;
}
<div class="container">
<section>
با کمک margin-left
مطمئن می شویم که برای ستون کناری جا به اندازه ی کافی باز کرده ایم.
</section>
</section>
</section>
این مثال کار می کند، زیرا ستون کناری ارتفاعی کمتر از ارتفاع ستون اصلی دارد. اگر این چنین نبود، یک همپوشانی زشت ایجاد می شد، برای حل این مشکل در ادامه راه حلی ارائه خواهیم داد.
float
یکی دیگر از صفت های CSS که برای پیکربندی استفاده می شود float
است. کار اصلی آن قرار دادن عکس درون متن است، به گونه ای که متن دور عکس را بگیرد.
img {
float: right;
margin: 0 0 1em 1em;
}
clear
برای کنترل کردن رفتار float استفاده از clear
ضروری است. این دو مثال را مقایسه کنید:
<div class="box">...</div>
<section>...</section>
.box {
float: left;
width: 200px;
height: 100px;
margin: 1em;
}
<div class="box">
عنصر شناور
</div>
عنصر شناور
</div>
.box {
float: left;
width: 200px;
height: 100px;
margin: 1em;
}
.after-box {
clear: left;
}
<div class="box">
عنصر شناور
</div>
عنصر شناور
</div>
ترفند استفاده از clearfix
در این قسمت یکی از دشواری هایی که به هنگام استفاده از floats ممکن است رخ بدهد را ملاحظه می کنید:
img {
float: right;
}
<div>
این عکس از عنصر در بر گیرنده ی آن بزرگتر است، و همچنین از float برای آن استفاده شده است. به همین خاطر از عنصر در بر گیرنده ی آن به شکل نادرستی خارج شده است.
این عکس از عنصر در بر گیرنده ی آن بزرگتر است، و همچنین از float برای آن استفاده شده است. به همین خاطر از عنصر در بر گیرنده ی آن به شکل نادرستی خارج شده است.
اما با استفاده از ترفند استفاده از clearfix می توان این مشکل را برطرف کرد!
اگر دستورات زیر را اضافه کنیم:
.clearfix {
overflow: auto;
}
این اتفاق می افتد:
<div class="clearfix">
خیلی بهتر شد!
خیلی بهتر شد!
این ترفند برای مرورگرهای مدرن کار می کند، اما اگر می خواهید که برای مرورگر IE6 هم کار کند (چه کسی اهمیت می دهد!) باید از دستورات زیر استفاده کنید:
.clearfix {
overflow: auto;
zoom: 1;
}
همچنین به عنوان نکته ی آخر، مرورگرهای عجیب و غریب فراوانی وجود دارند که در این زمینه ممکن است توجه ویژه نیاز داشته باشند. استفاده از clearfix ممکن است کمی ترسناک به نظر برسد، اما روش ارائه شده در بالا تقریبا با همه ی مرورگر ها به درستی کار می کند.
مثال عملی از float
استفاده از float
برای تمام پیکربندی خیلی معمول است. در اینجا همان پیکربندی قبلی را که ساخته بودیم، دوباره می سازیم، ولی این بار با استفاده از float.
nav {
float: left;
width: 200px;
}
section {
margin-left: 200px;
}
<div class="clearfix">
<section>
می بینید که درست مثل همان حالت قبلی ساخته شد! دقت شود که ما یک clearfix
را در container قرار داده ایم که در این مثال بود و نبود آن فرقی نمی کند. اما اگر ارتفاع nav از ارتفاع container بیشتر باشد، ناگزیر به استفاده از آن خواهیم بود.
</section>
</section>
percent width
استفاده از پهنای درصدی، به اندازه ی container وابسته است. این حالت برای عکس ها خیلی پرکاربرد است؛ مثل مثال زیر که در آن عکس، 50٪ از container را گرفته است. برای فهم بیشتر آن بهتر است مرورگر خود را تغییر اندازه بدهید تا نتیجه ملموس تر باشد.
article img {
float: right;
width: 50%;
}
پیکربندی با پهنای درصدی
برای پیکربندی ها شما می توانید از پهناهای درصدی استفاده کنید. در این مثال nav
را به صورت درصدی به کار برده ایم:
nav {
float: left;
width: 25%;
}
section {
margin-left: 25%;
}
<div class="container">
<section>
وقتی که این پیکربندی خیلی کم عرض باشد nav
له می شود. از آن بدتر این است که از min-width نمی توانید استفاده کنید، زیرا که ستون سمت راست از آن تبعیت نمی کند.
</section>
</section>
media queries
در طراحی یک اصل توصیه می شود: خوب باشد، مهم نیست چه داریم و چه نداریم.
یکی از مهمترین و قدرتمند ترین ابزارها برای این منظور Media queriy است. اگر همان پیکربندی قبلی خودمان را که از درصد استفاده می کرد و به هنگام کوچک شدن صفحه ستون کناری له می شد را دوباره نویسی کنیم و این بار از media استفاده کنیم:
@media screen and (min-width:600px) {
nav {
float: left;
width: 25%;
}
section {
margin-left: 25%;
}
}
@media screen and (max-width:599px) {
nav li {
display: inline;
}
}
<div class="container">
<section>
حال وقتی که مرورگر خود را تغییر اندازه داده و کوچک کنید اتفاق جالبی می افتد!
</section>
<section>
حملات سایبری که از چندی پیش یک به یک سیستمهای مالی و سایتهای آمریکایی را هدف گرفته و به حملات سایبری گروه مبارزان سایبری عزالدین قسام معروف است، اکنون وارد هفته دوم از فاز سوم خود شده است؛ حملاتی که روز به روز جدیتر میشود و ایالات متحده ایران و چین را در قبال آن متهم کرده است.
</section>
</section>
</section>
به این ترتیب پیکربندی بر روی موبایل ها هم به خوبی کار می کند. در اینجا شما می توانید لیستی از سایت های معروف که از media به این شکل استفاده می کنند را ببینید. برای اطلاعات بیشتر می توانید به مستندات MDN مراجعه کنید.
ابزار
با استفاده از meta viewport شما می توانید طراحی پیکربندی را برای مویایل به شکل بهتری انجام دهید.inline-block
می توان یک جدول را با استفاده از جعبه هایی از div ساخت. برای مدت طولانی این کار را با استفاده از float
انجام می دادند، اما حالا با inline-block این کار آسان تر هم شده است.
راه سخت با استفاده از float
.box {
float: left;
width: 200px;
height: 100px;
margin: 1em;
}
.after-box {
clear: left;
}
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
<div class="box">
من شناور هستم!
</div>
من شناور هستم!
</div>
</div>
روش راحت تر با inline-block
همان پیکربندی را با تغییر display.box2 {
display: inline-block;
width: 200px;
height: 100px;
margin: 1em;
}
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
<div class="box2">
با inline-block
</div>
با inline-block
باز هم مثل همیشه این IE لعنتی دردسر ساز است! برای نسخه ی ۶ و ۷ نیاز به کار بیشتر هست، که توصیه می کنم به این مستندات مراجعه کنید.
پیکربندی با inline-block
با inline-block
هم می توان یک پیکربندی کامل را پیاده سازی کرد اما باید به نکات زیر توجه شود:
- عنصر های با inline-block
nav {
display: inline-block;
vertical-align: top;
width: 25%;
}
.column {
display: inline-block;
vertical-align: top;
width: 75%;
}
<div class="container">
<div class="column">
<section>
یک متن ساده!
</section>
<section>
حملات سایبری که از چندی پیش یک به یک سیستمهای مالی و سایتهای آمریکایی را هدف گرفته و به حملات سایبری گروه مبارزان سایبری عزالدین قسام معروف است، اکنون وارد هفته دوم از فاز سوم خود شده است؛ حملاتی که روز به روز جدیتر میشود و ایالات متحده ایران و چین را در قبال آن متهم کرده است.
</section>
</div>
</section>
</section>
column
برای ایجاد مطالب در چند ستون، مثل روزنامه ها، یک صفت جدید ساخته شده است:
.three-column {
padding: 1em;
-moz-column-count: 3;
-moz-column-gap: 1em;
-webkit-column-count: 3;
-webkit-column-gap: 1em;
column-count: 3;
column-gap: 1em;
}
حملات سایبری که از چندی پیش یک به یک سیستمهای مالی و سایتهای آمریکایی را هدف گرفته و به حملات سایبری گروه مبارزان سایبری عزالدین قسام معروف است، اکنون وارد هفته دوم از فاز سوم خود شده است؛ حملاتی که روز به روز جدیتر میشود و ایالات متحده ایران و چین را در قبال آن متهم کرده است.
</div>
این صفت خیلی جدید است و هنوز پایدار نیست، به همین خاطر لازم است که از پیشوند های مربوطه برای آن استفاده شود. همچنین در IE8 و نسخه های قدیمی تر آن و همچنین Opera کار نمی کند. برای اطلاعات بیشتر می توانید از این لینک استفاده کنید
flexbox
برای بهینه سازی ساخت پیکربندی در CSS، صفت flexbox
ایجاد شده است. متاسفانه اخیرا ویژگی های آن بسیار تغییر کرده است و در مرورگر های مختلف به شکل های گوناگونی پیاده سازی شده است. اما همچنان من علاقه مند هستم که شما درباره ی آن بدانید. آنچه که در این قسمت آورده ام بر پایه ی مستندات استاندارد است. متاسفانه مثال های زیر فقط در مرورگر کروم کار می کنند، اما همچنان بر آموختن آنها تاکید می کنم.
درباره ی flexbox
مستندات زیادی هست که بخش زیادی از آنها قدیمی شده اند و دیگر به روز نیستند. اگر می خواهید در این باره بیشتر بدانید من این سایت را توصیه می کنم. در آن مقاله ای مفصل در این زمینه در اینجا هست.
در اینجا ما فقط چند مثال ساده را بررسی می کنیم. کاربرد های آن خیلی فراتر است.
پیکربندی ساده
.container {
display: -webkit-flex;
display: flex;
}
nav {
width: 200px;
}
.flex-column {
-webkit-flex: 1;
flex: 1;
}
<div class="container">
<div class="flex-column">
<section>
استفاده از آن خیلی راحت است!
</section>
<section>
حملات سایبری که از چندی پیش یک به یک سیستمهای مالی و سایتهای آمریکایی را هدف گرفته و به حملات سایبری گروه مبارزان سایبری عزالدین قسام معروف است، اکنون وارد هفته دوم از فاز سوم خود شده است؛ حملاتی که روز به روز جدیتر میشود و ایالات متحده ایران و چین را در قبال آن متهم کرده است.
</section>
</div>
</section>
</section>
پیکربندی رویایی!
.container {
display: -webkit-flex;
display: flex;
}
.initial {
-webkit-flex: initial;
flex: initial;
width: 200px;
min-width: 100px;
}
.none {
-webkit-flex: none;
flex: none;
width: 200px;
}
.flex1 {
-webkit-flex: 1;
flex: 1;
}
.flex2 {
-webkit-flex: 2;
flex: 2;
}
</div>
</div>
</div>
</div>
تولید با felxbox
.vertical-container {
display: -webkit-flex;
display: flex;
height: 300px;
}
.vertically-centered {
margin: auto;
}
<div class="vertical-container">
<div class="vertically-centered">
اگر بخواهیم از نظر عمودی یک شیئ را به طور وسط چین قرار دهیم بسیار آسان می شود!
</div>
</div>
</div>
css frameworks
از آنجایی که در طراحی های با استفاده از CSS ترفندهای گوناگون زیادی وجود دارد، فریمورک هایی به این منظور ساخته شده اند که کار را برای ما آسان تر می کنند. استفاده از فریمورک بسیار کمک کننده است، اما در صورتی استفاده از آن توصیه می شود که فریمورک همان کاری را برای ما انجام بدهد که ما می خواهیم. استفاده از آنها هیچ جایگزینی برای دانستن CSS نیست.
همین!
اگر هرگونه سوال، نظر و یا اصلاحیاتی در این باره دارید با ایمیل من که در بالای همین صفحه وجود دارد تماس بگیرید.
اگر هرگونه سوال، نظر و یا اصلاحیاتی در این باره دارید با ایمیل من که در بالای همین صفحه وجود دارد تماس بگیرید.
You can find all sources On github. With the special thanks to my friend Mohamed Mansour and creators, Isaac Durazo and Greg Smith.








