position

با استفاده از ویژگی position می توان مکان یک عنصر را در صفحه مشخص کرد.

از طریق این ویژگی می توانید تصمیم بگیرید که آیا مکان عنصر نسبت به flow صفحه مشخص شود (حالت پیشفرض) یا اینکه در عین حالی که جایگاهش در flow حفظ می شود مکانش تغییر کند و یا اینکه مکان آن را نسبت به یکی از عناصر اجدادش مشخص کنید. همینطور می توانید تغییر مکان را نسبت به viewport انجام دهید.

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

 

flow

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

زمانی که گفته می شود عنصری را از flow صفحه خارج می کنیم, منظور این است که اگر عنصر از این به بعد جابجا شود تکان خوردن آن تاثیری بر دیگر عناصر و مکان آنها نخواهد گذاشت.

 

viewport

قابی است که می توانید از طریق آن قسمتی از یک سند وب را در لحظه مشاهده کنید, از طریق اسکرول می توان Viewport را جابجا کرد تا بقیه محتوای صفحه قابل نمایش باشند.

 

در حالت پیشفرض تمام عناصر بصورت static در صفحه جای گرفته اند. این بدین معنی است که عنصر در جریان یا همان flow عادی صفحه قرار دارد. زمانی که گفته می شود برای عنصری position تعیین شده است منظور این است که مقدار ویژگی position آن از static به یکی از چهار مقدار sticky, fixed ,absolute ,relative تغییر کرده است.

دو مقدار دیگر هم اخیرا برای این ویژگی در CSS3 در نظر گرفته شده اند و آنها page و center می باشند. که البته این دو مقدار به همراه مقدار sticky از نظر پشتیبانی مرورگرها هنوز در شرایطی نیستند که مورد استفاده قرار بگیرند.

زمانی که از مقادیری به غیر از static برای یک عنصر استفاده شود, می توان مکان عنصر را با استفاده از ویژگی های right ,left, bottom و top تعیین کرد.

این تعیین مکان نسبت به یک سیستم مختصاتی خاص صورت می گیرد که آن سیستم مختصات با توجه به مقادیر مختلفی که ویژگی position می گیرد, متفاوت خواهد بود.

در ادامه مقادیر این ویژگی را بررسی شده اند:

 

relative

اگر این مقدار برای یک عنصر تعیین شود دو اتفاق می افتد:

1. عنصر یک سیستم مختصات برای آن دسته از فرزندانش که دارای position: absolute هستند, فراهم می کند.
2. یک سیستم مختصات هم برای خودش تعیین می کند.

این بدین معنی است که می توانید عنصر را با استفاده از ویژگی top و left و غیره جابجا کنید. نقطه مبدا مختصات همان مکان اولیه است که عنصر جای دارد.

 
position relative در css
 

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

اول اینکه با اینکه عنصر جابجا شده است, جایگاهش در flow صفحه حفظ شده است و عناصر مجاور آن جایش را پر نکرده اند.
دوم اینکه زمانی که عنصری را با این حالت جابجا می کنیم این عنصر تاثیری بر دیگر عناصر نخواهد داشت و موجب تکان خوردن و جابجا شدن آنها نخواهد شد.

 

absolute

زمانی که از این حالت برای یک عنصر استفاده می شود, می توان عنصر را نسبت به عنصری از اجدادش جابجا و مکانش را تعیین کرد. همینطور دو اتفاقی که برای حالت relative می افتد برای این حالت نیز بوجود می آید, یعنی:

1. عنصر یک سیستم مختصات برای آن دسته از فرزندانش که دارای position: absolute هستند, فراهم می کند.
2. یک سیستم مختصات هم برای خودش تعیین می کند.

دو تفاوت بین absolute و relative وجود دارد:

اول اینکه زمانی که عنصر در حالت absolute باشد, جابجا شدن عنصر نسبت به اولین پدری از اجدادش که حالت relative دارد انجام می شود. و مختصات آن هم نقطه صفر top و left عنصر پدر می باشد. اما وقتی عنصر در حالت relative است جابجا شدن آن نسبت به حالت اولیه خود عنصر است و مستقل از عناصر پدرش می باشد.

( اینکه که می گوییم عنصر نسبت به اولین پدری از اجدادش که حالت relative دارد مختصات می پذیرد منظور این است که عنصر absolute به پدرش نگاه می کند اگر relative یا absolute یا fixed بود نسبت به آن مکان خود را مشخص می کند, اما اگر هیچ یک از این حالات را نداشت به عنصر پدر بزرگش رجوع می کند اگر آن هم نداشت همانطور به به سمت بالا حرکت می کند تا به یک عنصر با این حالت برسد اگر در نهایت هیچ عنصری یکی از این حالت ها را نداشت یعنی حتی html و body هم این حالات را نداشتند نسبت به صفحه مکان عنصر تعیین می شود. )

نا گفته نماند تا زمانی که برای عنصر مختصات بوسیله top و left و غیره تعیین نشود عنصر از flow خارج خواهد شد اما در همان مکان قبلیش باقی خواهند ماند.

دوم اینکه زمانی که از relative استفاده شود جایگاه قبلی عنصر در flow حفظ می شود اما همانطور که در دو تصویر زیر مشاهده می کنید وقتی که از absolute برای عنصر استفاده شود عنصر ار flow خارج می شود.

تصویر زیر حالت عادی یا همان حالت static عنصر را نشان می دهد:
 
مکان اولیه عنصر در flow
 

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

استفاده از مقدار absolute
 

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

 


.container {
  position: relative;
}

.element {
  position: absolute;
  top: 30px;
  right: 40px;
}

 

 

fixed

این حالت کاملا مشابه به حالت absolute می باشد یعنی عنصر در flow خارج می شود اما تفاوت این حالت در این است که عنصر بجای آنکه نسبت به یک عنصر از اجدادش تعیین مکان شود, نسبت به viewport مکانش مشخص می شود. و نکته دیگر اینکه در آن مکان در هر حالتی ثابت می ماند و حتی اسکرول کردن صفحه روی آن تاثیری نخواهد گذاشت.

یکی از پرکاربردترین موارد برای استفاده از حالت fixed برای ثابت کردن هدر یا منوی اصلی سایت در بالای صفحه می باشد. یا گاهی تبلیغات را در کنار صفحه بوسیله این حالت بطور زجرآوری برای کاربر ثابت می کنند :)

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

 

See the Pen position: fixed; by Mojtaba Seyedi (@seyedi) on CodePen.


 

sticky

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

 


.element {
  position: sticky;
  top: 20px;
}

 

در اینجا عنصر در هر کجا که باشد تا زمانی که اسکرول باعث نشود تا فاصله آن از بالای صفحه بع 20 پیکسل برسد رفتار relative خواهد داشت اما به محض اینکه فاصله آن در زمان اسکرول به 20 پیکسلی بالای صفحه برسد در همان فاصله از بالای صفحه ثابت خواهد ماند. در دموی زیر این رفتار توسط جاوااسکریپت طراحی شده است اما به محض اینکه پشتیبانی این رفتار در مرورگرها به حالت امنی برسد می توانید به راحتی از CSS برای پیاده سازی این حالت استفاده کنید:
 

See the Pen KzoOqG by Mojtaba Seyedi (@seyedi) on CodePen.


 

 

center

همانطور که از نام این حالت پیدا است باعث می شود تا عنصر در وسط عنصر نگهدارنده اش جای بگیرد و همچنین توسط ویژگی های top و left و غیره به هر یک از چهار جهت نیز می تواند انتقال داده شود.

این حالت مثل حالت absolute عنصر را از flow خارج می کند و این عنصر دیگر تاثیری بر عناصر دیگر نخواهد داشت.

 

page

هنوز رفتار دقیق این حالت کاملا مشخص نیست! ( ولی باید چیز خوبی از کار در بیاد :) )

 

نکات مهم

زمانی که عنصری در حالت absolute باشد, عرض آن به مقدار محتوای داخل آن خواهد بود (دقیقا مثل زمانی که از display: table برای یک عنصر استفاده می کنیم, یعنی عرض عنصر حداقل می شود). برای اینکه عنصر را مجبور شود تا تمام عرض نگهدارنده اش را پر کند دو راه وجود دارد. یک اینکه می توانید با استفاده از ویژگی wdith عرض برای عنصر تعیین کنید. مثلا %100. دوم اینکه به صورت زیر عمل کنید:

 


.element {
  position: absolute;
  left: 0;
  right: 0;
}

 

همینطور اگر می خواهید عنصری که حالت absolute دارد از لحاظ عمودی کاملا کشیده شود نیز می توانید بصورت زیر عمل کنید:

 


.element {
  position: absolute;
  top: 0;
  bottom: 0;
}

 

اگر برای عنصری در این حالت height مشخص شود و همینطور top و bottom تعیین گردد: top تعیین کننده مکان عنصر خواهد بود و برنده مسابقه خواهد شد.

اگر width برای عنصر تعیین شود و همینطور دو مقدار left و right را داشته باشیم, اگر جهت صفحه چپ به راست باشد left تعیین کننده مکان عنصر خواهد بود و اگر جهت صفحه راست به چپ (rtl) باشد, right برنده خواهد بود.

نکته دیگر اینکه عناصر در حالت fixed همیشه ثابت نسبت به viewport هستند مگر اینکه یکی از عناصر پدرشان وارد بازی transform شود. در این صورت عنصر fixed نسبت به آن عنصر پدر جای می گیرد و با اسکرول نیز حرکت می کند.

 
دموی زیر را با دقت بررسی کنید تا با حالت های مختلف ویژگی position بهتر آشنا شوید:
 

See the Pen position by Mojtaba Seyedi (@seyedi) on CodePen.


 

 

پشتیبانی مرورگر ها

ویژگی position در تمام مرورگرهای اصلی از قبیل کروم, فایرفاکس, سافاری, اپرا, اینترنت اکسپلورر, اندروید و iOS پشتیبانی می شود. اما وقتی مقدار fixed را دارد در برخی مرورگرها باید مراقب بود:

 
همینطور پشتیبانی حالت sticky در جدول زیر تعیین شده است:

 
و حالت های page و center فعلا در هیچ مرورگری پشتیبانی نمی شوند.

88 دیدگاه برای “position

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

    1. ممنون. خوشحالم که مفید بوده.
      البته همین که شما تجربه کردید این مطلب بهتون چسبیده :)
      پس تجربه و علم با هم :)

      موفق باشید

  2. سلام
    به خاطر آموزش خوبتون بهتون خدا قوت میگم…
    من یه مشکل اساسی با relative و absolute دارم.اگه بخوام سایتی طراحی کنم و از این position ها استفاده کنم آیا میتونم فقط از یکی از اونا استفاده کنم؟منظورم اینه که مثلاً اگه بخوام یک باکس رو به قسمتی از صفحه ببرم میتونم فقط از حالت relative استفاده کنم؟آخه همون کاری رو که absolute انجام میده با relative هم میشه انجامش داد پس چه نیازی هست که اصلاً دوتاش رو یاد بگیریم؟

    1. سلام ممنونم از پیامتون.

      نه این دو با هم فرق دارند.

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

      موفق باشید.

  3. سلام
    دوتا سوال داشتم.
    1.با توجه به این متن: “زمانی که گفته می شود عنصری را از flow صفحه خارج می کنیم, منظور این است که اگر عنصر از این به بعد جابجا شود تکان خوردن آن تاثیری بر دیگر عناصر و مکان آنها نخواهد گذاشت.”
    میشه فهمید که وقتی عنصری رو جابجا کنیم و عناصر مجاور اون جای اون رو تو صفحه پر نکنن و اینکه عنصر جابجا شده بتونه روی عناصر مجاورش قرار بگیره ، میگیم که این عنصر از flow صفحه خارج شده.
    ولی تو قسمت آموزش relative و absolute دقیقا عکسش رو گفتید. تو قسمت relative عنصردر تصویر جابجا شده ولی تاثیری رو عناصر اطرافش نگذاشته که این نشون میده از flow خارج شده. در حالیکه گفتید جایگاهش در flow حفظ شده.
    دقیقا عکس این حالت رو هم برای absolute گفتید. که به نظر من اشتباه صورت گرفته.
    2.در مورد مقایسه ای که بین ویژگی های top left…و width & height انجام دادید ، در واقع این ها باهم ارتباطی ندارن
    چون ویژگی های اول برای تعیین مکان هستن ولی ویژگی های دوم برای مشخص کردن عرض و ارتفاع عنصر. اینکه فرمودید اگر top و height برای عنصر مشخص بشن ، این وسط top پیروز میشه ممنون میشم یه کوچولو راجبش توضیح بدید.

    1. سلام.

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

      2. نکته اینجاست که شما باید بدونید که میشه با top و bottom و …. به عنصر اندازه داد.

      کارگاه صفحه آرایی همین بحث ها رو کاملا براتون مشخص میکنه می تونید استفاده کنید.

      موفق باشید.

    2. سلام
      من فکر میکنم منظورشون اینه مثلا اگر شما بیای و تاپ رو بدی 100 پیکس
      و باتم رو بدی 200پیکس
      در اصل مقدار height 100 px هستش
      حالا هی بیا و خاصیت height : 300px بده بهش
      اجراش نمیکنه چون پایین و بالا اولویت دارن نسبت به ارتفاع و چپ و راست اولویت دارن نسبت به عرض

  4. بسیار سپاسگزارم . من به انگلیسی میخوندم این مطلب رو و متوجه نمی شدم .شما خیلی واضح توضیح داد. به من خیلی کمک کرد.

  5. فوق العاده عالی
    من همیشه دنبال منابع خارجی بودم ولی وقتی سایت شما رو دیدم عاشقش شدم کمتر سراغ خارجیا میرم(بجز پروژه های codepen)
    خیلی با css مشکل داشتم ولی با توضیحات کامل و مثال های متنوع شما مشکلم حل شد
    با قدرت ادامه بدید – آرزوی موفقیت

  6. سلام
    تو قسمتی درباره sticky نوشتید که این عنصر شبیه به حالت relative رفتار می کند تا وقتی که به یک نقطه خاصی از اسکرول برسد
    به نظر من شبیه relative رفتار نمی کنه چون در حالت relative ما می تونیم به صورت عمودی هم عنصر را جابجا کنیم ومثلا اون را کمی بالا تر از حالت عادیش ببریم ولی تو این حالت نمی تونیم

  7. سلام مطلب فوق العاده بود .
    فقط ی سوال خارج از محدوده ….برای کاربا فرم ها حتما باید php بلد بود ؟
    منظورم اینه که کار با فرمها به php مربوط میشه؟
    با تشکر.

  8. درود بر شما

    ممنون از وقتی که گذاشتید برای این مطلب خیلی کاربردی مفید و مورد نیاز من بود

    دم شما گرم

  9. سلام
    ممنونم از مطلب خوبتون.
    ولی من هنوز ارتباط بین relative و absolute رو درک نکردم و هنوز گیجم!
    مثلا این کد رو میشه برام تفسیر کنید که چرا relative در کلاس container اومده یا چرا absolute برای image تعریف شده؟؟؟!
    https://www.w3schools.com/css/tryit.asp?filename=trycss_image_text_top_left

    کلا رابطه این 2 تا رو درک نکردم هنوز!
    ممنون میشم توضیح بدید.

    1. سلام،
      absolute برای image تعریف نشده، برای اون نوشته تعریف شده، چون می خواستن اون نوشته نسبت به container در گوشه بالا قرار بگیره.

      وقتی میگیم نسبت به یک چیزی یعنی اون چیز باید relative بگیره. و اون عنصری که باید نسبت به اون چیز مختصات بگیره باید absolute داشته باشه.

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

  11. درود ، اگر بخوام استایل پوزیشن رو روو حالت فیکس پایین سمت چپ سایت تعریف کنیم :”style=”position:fixed;left:0px;top:0px بجای top چه چیزی باید بنویسم؟

  12. سلام با تشکر از وبسایت خوبتون خواستم بگم اگه ممکنه اموزشی در رابطه با ترکیب دو مبحث position و float قرار بدید چونکه مطالبشون به هم بسیار شبیهه و درکش یخورده سخته.ممنون.

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

  13. سلام …احیانا شما از اعضای کنسرسیوم جهانی وب نیستید؟اگه هستید سلاممو به تیم برنرزلی برسونید….
    خدا وکیلی از این همه جزییات کپ کردم!!!!

    1. سلام، باشه بزرگواریتون رو می رسونم :))
      منم خودم اینا رو از وب و از افراد دیگه یاد گرفتم، و در مورد جزییات هم باید بگم تنها کاری که کردم در زمان نوشتن، مقالات زیادی رو کنار هم گذاشتم تا چیزی از قلم نیافته.

  14. سلام و تشکر . مطلب فوق العاده عالی و قابل هضمی بود البته به تحریر شما قابل هضم شد :) بازم تشکر ازتون که به علاقه مندان در درک بیشتر مفاهیم وب کمک میکنید و اینکه وقت ارزشمندتنون رو صرف نوشتن همچین مقاله های بینظری میکنید .

  15. مرسی از این توضیحات واقعا هیچجا اینجوری توضیح نداده بودن
    دیگه فکر نکنم هیچوقت با position مشکلی داشته باشم
    مرسی از سایت خوبتون خسته هم نباشین 🙏

  16. با سلام
    ممنون از مطالبی که واقعا پر مغز بود.
    سوال اول: معانی خود کلماتی که برای حالت های position در نظر گرفته شده اصلا با کاری انجام می ده نمی خونه یا اینکه معانی دور آن مد نظر است یا…
    absolute به معنی مطلق
    relative به معنی وابسته
    در صورتی که absolute به relative است چرا؟؟؟

    سوال دوم : در آخرین تمرین که همه مثال ها را در یک مثال جهت مقایسه تعریف کردید چرا مسطیل پایینی با دادن top یا left کلا از صفحه محو می شود؟

    1. سلام،
      در مورد نام relative: منظور اینه که عنصر نسبت (وابسته) به موقعیت “خودش” مختصات میگیره.
      absolute رو من خودم هم درک نمیکنم چرا این رو گذاشتن، شاید یک وجه نامگذاری این بوده که از جریان نرمال صفحه خارج میشه و بصورت مطلق موقعیتش مشخص میشه.

  17. سلام قبلا هیچی در باره این موضوع نمیفهمیدم حال یک کم بفهمیدم اگر بشه در قالب ویدیو اینها ره تو ضیح بدی خیلی خوب میشه ممنون

  18. salam
    bebakhshid che joori mishe 2 ta tage masalan div be surate tu dar tu dasht va tage dakheli ro ba vizhegiye position az dele tage valed biruin avord ke be valedesh bechasbe ghablan didam ke in karo mikonan vali yadam nist

  19. سلام
    من یه div درست کردم و تو سی اس اس بهش position:relative دادم بعدش چند تا div دیگه درست کردم به همه شون با compound سلکتور ها position:absolute دادم تا از والدش پیروی کنه اما وقتی این absolute دادم باعث شد این div ها برن تو هم دیگه(از block level به text level تبدیل شدند ) چی کار کنم تا خصوصیت block رو از دست ندن؟

  20. خدا خیرتون بده!
    چند مدته که تازه شروع به یادگیری طراحی وب کردم ولی این مبحث برام همیشه گیج کننده بوده و تازه همین الان که مطالب رو خوندم برام قابل فهم شد. کاش خیلی زودتر از اینا با سایت شما آشنا می شدم.

  21. سلام بزرگوار.
    عزیز جان اینو هر کاری میکنم درک نمیکنم:
    “اگر برای عنصری در این حالت height مشخص شود و همینطور top و bottom تعیین گردد: top تعیین کننده مکان عنصر خواهد بود و برنده مسابقه خواهد شد.

    اگر width برای عنصر تعیین شود و همینطور دو مقدار left و right را داشته باشیم, اگر جهت صفحه چپ به راست باشد left تعیین کننده مکان عنصر خواهد بود و اگر جهت صفحه راست به چپ (rtl) باشد, right برنده خواهد بود.”

    میشه یه تیکه کد بیشتر بهم معرفی کنید. یا کمی بیشتر توضیح بدید.
    ممنونم.

    1. سلام،

      ببینید فرض کنید من یک عنصری دارم که از نوع absolute هستش، اگر بهش top صفر بدم میچسبه به بالا، اگر بهش bottom صفر بدم میچسبه به پایین.

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

      خب این اتفاق می افته چون من به عنصرم نگفتم چه ارتفاعی رو داشته باش برای همون top و bottom هرجور دوست دارن با عنصر ژیمناستیک کار ما برخورد میکنند. منم بودم خب همین کار رو میکردم.

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

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

      توی این حالت اون کسایی که استاندارهای وب رو مینویسند دست به کار میشن و به عنصر ما میگن، top از آشناهاست برای همون همیشه اولویت با اونه.

      نمونه کد قصه ما:

      https://jsbin.com/delosur/edit?html,css,output

  22. سلام مرسی بابت مطالب خوبتون
    چرا توی حالت absolute عرض و ارتفاع عنصر(div) ما ثابت میشه(متناسب با محتوای داخلش) اما توی حالت relative اینطور نیست.
    آیا بخاطر اینه که توی حالت relative عنصر ما از flow اجدادش پیروی می‌کنه؟

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

  23. سلام استاد
    چرا دو تا عنصر absolute میرند تو هم ؟ مثلا 2 تا div داریم هر دوتاشون هم absolute هستند. بعد این دوتا تو هم میرند.
    چطوری می شه کنار هم قرار شون بدم ؟
    سوال بعد این که توی این حالت چطور میشه عنصر اولی رو اول نمایش داد چون فقط دومی دیده میشه
    #d1 {
    background-color: yellow;
    position: absolute;
    width: 100%;
    }

    #d2 {
    background-color: orange;
    position: absolute;
    width: 100%;
    }

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

      کافی position رو ازشون بگیرید یا مختصاتشون رو تغییر بدید

  24. سلام و وقت بخیر
    من با وردپرس دارم کار میکنم
    یک برگه بافیوژن المان ها طراحی کردم…وقتی زوم میکنم یکی از div هام میره زیر div قبلی …لطفا راهنمایی کنید

  25. سلام من یه دایو تعریف کردم و ارتفاعش رو بصورتmin-height:500px قرار دادم و یه دایو کوچیک هم داخلش با پوزیشن ریلیتیو تعریف کردم و ارتفاعش رو 150px گذاشتم و حالا یه مختصاتم دادم بهش داخل همون دایو بزرگتر پدر ، سوالم اینه که چرا 150px که ارتفاع دایو کوچیک بود به دایو بزرگتر هم اضافه شدو ارتفاع دایو بزرگتر شد 650px ،،، تنها راهی که به ذهنم رسید این بود که min-height رو به height تبدیل کردم و درست شد ، میخوام بدونم راه دیگه ای هس که دایو پدر همون min-height بمونه و ارتفاع 150px هم بهش اضافه نشه؟ مرسی بابت آموزشای خوبتون

    1. سلام، همونطور که توی پست نوشتیم، اگر پوزیشن از نوع relative باشه عنصر توی حالت عادی خواهد بود و ابعادش روی ابعاد پدرش تاثیر میزاره. بسته به موردتون داره ولی راه حل شاید استفاده از absolute باشه.
      تاکیید میکنم شرایط مهم هستش و من نمیدونم مورد شما چیه.

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

  27. سلام وقتتون بخیرو خسته نباشید
    من توی طراحیم منویی طراحی کردم که میخوام به حالت sticky باشه top را برابر صفر میدم . اسکرول میکنم پایین فیکس میشه ولی به آخرای صفحه که می رسم منو از حالت فیکس خارج میشه بعدش که برمیگردم بالا (وسطهای صفحه) منو دوباره میاد و فیکس میشه بالا. در صورتیکه من جاوا اسکریپتی واسه این ننوشتم. کل css , html را حالت کامنت درآوردم به جاش br زدم ببینم مشکل از کجاست ولی پیدا نکردم اگه مقدوره راهنماییم کنید. کد هم عین کد شما را نوشتم:
    #navbar{
    position:sticky;
    top: 0;
    }

    میخوام تا آخر صفحه که اسکرول میکنم بچسبه بالا

  28. سلام. عالی بود! ولی اینکه توی همین وب سایت خودتون منو جهت اسکرول رو تشخیص می ده رو چطوری انجام دادید؟ من وقتی به پایین اسکرول می کنم مخفی میشه ولی وقتی به بالا اسکرول می کنم شبیه sticky میشه.

  29. من معمولا کمتر توی سایتها نظر میدم. ولی واقعا سایتتون عالیه و مطالب به زبان ساده توضیح داده شده است. ممنون

  30. سلام! آموزش عالی و جامع بود ولی نمی دونم چرا توی وب من نمیشه انجام داد. من اسکریپت و کدهای زیر رو توی چند وبلاگ آزمایش کردم مشکلی نداشت اما وقتی توی وب اصلیم نشون داده نمیشه.
    در واقع من یه منوی شناور میخوام که ویژگی پوزیشن با مقدار فیکست داشته باشه اما توی صفحه مورد نظرم شناور و ثابت نیست بلکه با اسکرول صفحه جابجا میشه. ممنون میشم راهنمایی ام بفرمائید!
    صفحه مورد نظرم: http://taleshblog.ir/xp/categories
    کدهای اعمال شده:

    div.floating-menu {
    position:fixed !important;
    right:10px;
    top:100px;
    width:150px;
    z-index:100;
    }
    div.floating-menu a, div.floating-menu h3 {
    display:block;
    margin:0 0.5em;
    }

    پیوندهای پیشنهادی بسته‌های خبری مطالب پربازدید باشگاه نویسندگان

  31. عناصری که خارج از flow صفحه قرار میگیرن:
    1- عناصری که float میشن
    2- عناصر position:absolute یا position:fixed

    اگر عنصر position:relative باشه، از flow صفحه خارج نمیشه و ترتیب عناصر رو بهم نمیریزه:
    => وقتی جابجا بشه، جایگاه قبلیش در flow صفحه حفظ میشه و عناصر مجاور، جای اون رو پر نمیکنن.
    => اما وقتی این عنصر جابجا بشه تاثیری بر دیگر عناصر نخواهد داشت و تکون خوردنش باعث جابجا شدن عناصر مجاورش نمیشه.
    => اما اگر margin داشته باشه، روی مکان عناصر مجاور تاثیر میذاره.

    *** در واقع وقتی میگیم یک عنصر از flow صفحه خارج شده، یعنی “باقی عناصر از حضور اون عنصر در صفحه آگاه نیستن”.
    و به همین دلیل میگیم position:relative هنوز داخل flow هست چون وقتی موقعیتش عوض بشه، جایگاه قبلی ش حفظ میشه و ترتیب flow رو بهم نمیریزه، چرا؟ “چون باقی عناصر فکر میکنن اون عنصر هنوز در اون جای قبلیش حضور داره”

    => همچنین اگر عنصرِ float شده، margin داشته باشه، روی عناصر مجاورش تاثیر میذاره و مکان اونها رو تغییر میده.

  32. یک نکته:
    عنصری که position:absolute هست، موقعیتش نسبت به اولین عنصر در اجدادش که position گرفته تعیین میشه. این position میتونه هرچی باشه، فقط باید غیر از static باشه، لزومی نداره حتما relative باشه تا نسبت به اون تعیین بشه.

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

  33. عرض ادب خدمت شما
    مطالب سایت بشدت عالی و مفهومه. خیلی ممنون از زحماتی که میکشین امیدوارم همیشه موفق باشین و همینطور ادامه بدین

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

  35. دم شما گرم واسه ساده نویسی و فهم راحت مطالب.
    فقط یه سوال آیا همچنان position های sticky و center و page در مرورگر ها پشتیبانی نمی شوند؟
    و اگر پشتیبانی می شوند رفتار page چگونه است ؟

سوال داری؟ برو به پنل پرسش و پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *