Accordion
Az accordion komponens lehetővé teszi a tartalom összecsukható és kinyitható megjelenítését, ideális hosszú szövegek vagy GYIK szekciók kezelésére.
Forráskód
<div class="accordion" id="accordionExample" style="max-width: 800px">
<div class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button aria-controls="collapseOne" aria-expanded="true" class="accordion-button" data-bs-target="#collapseOne" data-bs-toggle="collapse" type="button">
Miért válasszam ezt a szolgáltatást?
</button>
</h2>
<div aria-labelledby="headingOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample" id="collapseOne">
<div class="accordion-body">
Ez a szolgáltatás kiemelkedő minőséget és megbízhatóságot kínál, amely tökéletesen megfelel az Ön igényeinek.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button aria-controls="collapseTwo" aria-expanded="false" class="accordion-button collapsed" data-bs-target="#collapseTwo" data-bs-toggle="collapse" type="button">
Hogyan működik a folyamat?
</button>
</h2>
<div aria-labelledby="headingTwo" class="accordion-collapse collapse" data-bs-parent="#accordionExample" id="collapseTwo">
<div class="accordion-body">
A folyamat egyszerű és átlátható. Először felmérjük az Ön igényeit, majd egyedi megoldást dolgozunk ki.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingThree">
<button aria-controls="collapseThree" aria-expanded="false" class="accordion-button collapsed" data-bs-target="#collapseThree" data-bs-toggle="collapse" type="button">
Mennyi időt vesz igénybe?
</button>
</h2>
<div aria-labelledby="headingThree" class="accordion-collapse collapse" data-bs-parent="#accordionExample" id="collapseThree">
<div class="accordion-body">
Az időtartam a projekt méretétől függ. Általában 1-4 hetet vesz igénybe, pontos időbecslést konzultáció során adunk.
</div>
</div>
</div>
</div>
Forms, input mezők
Az űrlapok és input mezők lehetővé teszik a felhasználói adatok gyűjtését, különböző típusú beviteli mezőkkel és validációs lehetőségekkel.
Forráskód
<form class="row g-3">
<div class="col-md-6">
<label class="form-label" for="textInput">Szöveg</label>
<input class="form-control" id="textInput" placeholder="Írj ide..." type="text">
</div>
<div class="col-md-6">
<label class="form-label" for="emailInput">E-mail</label>
<input class="form-control" id="emailInput" placeholder="email@példa.com" type="email">
</div>
<div class="col-12">
<label class="form-label" for="textareaInput">Üzenet</label>
<textarea class="form-control" id="textareaInput" placeholder="Üzenet..." rows="2"></textarea>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" id="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">Feltételek</label>
</div>
<div class="form-check">
<input checked class="form-check-input" id="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">Hírlevél</label>
</div>
</div>
<div class="col-12">
<label class="form-label">Válassz</label>
<div class="form-check">
<input checked class="form-check-input" id="radio1" name="radioOptions" type="radio">
<label class="form-check-label" for="radio1">Opció 1</label>
</div>
<div class="form-check">
<input class="form-check-input" id="radio2" name="radioOptions" type="radio">
<label class="form-check-label" for="radio2">Opció 2</label>
</div>
</div>
<div class="col-md-6">
<label class="form-label" for="selectInput">Kategória</label>
<select class="form-select" id="selectInput">
<option selected>Válassz...</option>
<option value="1">Kategória 1</option>
<option value="2">Kategória 2</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="inputGroup">Keresés</label>
<div class="input-group">
<span class="input-group-text">
<svg class="bi bi-search" fill="currentColor" height="12" viewBox="0 0 16 16" width="12" xmlns="http://www.w3.org/2000/svg">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>
</svg>
</span>
<input class="form-control" id="inputGroup" placeholder="Keresés..." type="text">
</div>
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit">Küldés</button>
</div>
</form>
Alerts
A figyelmeztetések (alerts) vizuális visszajelzést nyújtanak a felhasználóknak, különböző típusú üzenetek, például sikeres műveletek vagy hibák jelzésére.
alert alert-color alert-content(alert-title, alert-text)
Bezárható Alert-ek
Forráskód
<div>
<h5 class="fw-semibold">alert alert-color alert-content(alert-title, alert-text)</h5>
<div class="d-flex flex-column gap-0">
<div class="alert alert-primary" role="alert">
<i class="bi bi-info-circle"></i>
<div class="alert-content">
<div class="alert-title">Elsődleges figyelmeztetés</div>
<div class="alert-text">Ez egy rövid leírás a figyelmeztetés részleteiről.</div>
</div>
</div>
<!-- További alert-ek hasonló szerkezettel -->
</div>
<h5 class="fw-semibold">Bezárható Alert-ek</h5>
<div class="d-flex flex-column gap-0">
<div class="alert alert-primary alert-dismissible fade show" role="alert">
<i class="bi bi-info-circle"></i>
<div class="alert-content">
<div class="alert-title">Bezárható figyelmeztetés</div>
<div class="alert-text">Ez egy bezárható elsődleges figyelmeztetés.</div>
</div>
<button aria-label="Close" class="btn-close" data-bs-dismiss="alert" type="button"></button>
</div>
<!-- További bezárható alert-ek -->
</div>
</div>
Badge
A badge-ek kis címkék, amelyek állapotok, kategóriák vagy egyéb metaadatok jelzésére szolgálnak, gyakran színekkel és ikonokkal kombinálva.
badge badge-color
badge badge-outline badge-outline-color
Badge-ek ikonokkal
Forráskód
<div>
<h5 class="fw-semibold">badge badge-color</h5>
<div class="d-flex flex-wrap gap-1">
<span class="badge badge-primary">Primary</span>
<span class="badge badge-secondary">Secondary</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-danger">Danger</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-info">Info</span>
<span class="badge badge-light">Light</span>
<span class="badge badge-dark">Dark</span>
</div>
<h5 class="fw-semibold">badge badge-outline badge-outline-color</h5>
<div class="d-flex flex-wrap gap-2">
<span class="badge badge-outline badge-outline-primary">Primary</span>
<!-- További outline badge-ek -->
</div>
<h5 class="fw-semibold">Badge-ek ikonokkal</h5>
<div class="d-flex flex-wrap gap-2">
<span class="badge badge-primary">
<i class="bi bi-star-fill"></i> Kiemelt
</span>
<!-- További ikonokkal ellátott badge-ek -->
</div>
</div>
Táblázatok
A táblázatok strukturált adatok megjelenítésére szolgálnak, támogatják a reszponzív dizájnt és különböző stílusokat, például badge-eket és gombokat.
Forráskód
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Termék</th>
<th>Ár</th>
<th>Státusz</th>
<th>Műveletek</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Prémium csomag</td>
<td>25 000 Ft</td>
<td><span class="badge badge-success">Aktív</span></td>
<td class="actions">
<a class="btn btn-primary btn-sm" href="#"><i class="bi bi-pencil"></i></a>
<a class="btn btn-outline-secondary btn-sm" href="#"><i class="bi bi-trash"></i></a>
</td>
</tr>
<!-- További sorok -->
</tbody>
</table>
</div>
Kártyák
A kártyák rugalmas és vizuálisan vonzó komponensek, amelyek alkalmasak termékek, szolgáltatások vagy események bemutatására képekkel és gombokkal.
Vízszintes Card
Projekt bemutatása
Ez egy részletes leírás a projektről, amely kiemeli az innovatív megoldásokat és a csapat munkáját.
MegtekintésCard Csoport
Forráskód
<div class="row g-4">
<div class="col-md-4">
<div class="card card-primary">
<img alt="Kép" class="card-img-top" src="...">
<div class="card-body">
<h5 class="card-title">Termék neve</h5>
<p class="card-text">Ez egy rövid leírás a termékről, amely bemutatja a főbb jellemzőit.</p>
<a class="btn btn-primary" href="#">Tudj meg többet</a>
</div>
<div class="card-footer">
<i class="bi bi-clock"></i> Utolsó frissítés: 2025.04.26
</div>
</div>
</div>
<!-- További kártyák -->
</div>
Modal
A modális ablakok ideiglenes párbeszédpanelek, amelyek alkalmasak üzenetek, figyelmeztetések vagy gyors interakciók megjelenítésére.
Forráskód
<button class="btn btn-primary mb-3" data-bs-target="#exampleModal" data-bs-toggle="modal" type="button">
Modal megnyitása
</button>
<div aria-hidden="true" aria-labelledby="exampleModalLabel" class="modal fade" id="exampleModal" tabindex="-1">
<div class="modal-dialog" style="top: 100px; left: 100px;">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Üzenet</h5>
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
</div>
<div class="modal-body">
Ez egy ultra kompakt modal üzenetekhez vagy figyelmeztetésekhez. Mozgatható a header megragadásával és méretezhető a jobb alsó sarokban.
</div>
<div class="modal-footer">
<button class="btn btn-outline-secondary" data-bs-dismiss="modal" type="button">Bezár</button>
<button class="btn btn-primary" type="button">OK</button>
</div>
</div>
</div>
</div>
Tooltip
A tooltip-ek kis információs buborékok, amelyek egérrel történő rámutatáskor jelennek meg, további kontextust biztosítva egy elemhez.
Forráskód
<button class="btn btn-primary" data-bs-placement="top" data-bs-toggle="tooltip" title="Felső tooltip" type="button">
Felső
</button>
<button class="btn btn-primary" data-bs-placement="right" data-bs-toggle="tooltip" title="Jobb tooltip" type="button">
Jobb
</button>
<button class="btn btn-primary" data-bs-placement="bottom" data-bs-toggle="tooltip" title="Alsó tooltip" type="button">
Alsó
</button>
<button class="btn btn-primary" data-bs-placement="left" data-bs-toggle="tooltip" title="Bal tooltip" type="button">
Bal
</button>
Carousel
A carousel komponens lehetővé teszi képek vagy tartalmak forgó megjelenítését, ideális promóciós anyagokhoz vagy galériákhoz.
Forráskód
<div id="carouselExample" class="carousel slide" style="max-width: 800px;">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://images.ctfassets.net/ihx0a8chifpc/GTlzd4xkx4LmWsG1Kw1BB/ad1834111245e6ee1da4372f1eb5876c/placeholder.com-1280x720.png?w=1920&q=60&fm=webp" class="d-block w-100" alt="Első dia">
<div class="carousel-caption d-none d-md-block">
<h5>Első dia</h5>
<p>Ez az első dia leírása.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://images.ctfassets.net/ihx0a8chifpc/GTlzd4xkx4LmWsG1Kw1BB/ad1834111245e6ee1da4372f1eb5876c/placeholder.com-1280x720.png?w=1920&q=60&fm=webp" class="d-block w-100" alt="Második dia">
<div class="carousel-caption d-none d-md-block">
<h5>Második dia</h5>
<p>Ez a második dia leírása.</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Előző</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Következő</span>
</button>
</div>
Dropdowns
A dropdown menük lehetővé teszik opciók elrejtését és megjelenítését egy gombra kattintva, ideális navigációhoz vagy szűrőkhöz.
Forráskód
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown menü
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="#">Akció 1</a></li>
<li><a class="dropdown-item" href="#">Akció 2</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Különálló akció</a></li>
</ul>
</div>
List Group
A lista csoportok egyszerű és rugalmas módot nyújtanak elemek listázására, támogatják az interaktív és stílusos megjelenítést.
- Aktív elem
- Második elem
- Harmadik elem
- Negyedik elem
- Kikapcsolt elem
Forráskód
<ul class="list-group" style="max-width: 400px;">
<li class="list-group-item active" aria-current="true">Aktív elem</li>
<li class="list-group-item">Második elem</li>
<li class="list-group-item">Harmadik elem</li>
<li class="list-group-item">Negyedik elem</li>
<li class="list-group-item disabled" aria-disabled="true">Kikapcsolt elem</li>
</ul>
Pagination
A lapozó komponens lehetővé teszi a tartalom oldalakra bontását, segítve a felhasználókat a nagy adathalmazok közötti navigációban.
Forráskód
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page-item active"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
Popover
A popover-ek információs buborékok, amelyek kattintásra jelennek meg, több tartalmat kínálva, mint a tooltip-ek.
Forráskód
<button type="button" class="btn btn-primary" data-bs-toggle="popover" data-bs-title="Popover cím" data-bs-content="Ez egy popover tartalma, amely további információkat nyújt.">
Popover megnyitása
</button>
Progress
A progress bar komponens vizuálisan jelzi egy folyamat előrehaladását, például letöltést vagy űrlap kitöltést.
Forráskód
<div class="progress" style="max-width: 400px;">
<div class="progress-bar bg-primary" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
</div>
<div class="progress mt-2" style="max-width: 400px;">
<div class="progress-bar bg-success" role="progressbar" style="width: 50%;" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">50%</div>
</div>
<div class="progress mt-2" style="max-width: 400px;">
<div class="progress-bar bg-danger" role="progressbar" style="width: 75%;" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">75%</div>
</div>
Spinners
A spinner komponensek vizuális jelzést adnak a folyamatban lévő műveletekről, például betöltésről vagy adatfeldolgozásról.
Forráskód
<div class="d-flex gap-3">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Betöltés...</span>
</div>
<div class="spinner-border text-success" role="status">
<span class="visually-hidden">Betöltés...</span>
</div>
<div class="spinner-grow text-primary" role="status">
<span class="visually-hidden">Betöltés...</span>
</div>
<div class="spinner-grow text-success" role="status">
<span class="visually-hidden">Betöltés...</span>
</div>
</div>
Toasts
A toast értesítések ideiglenes üzenetek, amelyek alkalmasak gyors visszajelzések vagy figyelmeztetések megjelenítésére.
Forráskód
<button type="button" class="btn btn-primary" id="showToast">Toast megjelenítése</button>
<div class="toast position-fixed bottom-0 end-0" role="alert" aria-live="assertive" aria-atomic="true" id="exampleToast">
<div class="toast-header">
<strong class="me-auto">Értesítés</strong>
<small>Most</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Ez egy toast üzenet, amely visszajelzést ad a felhasználónak.
</div>
</div>
Offcanvas
Az offcanvas komponens egy oldalsó panel, amely ideális navigációs menük vagy további tartalom megjelenítésére.
Oldalsó menü
Forráskód
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
Offcanvas megnyitása
</button>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasExampleLabel">Oldalsó menü</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" href="#">Kezdőlap</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Profil</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Beállítások</a>
</li>
</ul>
</div>
</div>
Tabs
A tab fülek lehetővé teszik a tartalom kategorizálását és váltogatását különböző nézetek között, különböző stílusokkal és elrendezésekkel.
Alapértelmezett Tabs
Ez a kezdőlap tartalma, amely bemutatja az alapvető információkat.
Ez a profil szekció, ahol a felhasználói adatok jelennek meg.
Kapcsolatfelvételi információk és űrlapok itt találhatók.
Pills stílusú Tabs
Ez a kezdőlap tartalma pills stílusban.
Profil információk pills stílusú tabon.
Kapcsolatfelvételi adatok pills stílusban.
Függőleges Tabs
Függőleges tab kezdőlap tartalma.
Függőleges tab profil tartalma.
Függőleges tab kapcsolat tartalma.
Forráskód
<!-- Alapértelmezett Tabs -->
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Kezdőlap</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Kapcsolat</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
<p class="mt-3">Ez a kezdőlap tartalma, amely bemutatja az alapvető információkat.</p>
</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
<p class="mt-3">Ez a profil szekció, ahol a felhasználói adatok jelennek meg.</p>
</div>
<div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
<p class="mt-3">Kapcsolatfelvételi információk és űrlapok itt találhatók.</p>
</div>
</div>
<!-- Pills stílusú Tabs -->
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Kezdőlap</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Kapcsolat</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
<p class="mt-3">Ez a kezdőlap tartalma pills stílusban.</p>
</div>
<div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">
<p class="mt-3">Profil információk pills stílusú tabon.</p>
</div>
<div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab">
<p class="mt-3">Kapcsolatfelvételi adatok pills stílusban.</p>
</div>
</div>
<!-- Függőleges Tabs -->
<div class="d-flex align-items-start">
<div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Kezdőlap</button>
<button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profil</button>
<button class="nav-link" id="v-pills-contact-tab" data-bs-toggle="pill" data-bs-target="#v-pills-contact" type="button" role="tab" aria-controls="v-pills-contact" aria-selected="false">Kapcsolat</button>
</div>
<div class="tab-content" id="v-pills-tabContent">
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
<p>Függőleges tab kezdőlap tartalma.</p>
</div>
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab">
<p>Függőleges tab profil tartalma.</p>
</div>
<div class="tab-pane fade" id="v-pills-contact" role="tabpanel" aria-labelledby="v-pills-contact-tab">
<p>Függőleges tab kapcsolat tartalma.</p>
</div>
</div>
</div>
Notification
A böngészős értesítések lehetővé teszik a felhasználók számára, hogy egyedi üzeneteket küldjenek, amelyek a böngésző értesítési rendszerén keresztül jelennek meg.
Forráskód
<div class="row g-3">
<div class="col-md-8">
<input class="form-control" id="notificationInput" placeholder="Értesítés szövege..." type="text">
</div>
<div class="col-md-4">
<button class="btn btn-primary w-100" onclick="sendNotification()">Küldés</button>
</div>
</div>
<script>
function sendNotification() {
const input = document.getElementById('notificationInput');
const message = input.value || 'Új értesítés!';
if (Notification.permission === 'granted') {
new Notification(message, {
body: 'Ez egy böngészős értesítés.',
icon: 'https://images.ctfassets.net/ihx0a8chifpc/GTlzd4xkx4LmWsG1Kw1BB/ad1834111245e6ee1da4372f1eb5876c/placeholder.com-1280x720.png'
});
} else if (Notification.permission !== 'denied') {
Notification.requestPermission().then(permission => {
if (permission === 'granted') {
new Notification(message, {
body: 'Ez egy böngészős értesítés.',
icon: 'https://images.ctfassets.net/ihx0a8chifpc/GTlzd4xkx4LmWsG1Kw1BB/ad1834111245e6ee1da4372f1eb5876c/placeholder.com-1280x720.png'
});
}
});
}
}
</script>
Progress Stepper
A progress stepper vizuálisan jelzi egy többlépéses folyamat előrehaladását, például egy űrlap kitöltését vagy egy rendelés lépéseit, navigációs gombokkal.
Adatok megadása a folyamathoz.
Adatok ellenőrzése.
Fizetési információk megadása.
Összegzés megtekintése.
Folyamat befejezése.
Forráskód
<ul class="nav nav-tabs mb-3" id="stepperTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="step1-tab" data-bs-toggle="tab" data-bs-target="#step1" type="button" role="tab" aria-controls="step1" aria-selected="true">1. Adatok</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="step2-tab" data-bs-toggle="tab" data-bs-target="#step2" type="button" role="tab" aria-controls="step2" aria-selected="false">2. Ellenőrzés</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="step3-tab" data-bs-toggle="tab" data-bs-target="#step3" type="button" role="tab" aria-controls="step3" aria-selected="false">3. Fizetés</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="step4-tab" data-bs-toggle="tab" data-bs-target="#step4" type="button" role="tab" aria-controls="step4" aria-selected="false">4. Összegzés</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="step5-tab" data-bs-toggle="tab" data-bs-target="#step5" type="button" role="tab" aria-controls="step5" aria-selected="false">5. Befejezés</button>
</li>
</ul>
<div class="tab-content" id="stepperTabContent">
<div class="tab-pane fade show active" id="step1" role="tabpanel" aria-labelledby="step1-tab">
<p class="mt-3">Adatok megadása a folyamathoz.</p>
</div>
<div class="tab-pane fade" id="step2" role="tabpanel" aria-labelledby="step2-tab">
<p class="mt-3">Adatok ellenőrzése.</p>
</div>
<div class="tab-pane fade" id="step3" role="tabpanel" aria-labelledby="step3-tab">
<p class="mt-3">Fizetési információk megadása.</p>
</div>
<div class="tab-pane fade" id="step4" role="tabpanel" aria-labelledby="step4-tab">
<p class="mt-3">Összegzés megtekintése.</p>
</div>
<div class="tab-pane fade" id="step5" role="tabpanel" aria-labelledby="step5-tab">
<p class="mt-3">Folyamat befejezése.</p>
</div>
</div>
<div class="d-flex gap-2 mt-3">
<button class="btn btn-outline-secondary" id="prevStep" disabled>Vissza</button>
<button class="btn btn-primary" id="nextStep">Következő</button>
<button class="btn btn-outline-danger" id="resetSteps">Újra</button>
</div>
<script>
const tabs = document.querySelectorAll('#stepperTab .nav-link');
const prevBtn = document.getElementById('prevStep');
const nextBtn = document.getElementById('nextStep');
const resetBtn = document.getElementById('resetSteps');
let currentStep = 0;
function updateButtons() {
prevBtn.disabled = currentStep === 0;
nextBtn.disabled = currentStep === tabs.length - 1;
}
function showStep(index) {
tabs.forEach((tab, i) => {
tab.classList.toggle('active', i === index);
const pane = document.querySelector(tab.getAttribute('data-bs-target'));
pane.classList.toggle('show', i === index);
pane.classList.toggle('active', i === index);
});
currentStep = index;
updateButtons();
}
nextBtn.addEventListener('click', () => {
if (currentStep < tabs.length - 1) {
showStep(currentStep + 1);
}
});
prevBtn.addEventListener('click', () => {
if (currentStep > 0) {
showStep(currentStep - 1);
}
});
resetBtn.addEventListener('click', () => {
showStep(0);
});
tabs.forEach((tab, index) => {
tab.addEventListener('click', () => {
showStep(index);
});
});
updateButtons();
</script>
Card Slider
A kártya slider lehetővé teszi több kártya megjelenítését egy forgó struktúrában, képekkel és feliratokkal.
Forráskód
<div id="cardSlider" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<div class="row g-4">
<div class="col-md-4">
<div class="card">
<img src="https://images.ctfassets.net/ihx0a8chifpc/GTlzd4xkx4LmWsG1Kw1BB/ad1834111245e6ee1da4372f1eb5876c/placeholder.com-1280x720.png" class="card-img-top" alt="Kártya 1">
<div class="card-body">
<h5 class="card-title">Kártya 1</h5>
<p class="card-text">Első kártya leírása.</p>
</div>
</div>
</div>
<!-- További kártyák -->
</div>
</div>
<!-- További carousel-item-ek -->
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#cardSlider" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Előző</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#cardSlider" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Következő</span>
</button>
</div>
<script>
const cardSlider = document.getElementById('cardSlider');
const carousel = new bootstrap.Carousel(cardSlider, {
interval: 5000,
ride: 'carousel'
});
</script>
Widget Container
A widget konténer lehetővé teszi kártyák szabad elhelyezését, méretezését, hozzáadását és törlését egy reszponzív rácsban, maximum 5 kártya egy sorban és 3 soros elrendezésben, üres helyek nélkül.
Forráskód
<div class="widget-grid" id="widgetContainer">
<div class="widget-card" data-size="1" data-id="1" draggable="true">
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title mb-0">Widget 1</h5>
<div class="d-flex gap-1">
<button class="btn btn-sm btn-link resize-btn" type="button">
<i class="bi bi-arrows-angle-expand"></i>
</button>
<button class="btn btn-sm btn-link close-btn" type="button">
<i class="bi bi-x-lg"></i>
</button>
</div>
</div>
<p class="card-text mt-2">Ez egy widget.</p>
</div>
</div>
</div>
<!-- További widget-ek -->
</div>
<style>
.widget-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-auto-rows: 150px;
gap: 1rem;
padding: 1rem;
min-height: 450px;
grid-auto-flow: dense;
}
.widget-card {
transition: all 0.3s ease;
user-select: none;
}
.widget-card[data-size="1"] {
grid-column: span 1;
grid-row: span 1;
}
.widget-card[data-size="2"] {
grid-column: span 2;
grid-row: span 1;
}
.widget-card[data-size="4"] {
grid-column: span 2;
grid-row: span 2;
}
.widget-card .card {
border: none;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
background-color: #fff;
height: 100%;
overflow: hidden;
}
.widget-card .card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
}
.widget-card .card-body {
padding: 1rem;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.widget-card .card-title {
font-size: 1.1rem;
font-weight: 600;
color: #333;
margin: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.widget-card .card-text {
font-size: 0.85rem;
color: #666;
margin-top: 0.5rem;
flex-grow: 1;
}
.widget-card .close-btn,
.widget-card .resize-btn {
color: #666;
padding: 0.25rem;
transition: color 0.2s ease;
}
.widget-card .close-btn:hover {
color: #dc3545;
}
.widget-card .resize-btn:hover {
color: #007bff;
}
.widget-card[draggable="true"] {
cursor: move;
}
.widget-card[draggable="true"]:active {
opacity: 0.7;
}
@media (max-width: 992px) {
.widget-grid {
grid-template-columns: repeat(3, 1fr);
gap: 0.75rem;
}
}
@media (max-width: 576px) {
.widget-grid {
grid-template-columns: repeat(1, 1fr);
gap: 0.5rem;
}
.widget-card[data-size="1"],
.widget-card[data-size="2"],
.widget-card[data-size="4"] {
grid-column: span 1;
grid-row: span 1;
}
.widget-card .card-title {
font-size: 1rem;
}
.widget-card .card-text {
font-size: 0.8rem;
}
}
</style>
<script>
document.getElementById('addWidget').addEventListener('click', () => {
const container = document.getElementById('widgetContainer');
const widgetCount = container.querySelectorAll('.widget-card').length + 1;
const newWidget = createWidget(widgetCount, '1');
container.appendChild(newWidget);
saveWidgets();
});
function createWidget(id, size) {
const widget = document.createElement('div');
widget.className = 'widget-card';
widget.setAttribute('data-size', size);
widget.setAttribute('data-id', id);
widget.setAttribute('draggable', 'true');
widget.innerHTML = `
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title mb-0">Widget ${id}</h5>
<div class="d-flex gap-1">
<button class="btn btn-sm btn-link resize-btn" type="button">
<i class="bi bi-arrows-angle-expand"></i>
</button>
<button class="btn btn-sm btn-link close-btn" type="button">
<i class="bi bi-x-lg"></i>
</button>
</div>
</div>
<p class="card-text mt-2">Ez egy widget.</p>
</div>
</div>
`;
return widget;
}
document.getElementById('widgetContainer').addEventListener('click', (e) => {
const target = e.target.closest('.close-btn') || e.target.closest('.resize-btn');
if (!target) return;
const card = target.closest('.widget-card');
if (target.classList.contains('close-btn') || target.closest('.close-btn')) {
card.remove();
saveWidgets();
} else if (target.classList.contains('resize-btn') || target.closest('.resize-btn')) {
const sizes = ['1', '2', '4'];
const currentSize = card.getAttribute('data-size');
const nextSize = sizes[(sizes.indexOf(currentSize) + 1) % sizes.length];
card.setAttribute('data-size', nextSize);
saveWidgets();
}
});
function saveWidgets() {
const container = document.getElementById('widgetContainer');
const cards = Array.from(container.querySelectorAll('.widget-card'));
const widgetData = cards.map(card => ({
id: card.getAttribute('data-id'),
title: card.querySelector('.card-title').textContent,
size: card.getAttribute('data-size')
}));
localStorage.setItem('widgets', JSON.stringify(widgetData));
}
function loadWidgets() {
const container = document.getElementById('widgetContainer');
const savedWidgets = JSON.parse(localStorage.getItem('widgets'));
if (!savedWidgets || savedWidgets.length === 0) {
// Initialize with 8 1x1 widgets if none exist
for (let i = 1; i <= 8; i++) {
const widget = createWidget(i, '1');
container.appendChild(widget);
}
} else {
// Load saved widgets
savedWidgets.forEach(widget => {
const newWidget = createWidget(widget.id, widget.size);
container.appendChild(newWidget);
});
}
}
const widgetContainer = document.getElementById('widgetContainer');
let dragged;
widgetContainer.addEventListener('dragstart', (e) => {
if (e.target.classList.contains('widget-card')) {
dragged = e.target;
e.target.style.opacity = 0.5;
setTimeout(() => {
e.target.style.visibility = 'hidden';
}, 0);
}
});
widgetContainer.addEventListener('dragend', (e) => {
if (e.target.classList.contains('widget-card')) {
e.target.style.opacity = 1;
e.target.style.visibility = 'visible';
saveWidgets();
}
});
widgetContainer.addEventListener('dragover', (e) => {
e.preventDefault();
const target = e.target.closest('.widget-card');
if (target && target !== dragged) {
const allCards = Array.from(widgetContainer.querySelectorAll('.widget-card'));
const draggedIndex = allCards.indexOf(dragged);
const targetIndex = allCards.indexOf(target);
const rect = target.getBoundingClientRect();
const offsetX = e.clientX - rect.left;
if (draggedIndex < targetIndex) {
if (offsetX > rect.width / 2) {
target.after(dragged);
} else {
target.before(dragged);
}
} else {
if (offsetX < rect.width / 2) {
target.before(dragged);
} else {
target.after(dragged);
}
}
}
});
widgetContainer.addEventListener('drop', (e) => {
e.preventDefault();
saveWidgets();
});
// Load widgets on page load
loadWidgets();
</script>