Right learn
Right learn
خواندن ۴ دقیقه·۴ سال پیش

وسط قرار دادن المان ها با css

اوایل یادگیری html css استاد خسروجردی که بودم برای خودم سوال بود چجور ویرگول همه بخش هاشو اورده وسط؟ یا مثلا بعضی صفحات لاگین چجوری اومدن وسط؟ خیلی برام عجیب بود... یادمه تو یکی از جلسات استاد خسروجردی تمرین داده بود و منم انجام دادم و شد این:

یادش بخیر...
یادش بخیر...

فقط برا اینکه ضایع نباشه یکم بهش margin دادم ولی بلد نبودم بیارم وسطِ وسطِ وسط.

سلام من دوباره اومدم پیشتون با یه پست خیلی کاربردی که معضل خیلی از تازه کارا هست پس بعد اینکه لایک کردی پستو سیو کن که داشته باشی و هروقت نیاز داشتی بیای یه سر بزنی?



توضیح: اول این توضیحو بدم که وسط قرار دادن عناصر به چند عامل مثل display و position بستگی داره و اینم اضافه کنم که بستگی داره شما عمودی بخواید وسط بذارید یا افقی یا هردو

افقی

روش اول: margin

یه همچین سند html داریم
یه همچین سند html داریم

با معروف ترین راه شروع میکنیم که باید این شرایطو داشته باشه:

  • عنصر از نوع block باشه (یا شما هم میتونید;display: block بکنید)
  • تو اکثر موارد باید یه عرض (width) مشخص داشته باشه

اون بخش ;display: block فقط برای قشنگی بود وگرنه div دیسپلی پیشفرض block داره?

و چون فرزندش یعنی h1 دیسپلی inline داره نمیره وسط. (این از اون مواقعیه که باید بهش width بدیم و میایم ;width: fit-content میدیم و زرنگی میکنیم :)

و در نهایت کار اصلی رو میکنیم یعنی margin های افقی رو auto میکنیم

(البته میشد بنویسید margin: auto ولی خب تغییری نمیکرد) توضیح بیشتر نمیدم شما خودتون اهل فنید?

به همین راحتی Right Learn صاف رفت وسطِ وسطِ وسط صفحه?

نکته جالب: البته عناصری که display: table هم داشته باشن هم میشه با این روش وسط بردشون که اونا دیگه هیچ عرض مشخصی نمیخوان!

روش دوم: flexbox

معرفی میکنم: یکی از بهترین روش های حال حاضر بازار => استفاده از flexbox

شرایط خاصی هم نداره فقط به عنصر پدر یعنی div ما این استایل هارو باید بدید:

ایزی ایزی تامام تامام :)
ایزی ایزی تامام تامام :)

فقط کافیه به عنصر پدر این دو خط استایلو بدید

روش سوم: grid

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

به همین راحتی
به همین راحتی

روش چهارم: text-align

شرایطش اینه که display: inline باشه

مثل این
مثل این

که البته تو مثال بالا این h1 میره وسط div ولی اگه پدر h1 یه چیزی مثل body باشه میره وسط صفحه. یا اگه div ما یه عرض و background-color داشته باشه میتونید واضح تر ببینید

حالا اگه بخوایم div رو بیاریم وسط (غیر استاندارد)

و اینطوری div میره وسط
و اینطوری div میره وسط

عملا هر عنصری که display: inline داشته باشه با text-align: center راحت میره وسط

عمودی

کلا تو css به راحتی افقی، نمیشه عمودی برد وسط ولی من تو این بخش (بیشتر از) چندتا روش میگم بعدش میریم سراغ عمودی-افقی باهم.

روش اول: vertical-align

مثلا در متن ها، یا المان های داخل table و ... میتونید با خاصیت vertical-align: middle ببریدش وسط

سخت نیست، فکر کنم همتون بدونید

روش دوم: flexbox

با flexbox همه کار میشه کرد! چه عمودی چه افقی چه عمودی-افقی میشه هر المانی رو برد وسط فقط محدودیتی که داره اینه که باید display: flex بدی به اون ظرف کلی که یه وقتایی اگه حواست نباشه و بلد نباشی چینش رو بهم میزنه (برا کسایی میگم که فلکس باکس بلد نیستن ولی این قطعه کد رو کپی میکنن:)

دقت کنید که همه این استایل هارو به ظرف کلی دادیم:

با justify-content که آشنا هستید! فقط اومدیم flex-direction رو گذاشتیم column که تو این حالت بر اساس افق میاره وسط. (توی پرانتز بگم که خاصیت flex-end هم داره که المان رو میبره پایین پایین پایین، البته خاصیت هاش زیادن که خودش یه پست کامل میخواد)

روش سوم: position

با position هم میشه! اما با هزار بدبختی و البته بهم زدن نسبی چیدمان (flow) صفحه?‍♂️ ولی یه نکته مثبت داره: display اصلا براش مهم نیست ولی باید یه ارتفاع مشخصی داشته باشه که ما زرنگی میکنیم و خاصیت دوستداشتنی fit-content رو به width میدیم? بدین صورت:

روش چهارم: transform

یکی از بهترین و جدیدترین روش ها - توی سه خط

اول position رو relative کردیم که بتونیم تو خط بعد بهش top بدیم - حالا توی این تاپ اومدیم به اندازه نصف پدرش پایین اوردیم و بعدش تو خط سوم به اندازه ارتفاع خودش از پایین به بالا اوردیم. همین :)

راستی بعضی مرورگرهای قدیمی اینو کامل ساپورت(*پشتیبانی) نمیکنن و باید به عنصر پدر این ویژگی رو بدید:

transform-style: preserve-3d;

عمودی و افقی

روش اول: margin

چی بگم؟ بریم سراغ عکس

همونطور که واضحه باید عرض و ارتفاع مشخصی داشته باشه و position: absolute بهش میدیم و اصل کار margin هست که از همه طرف auto میکنیم

راستی top و bottom و... هم باید صفر کنید که یه وقت فاصله پیش فرض اذیت نکنه!

روش دوم: position و transform

روش چهارم عمودی یه توضیحی درباره transform دادم و باید قائدتا بلد باشید :) با این روش هم میشه المان رو برد اون وسط وسط وسط وسط وسط وسط وسط ظرف مورد نظر

روش سوم: flexbox (سلطان)

چیز خاصی نداره فقط باید بگم که دقت کنید که این استایل هارو باید به پرنت (والد یا همون پدر) المان مورد نظر باید بدید چون کلا flexbox اینطوری کار میکنه



خب بچه ها این پست هم تموم شد، فقط خیلی خیلی خوشحالم میکنید که لایک کنید و یه کامنت "ممنون کاربردی بود" بذارید. راستی ببخشید چند وقت نبودم. (توضیح خواهم داد قضیه رو)

خلاصه که حمایت کنید?? خدافظظظظظظظ تا پست بعد

htmlcssبرنامه نویسی
اومدیم که با هم و درست یاد بگیریم :)
شاید از این پست‌ها خوشتان بیاید