رفتن به محتوای اصلی به پیمایش اسناد بروید
Check
in English

خارج از بوم

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

چگونه کار می کند

Offcanvas یک مؤلفه نوار کناری است که می‌توان آن را از طریق جاوا اسکریپت تغییر داد تا از لبه‌های چپ، راست، بالا یا پایین درگاه نمایش ظاهر شود. دکمه‌ها یا لنگرها به‌عنوان محرک‌هایی استفاده می‌شوند که به عناصر خاصی که شما تغییر می‌دهید متصل می‌شوند، و dataاز ویژگی‌ها برای فراخوانی جاوا اسکریپت ما استفاده می‌شود.

  • Offcanvas برخی از کدهای جاوا اسکریپت مشابه را به عنوان مدال به اشتراک می گذارد. از نظر مفهومی، آنها کاملاً مشابه هستند، اما پلاگین های جداگانه ای هستند.
  • به طور مشابه، برخی از متغیرهای منبع Sass برای سبک‌ها و ابعاد offcanvas از متغیرهای modal به ارث رسیده‌اند.
  • وقتی نشان داده می‌شود، offcanvas شامل یک پس‌زمینه پیش‌فرض است که می‌توان روی آن کلیک کرد تا offcanvas پنهان شود.
  • مشابه حالت‌های مدال، در هر بار فقط یک offcanvas قابل نمایش است.

سر بالا! با توجه به اینکه CSS چگونه انیمیشن ها را مدیریت می کند، نمی توانید از یک عنصر marginیا translateروی یک .offcanvasعنصر استفاده کنید. در عوض، از کلاس به عنوان یک عنصر بسته بندی مستقل استفاده کنید.

prefers-reduced-motionاثر انیمیشن این مؤلفه به پرسش رسانه بستگی دارد . بخش حرکت کاهش یافته اسناد دسترسی ما را ببینید.

مثال ها

اجزای Offcanvas

در زیر یک مثال offcanvas است که به طور پیش فرض (از طریق .showروی .offcanvas) نشان داده شده است. Offcanvas شامل پشتیبانی از یک هدر با دکمه بستن و یک کلاس بدنه اختیاری برای مقدار اولیه paddingاست. پیشنهاد می‌کنیم در صورت امکان، سرصفحه‌های offcanvas را با کنش‌های رد کردن اضافه کنید، یا یک اقدام رد کردن صریح ارائه دهید.

خارج از بوم
محتوای offcanvas در اینجا قرار می گیرد. شما می توانید تقریباً هر مؤلفه بوت استرپ یا عناصر سفارشی را در اینجا قرار دهید.
html
<div class="offcanvas offcanvas-start show" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasLabel">Offcanvas</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    Content for the offcanvas goes here. You can place just about any Bootstrap component or custom elements here.
  </div>
</div>

نسخه ی نمایشی زنده

از دکمه های زیر برای نمایش و پنهان کردن یک عنصر offcanvas از طریق جاوا اسکریپت استفاده کنید که .showکلاس را روی یک عنصر با .offcanvasکلاس تغییر می دهد.

  • .offcanvasمحتوا را پنهان می کند (پیش فرض)
  • .offcanvas.showمحتوا را نشان می دهد

می توانید از یک پیوند با hrefویژگی یا یک دکمه با data-bs-targetویژگی استفاده کنید. در هر دو مورد، data-bs-toggle="offcanvas"لازم است.

لینک با href
خارج از بوم
برخی از متن ها به عنوان جایگیر. در زندگی واقعی می توانید عناصری را که انتخاب کرده اید داشته باشید. مانند، متن، تصاویر، لیست ها و غیره
html
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample">
  Link with href
</a>
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
  Button with data-bs-target
</button>

<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <div>
      Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
    </div>
    <div class="dropdown mt-3">
      <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
        Dropdown button
      </button>
      <ul class="dropdown-menu">
        <li><a class="dropdown-item" href="#">Action</a></li>
        <li><a class="dropdown-item" href="#">Another action</a></li>
        <li><a class="dropdown-item" href="#">Something else here</a></li>
      </ul>
    </div>
  </div>
</div>

پیمایش بدنه

پیمایش <body>عنصر زمانی غیرفعال می‌شود که یک offcanvas و پس‌زمینه آن قابل مشاهده باشد. از data-bs-scrollویژگی برای فعال کردن <body>اسکرول استفاده کنید.

خارج از بوم با پیمایش بدنه

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

html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">Enable body scrolling</button>

<div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="false" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasScrollingLabel">Offcanvas with body scrolling</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <p>Try scrolling the rest of the page to see this option in action.</p>
  </div>
</div>

پیمایش بدنه و پس‌زمینه

همچنین می توانید <body>پیمایش با پس زمینه قابل مشاهده را فعال کنید.

پس زمینه با پیمایش

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

html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBothOptions" aria-controls="offcanvasWithBothOptions">Enable both scrolling & backdrop</button>

<div class="offcanvas offcanvas-start" data-bs-scroll="true" tabindex="-1" id="offcanvasWithBothOptions" aria-labelledby="offcanvasWithBothOptionsLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">Backdrop with scrolling</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <p>Try scrolling the rest of the page to see this option in action.</p>
  </div>
</div>

پس زمینه ایستا

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

خارج از بوم
اگر بیرون از من کلیک کنید، نمی بندم.
html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#staticBackdrop" aria-controls="staticBackdrop">
  Toggle static offcanvas
</button>

<div class="offcanvas offcanvas-start" data-bs-backdrop="static" tabindex="-1" id="staticBackdrop" aria-labelledby="staticBackdropLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="staticBackdropLabel">Offcanvas</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <div>
      I will not close if you click outside of me.
    </div>
  </div>
</div>

بوم تیره

اضافه شده در نسخه 5.2.0

ظاهر offcanvases را با ابزارهای کاربردی تغییر دهید تا بهتر آنها را با زمینه های مختلف مانند نوارهای ناوبری تاریک مطابقت دهید. در اینجا ما .text-bg-darkبه .offcanvasو .btn-close-whiteبه .btn-closeبرای یک ظاهر طراحی مناسب با یک بوم تیره تیره اضافه می کنیم. اگر کرکره‌ای در داخل دارید، اضافه کردن .dropdown-menu-darkبه را نیز در نظر بگیرید .dropdown-menu.

خارج از بوم

محتوای offcanvas را در اینجا قرار دهید.

html
<div class="offcanvas offcanvas-start show text-bg-dark" tabindex="-1" id="offcanvasDark" aria-labelledby="offcanvasDarkLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasDarkLabel">Offcanvas</h5>
    <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvasDark" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <p>Place offcanvas content here.</p>
  </div>
</div>

پاسخگو

اضافه شده در نسخه 5.2.0

کلاس‌های واکنش‌گرا offcanvas محتوا را خارج از viewport از یک نقطه شکست مشخص و پایین پنهان می‌کنند. بالاتر از آن نقطه شکست، محتویات درون طبق معمول رفتار خواهند کرد. برای مثال، .offcanvas-lgمحتوا را در یک offcanvas در زیر lgنقطه شکست پنهان می کند، اما محتوای بالای lgنقطه شکست را نشان می دهد.

اندازه مرورگر خود را تغییر دهید تا کلید offcanvas پاسخگو نشان داده شود.
پاسخگو offcanvas

این محتوا در یک .offcanvas-lgاست.

html
<button class="btn btn-primary d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasResponsive" aria-controls="offcanvasResponsive">Toggle offcanvas</button>

<div class="alert alert-info d-none d-lg-block">Resize your browser to show the responsive offcanvas toggle.</div>

<div class="offcanvas-lg offcanvas-end" tabindex="-1" id="offcanvasResponsive" aria-labelledby="offcanvasResponsiveLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasResponsiveLabel">Responsive offcanvas</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#offcanvasResponsive" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    <p class="mb-0">This is content within an <code>.offcanvas-lg</code>.</p>
  </div>
</div>

کلاس‌های offcanvas پاسخگو برای هر نقطه شکست در دسترس هستند.

  • .offcanvas
  • .offcanvas-sm
  • .offcanvas-md
  • .offcanvas-lg
  • .offcanvas-xl
  • .offcanvas-xxl

تعیین سطح

هیچ جای پیش‌فرضی برای اجزای offcanvas وجود ندارد، بنابراین باید یکی از کلاس‌های اصلاح‌کننده زیر را اضافه کنید.

  • .offcanvas-startoffcanvas را در سمت چپ درگاه نمایش قرار می دهد (نشان داده شده در بالا)
  • .offcanvas-endoffcanvas را در سمت راست درگاه دید قرار می دهد
  • .offcanvas-topoffcanvas را در بالای درگاه دید قرار می دهد
  • .offcanvas-bottomoffcanvas را در پایین درگاه دید قرار می دهد

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

بالای بوم
...
html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop" aria-controls="offcanvasTop">Toggle top offcanvas</button>

<div class="offcanvas offcanvas-top" tabindex="-1" id="offcanvasTop" aria-labelledby="offcanvasTopLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasTopLabel">Offcanvas top</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    ...
  </div>
</div>
Offcanvas درست است
...
html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Toggle right offcanvas</button>

<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasRightLabel">Offcanvas right</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body">
    ...
  </div>
</div>
پایین بوم
...
html
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom">Toggle bottom offcanvas</button>

<div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel">
  <div class="offcanvas-header">
    <h5 class="offcanvas-title" id="offcanvasBottomLabel">Offcanvas bottom</h5>
    <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  </div>
  <div class="offcanvas-body small">
    ...
  </div>
</div>

دسترسی

از آنجایی که پانل offcanvas از نظر مفهومی یک گفتگوی مودال است، حتماً aria-labelledby="..."-با ارجاع به عنوان offcanvas- به .offcanvas. توجه داشته باشید که نیازی به اضافه کردن ندارید role="dialog"زیرا ما قبلاً آن را از طریق جاوا اسکریپت اضافه کرده ایم.

CSS

متغیرها

اضافه شده در نسخه 5.2.0

به عنوان بخشی از رویکرد متغیرهای CSS در حال تکامل Bootstrap، offcanvas اکنون از متغیرهای CSS محلی .offcanvasبرای سفارشی‌سازی در زمان واقعی استفاده می‌کند. مقادیر برای متغیرهای CSS از طریق Sass تنظیم می‌شوند، بنابراین سفارشی‌سازی Sass نیز همچنان پشتیبانی می‌شود.

  --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};
  --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};
  --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};
  --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};
  --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};
  --#{$prefix}offcanvas-color: #{$offcanvas-color};
  --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};
  --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
  --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
  --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
  

متغیرهای Sass

$offcanvas-padding-y:               $modal-inner-padding;
$offcanvas-padding-x:               $modal-inner-padding;
$offcanvas-horizontal-width:        400px;
$offcanvas-vertical-height:         30vh;
$offcanvas-transition-duration:     .3s;
$offcanvas-border-color:            $modal-content-border-color;
$offcanvas-border-width:            $modal-content-border-width;
$offcanvas-title-line-height:       $modal-title-line-height;
$offcanvas-bg-color:                $modal-content-bg;
$offcanvas-color:                   $modal-content-color;
$offcanvas-box-shadow:              $modal-content-box-shadow-xs;
$offcanvas-backdrop-bg:             $modal-backdrop-bg;
$offcanvas-backdrop-opacity:        $modal-backdrop-opacity;

استفاده

افزونه offcanvas از چند کلاس و ویژگی برای انجام کارهای سنگین استفاده می کند:

  • .offcanvasمحتوا را پنهان می کند
  • .offcanvas.showمحتوا را نشان می دهد
  • .offcanvas-startبوم را در سمت چپ پنهان می کند
  • .offcanvas-endبوم را در سمت راست پنهان می کند
  • .offcanvas-topبوم را در بالا پنهان می کند
  • .offcanvas-bottomبوم را در پایین پنهان می کند

یک دکمه رد کردن با data-bs-dismiss="offcanvas"ویژگی اضافه کنید، که عملکرد جاوا اسکریپت را فعال می کند. حتماً از <button>عنصر با آن برای رفتار مناسب در همه دستگاه‌ها استفاده کنید.

از طریق ویژگی های داده

تغییر وضعیت

اضافه کردن data-bs-toggle="offcanvas"و data-bs-targetیا hrefبه عنصر برای اختصاص خودکار کنترل یک عنصر offcanvas. این data-bs-targetویژگی یک انتخابگر CSS را برای اعمال offcanvas می پذیرد. حتماً کلاس offcanvasرا به عنصر offcanvas اضافه کنید. اگر می‌خواهید به‌طور پیش‌فرض باز شود، کلاس اضافی را اضافه کنید show.

رد

رد کردن را می توان با dataویژگی روی دکمه ای در داخل offcanvas به دست آورد که در زیر نشان داده شده است:

<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>

یا روی دکمه ای خارج از کانواس با استفاده از موارد data-bs-targetزیر نشان داده شده است:

<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
در حالی که هر دو روش برای رد کردن یک offcanvas پشتیبانی می‌شود، به خاطر داشته باشید که رد کردن از خارج از یک offcanvas با الگوی گفتگوی راهنمای شیوه‌های نویسندگی ARIA مطابقت ندارد . این کار را با مسئولیت خود انجام دهید.

از طریق جاوا اسکریپت

فعال کردن دستی با:

const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))

گزینه ها

از آنجایی که گزینه‌ها می‌توانند از طریق ویژگی‌های داده یا جاوا اسکریپت ارسال شوند، می‌توانید یک نام گزینه را data-bs-مانند در ضمیمه کنید data-bs-animation="{value}". هنگام عبور گزینه ها از طریق ویژگی های داده، حتماً نوع حروف نام گزینه را از “ camelCase ” به “ kebab-case ” تغییر دهید. به عنوان مثال، data-bs-custom-class="beautifier"به جای استفاده از data-bs-customClass="beautifier".

از Bootstrap 5.2.0، همه مؤلفه‌ها از یک ویژگی داده رزرو شده تجربیdata-bs-config پشتیبانی می‌کنند که می‌تواند پیکربندی مؤلفه ساده را به عنوان یک رشته JSON در خود جای دهد. هنگامی که یک عنصر دارای data-bs-config='{"delay":0, "title":123}'و data-bs-title="456"ویژگی باشد، مقدار نهایی titleخواهد بود 456و ویژگی های داده جداگانه مقادیر داده شده در را لغو می کنند data-bs-config. علاوه بر این، ویژگی های داده موجود می توانند مقادیر JSON مانند data-bs-delay='{"show":0,"hide":150}'.

نام تایپ کنید پیش فرض شرح
backdrop بولی یا رشته ایstatic true در حالی که offcanvas باز است، یک پس‌زمینه روی بدنه اعمال کنید. همچنین، staticپس‌زمینه‌ای را مشخص کنید که وقتی روی آن کلیک می‌شود، offcanvas بسته نشود.
keyboard بولی true هنگامی که کلید فرار فشار داده می شود، offcanvas را می بندد.
scroll بولی false هنگامی که صفحه خارج از بوم باز است، به پیمایش بدنه اجازه دهید.

مواد و روش ها

روش ها و انتقال های ناهمزمان

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

برای اطلاعات بیشتر به مستندات جاوا اسکریپت ما مراجعه کنید .

محتوای شما را به عنوان یک عنصر offcanvas فعال می کند. یک گزینه اختیاری را می پذیرد object.

می توانید یک نمونه offcanvas با سازنده ایجاد کنید، به عنوان مثال:

const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
روش شرح
getInstance روش ایستا که به شما امکان می دهد نمونه offcanvas مرتبط با یک عنصر DOM را دریافت کنید.
getOrCreateInstance روش ایستا که به شما امکان می دهد نمونه offcanvas مرتبط با یک عنصر DOM را دریافت کنید، یا در صورتی که اولیه نشده بود، یک نمونه جدید ایجاد کنید.
hide یک عنصر offcanvas را پنهان می کند. قبل از اینکه عنصر offcanvas واقعاً پنهان شود (یعنی قبل از hidden.bs.offcanvasوقوع رویداد) به تماس گیرنده برمی گردد.
show یک عنصر offcanvas را نشان می دهد. قبل از اینکه عنصر offcanvas واقعاً نشان داده شود (یعنی قبل از shown.bs.offcanvasوقوع رویداد) به تماس گیرنده برمی گردد.
toggle یک عنصر offcanvas را به نشان داده یا پنهان تغییر می دهد. قبل از اینکه عنصر offcanvas واقعاً نشان داده یا پنهان شود (یعنی قبل از اینکه رویداد shown.bs.offcanvasیا hidden.bs.offcanvasرخ دهد) به تماس گیرنده برمی گردد.

مناسبت ها

کلاس offcanvas بوت استرپ چند رویداد را برای اتصال به عملکرد offcanvas نشان می دهد.

نوع رویداد شرح
hide.bs.offcanvas این رویداد بلافاصله پس از hideفراخوانی متد اجرا می شود.
hidden.bs.offcanvas این رویداد زمانی فعال می شود که یک عنصر offcanvas از کاربر پنهان شده باشد (منتظر تکمیل انتقال CSS می شود).
hidePrevented.bs.offcanvas این رویداد زمانی اجرا می‌شود که offcanvas نشان داده می‌شود، پس‌زمینه آن است staticو کلیکی در خارج از offcanvas انجام می‌شود. این رویداد همچنین با فشار دادن کلید فرار و keyboardتنظیم گزینه روی false.
show.bs.offcanvas این رویداد بلافاصله پس از showفراخوانی متد نمونه فعال می شود.
shown.bs.offcanvas این رویداد زمانی فعال می شود که یک عنصر offcanvas برای کاربر قابل مشاهده باشد (منتظر تکمیل انتقال CSS می شود).
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
  // do something...
})