Gombok

A gombok különböző stílusokat és méreteket kínálnak, amelyek alkalmasak interaktív elemek, például űrlapok vagy navigáció létrehozására.

btn btn-color
btn btn-outline-color
btn btn-color btn-size
disabled
Forráskód
<div>
    <h5>btn btn-color</h5>
    <div class="d-flex flex-wrap gap-1">
        <button class="btn btn-primary" type="button">Gomb</button>
        <button class="btn btn-secondary" type="button">Gomb</button>
        <button class="btn btn-success" type="button">Gomb</button>
        <button class="btn btn-danger" type="button">Gomb</button>
        <button class="btn btn-warning" type="button">Gomb</button>
        <button class="btn btn-info" type="button">Gomb</button>
        <button class="btn btn-light" type="button">Gomb</button>
        <button class="btn btn-dark" type="button">Gomb</button>
    </div>
    <h5>btn btn-outline-color</h5>
    <div class="d-flex flex-wrap gap-1">
        <button class="btn btn-outline-primary" type="button">Gomb</button>
        <button class="btn btn-outline-secondary" type="button">Gomb</button>
        <button class="btn btn-outline-success" type="button">Gomb</button>
        <button class="btn btn-outline-danger" type="button">Gomb</button>
        <button class="btn btn-outline-warning" type="button">Gomb</button>
        <button class="btn btn-outline-info" type="button">Gomb</button>
        <button class="btn btn-outline-light" type="button">Gomb</button>
        <button class="btn btn-outline-dark" type="button">Gomb</button>
    </div>
    <h5>btn btn-color btn-size</h5>
    <div class="d-flex flex-wrap gap-1 align-items-center">
        <button class="btn btn-primary btn-lg" type="button">Gomb</button>
        <button class="btn btn-primary" type="button">Gomb</button>
        <button class="btn btn-primary btn-sm" type="button">Gomb</button>
    </div>
    <h5>disabled</h5>
    <div class="d-flex flex-wrap gap-1">
        <button class="btn btn-primary" disabled type="button">Gomb</button>
        <button class="btn btn-secondary" disabled type="button">Gomb</button>
        <button class="btn btn-success" disabled type="button">Gomb</button>
    </div>
</div>
            

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.

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.

A folyamat egyszerű és átlátható. Először felmérjük az Ön igényeit, majd egyedi megoldást dolgozunk ki.

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.
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
Primary Secondary Success Danger Warning Info Light Dark
badge badge-outline badge-outline-color
Primary Secondary Success Danger Warning Info Light Dark
Badge-ek ikonokkal
Kiemelt Ellenőrzött Figyelmeztetés
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.

# Termék Ár Státusz Műveletek
1 Prémium csomag 25 000 Ft Aktív
2 Alap csomag 15 000 Ft Függőben
3 Pro csomag 35 000 Ft Inaktív
4 Egyéni csomag 50 000 Ft Ellenőrzés
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.

Kép
Termék neve

Ez egy rövid leírás a termékről, amely bemutatja a főbb jellemzőit.

Tudj meg többet
Szolgáltatás

Professzionális szolgáltatásaink gyors és hatékony megoldásokat kínálnak.

Részletek
Esemény

Csatlakozz hozzánk a következő eseményünkön!

Vízszintes Card
Kép
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és
Card Csoport
Mini Card

Kompakt információ egy termékről.

Info
Mini Card

Rövid leírás egy szolgáltatásról.

Info
Mini Card

Esemény gyors összefoglalója.

Info
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>
            

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>
            

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">&laquo;</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">&raquo;</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.

25%
50%
75%
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.

Betöltés...
Betöltés...
Betöltés...
Betöltés...
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.

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>