
״הרגשנו שמקשיבים לנו, ואז מכוונים אותנו בעדינות למה שחשוב באמת.״
Live demos of every Swiper slider in the project. Each section has an #id you can reference.
שים לב: נדיר שיש במובייל קונטיינר עם רווח בצדדים: הסליידר נראה חתוך.
<div className="uk-container [--uk-container-padding-horizontal-sm:0]"> // no side padding on a phone
<ClassicGrid bleedMobile … /> // ClassicGrid: the track only, the title keeps it| Mode | Visual | CSS hook | Current prop | Live example |
|---|---|---|---|---|
| arrows | ◀ ▶: two standalone buttons | [swiper_btn_group] | showArrows=true (default) | §9 external arrows |
| pagination · bullets | ● ○ ○ ○: plain round dots (default), 6px gap inside combined nav | .swiper-pagination-bullet | - | §1, §9 |
| pagination · bullets-pill | ● ━ ○ ○: wide pill on active (opt-in per scope) | .swiper-pagination-bullet-active { width: 48px; border-radius: 10px } | scoped CSS override | brand scope |
| pagination · fill-in | ◯: SVG ring that fills on active | [swiper_fill_in_pagination] | fillInPagination=true | - |
| pagination · fraction | 1 / 9: current / total counter | [custom_renderFraction] | fractionPagination=true | §1 (lightboxNav) |
| pagination · on a pill | ● ○ ○ on a small dark pill over the picture (one picture per slide) | .uk-dots-pill (on a wrapper) | a class, not a prop | §7 |
| combined | ◀ ● ━ ○ ○ ▶: single pill | [swiper_nav_combined] | fillInPagination=true / combinedNav=true | §1, §9, §10 |
| arrow_position | bottom · top · sides | [swiper_btn_group][arrow_position] | arrowPosition= | §1 (lightboxNav, sides) |
* fill-in inside combined nav, technically possible but looks bad. Design decision: combined always uses regular bullets.
* too many dots on a phone: paginationMobile={false}.
For every slider: components/Swiper/uk-swiper-shared.css, overridden on :root or a scope.
* Default (sample) = ערך מתוך ה-CSS לדוגמה בלבד, לא נמשך אוטומטית. ייתכן ושונה אחרי שינוי ב-uk-swiper-shared.css.
| Token | Default (sample) | Affects |
|---|---|---|
| --swiper-theme-color | var(--primary) | Swiper's own theme color (on .swiper) |
| --swiper-pagination-color | var(--primary) | Pagination tint baseline (on .swiper) |
| --swiper-navigation-color | var(--primary) | Built-in nav color (on .swiper) |
| --uk-swiper-nav-glyph | 30% (a length works too) | SwiperArrow glyph size, % of the button (NOT the button, see note below) |
| Token | Default (sample) | Affects |
|---|---|---|
| --uk-swiper-pagination-active-color | var(--primary) | Active bullet / fill-in ring |
| --uk-swiper-pagination-inactive-color | color-mix(... foreground 25%) | Inactive bullets |
| --uk-swiper-padding-bottom | 0px | Bottom breathing room, opt-in per slider |
| Token | Default (sample) | Affects |
|---|---|---|
| --fraction-font-size | 1.25rem | Current / total numerals |
| --fraction-font-weight | 700 | Numerals weight |
| --fraction-color | var(--uk-swiper-pagination-active-color) | Numerals color |
| --fraction-divider-font-size | 0.75rem | The "/" between numbers |
| --fraction-divider-font-weight | 400 | Divider weight |
| --fraction-divider-opacity | 0.5 | Divider opacity |
| --fraction-gap | 6px | Gap between numerals + divider |
| --fraction-bg | #f0f0f0 | Pill background |
| --fraction-padding | 4px 10px | Pill inner padding |
| --fraction-border-radius | 100px | Pill roundness |
--uk-swiper-nav-glyph controls only the arrow glyph. The button itself (size, border, bg, opacity) is hard-coded in uk-swiper-shared.css on [swiper_btn_group] button (44px) and [swiper_nav_combined] button (36px). Demos that need different button styling currently override via CSS, this is the fragmentation gap.#swiper-classic-grid
לאיזה תוכן4 עד 12 פריטים מאותו סוג (שירותים, חדרים, פרויקטים, מוצרים), לכל אחד תמונה וכותרת
השאלהיש רשימה של פריטים דומים שלא נכנסת בשורה אחת?
<ClassicGrid slides={slides} slidesPerView={3} slidesPerViewMobile={1.3} centerMode offsetBefore={100} offsetAfter={100} />
// freeMode: no snap, it drifts with momentumoffsetBefore / offsetAfter do not work with loop
<ClassicGrid centerMode slidesPerView={1.33} slidesPerViewMobile={1.33} …rest of the code /><ClassicGrid lightboxNav slidesPerView={1}>…</ClassicGrid>
// click the start half: prev · the end half: next<ClassicGrid items={items} renderSlide={(item) => <MySlide {...item} />} />לאיזה תוכןשורה שמראה 4 עד 6 פריטים מתוך רשימה ארוכה, ובסופה כרטיס שמוביל לעמוד המלא
השאלההסליידר מראה רק חלק מרשימה שיש לה עמוד משלה?
<ClassicGrid slides={slides.slice(0, 5)} moreSlide={{ href: '/works' }} loop={false} /> // label defaults to "הצג עוד"loop must be false
Another picture ratio: --uk-cg-more-ratio on .uk-cg-more
קו שאפשר לגרור, ליד החצים: ה-scrollbar של Swiper עצמו, באלמנט מחוץ לסליידר, בשורה של uk-swiper-bar. הסליידר מקבל רק selectors, אז השורה יושבת איפה שהעיצוב רוצה. לקוחות אוהבים את זה.
<div className="uk-swiper-bar">
<button className="uk-swiper-bar__arrow" data-swiper-prev="feed" aria-label="הקודם">…</button>
<button className="uk-swiper-bar__arrow" data-swiper-next="feed" aria-label="הבא">…</button>
<span className="uk-swiper-bar__label">מהסטודיו</span>
<div className="uk-swiper-line" data-swiper-line="feed" />
</div>
<ClassicGrid externalPrevSelector='[data-swiper-prev="feed"]' externalNextSelector='[data-swiper-next="feed"]'
externalScrollbarSelector='[data-swiper-line="feed"]' pagination={false} … />
// tied by an attribute, not a class: a class is design and gets renamed in a design pass.
// One name per slider: the first match on the page wins.
// On a phone the arrows can go (max-uk-s:hidden on the buttons): you swipe, and the line shows it moves
--uk-swiper-line-track · --uk-swiper-line-fill · --uk-swiper-line-size · --uk-swiper-bar-arrow#swiper-scale-active
לאיזה תוכןלפחות 5 תמונות חזקות שכל אחת עומדת לבד (עבודות, חללים, רגעים), כשהאמצעית בפוקוס
השאלהיש סדרה של תמונות שראוי להציג אחת-אחת במרכז הבמה?
⛓️👮♂️ מבנה קשיח{ src, title?, subtitle?, href? }השדות חובה בכל פריט, העיצוב גמיש
import ScaleActive from '@/components/Swiper/creative_scale_active/creative_scale_active'
<ScaleActive
swiperId="works"
slides={[
{ src: img1, title: 'Sunset Road', subtitle: 'California' },
{ src: img2, title: 'Peak View', subtitle: 'Alps' },
// at least 5 for the loop to look right
]}
/>#swiper-tabs-slider
לאיזה תוכן3 עד 6 נושאים בעלי שם קצר, לכל אחד תמונה וטקסט (מתקני מלון, תחומי טיפול)
השאלהיש כמה נושאים שהגולש בוחר ביניהם לפי שם, ואחד מוצג בכל רגע?
Swiper APIThumbs module (the tab strip is the thumbs swiper)
import SwiperTabsSlider from '@/components/Swiper/swiper_tabs_slider/swiper_tabs_slider'
<SwiperTabsSlider
swiperId="facilities"
autoplay
autoplayDelay={5000}
items={facilities.map((f) => ({ ...f, label: f.title }))} // label = the tab
slides={facilities.map((f) => <FacilitySlide key={f.slug} {...f} />)} // any slide, in a server page
/>#swiper-sync-vertical-text
לאיזה תוכןגלריה של יעדים או פרויקטים שלכל תמונה כותרת קצרה ומשפט (סיורים, נכסים)
השאלהיש סדרת תמונות שכל אחת צריכה שם ומשפט שמתחלפים איתה?
Swiper APIno module: slideToLoop(realIndex) on slideChange
⛓️👮♂️ מבנה קשיח{ title, src, label?, href? }השדות חובה בכל פריט, העיצוב גמיש
import SyncWithVerticalText from '@/components/Swiper/sync_with_vertical_text/SyncWithVerticalText'
<SyncWithVerticalText
swiperId="tours"
arrowColor="#fff"
items={[
{ label: 'Nature', title: 'Nature Never Compromises', src: img1, href: '/tours/nature' },
{ label: 'Design', title: 'Design Shapes the World', src: img2 },
]}
/>לאיזה תוכןעמוד ארוך עם 4 עד 8 חלקים בעלי שם (עמוד סיור, מוצר, תוכנית)
השאלההעמוד ארוך מספיק כדי שגולש ירצה לקפוץ ישר לחלק מסוים?
⛓️👮♂️ מבנה קשיח{ label, href }השדות חובה בכל פריט, העיצוב גמיש
import SwiperSubMenu from '@/components/Swiper/swiper_sub_menu/SwiperSubMenu'
<SwiperSubMenu
stickyOffset="auto"
items={[
{ label: 'המסלול', href: '#route' },
{ label: 'מה כלול', href: '#included' },
{ label: 'מחיר', href: '#price' },
]}
/>
{/* tab order = section order; each href is a section id below */}
<section id="route">…</section>stickyOffset="auto" the sub-menu calculates its own top from the navbar height (reads --uk-navbar-h, falls back to measuring [uk_navbar]). Pass a number for a manual override.01
Clean lines and bold structures define modern urban spaces. Every detail is considered, from facade materials to natural light pathways. We design buildings that work with their environment, not against it.
Our approach combines structural innovation with aesthetic precision, creating landmarks that stand the test of time.
02
Thoughtful interiors balance function, comfort, and style. Spatial planning meets human behavior to create spaces people love to live and work in.
From material selection to lighting design, every element serves a purpose while contributing to the overall atmosphere.
03
Blending built environments with natural surroundings. Green infrastructure, terrain sensitivity, and seasonal planting strategies create outdoor spaces that breathe.
We believe the boundary between architecture and nature should be intentionally blurred, creating seamless transitions between indoor and outdoor living.
04
Homes designed around people's lives, flexible layouts, quality materials, and a deep respect for neighborhood context.
Every residential project starts with understanding how people actually live, then designing spaces that enhance daily life without imposing rigid structures.
#swiper-slider-sync-accordion
לאיזה תוכןרשימת יתרונות או שירותים, לכל פריט שם, פסקה ותמונה משלו
השאלהיש רשימה שכל פריט בה נפתח להסבר ומחליף את התמונה לצדו?
Swiper APIno module: the accordion calls slideToLoop(index)
⛓️👮♂️ מבנה קשיח{ title, description, src, href?, ctaLabel? }השדות חובה בכל פריט, העיצוב גמיש
import SliderSyncAccordion from '@/components/Swiper/slider_sync_accordion/SliderSyncAccordion'
<SliderSyncAccordion
swiperId="services"
items={[
{ title: 'Architecture', description: 'One paragraph that opens under the title.', src: img1, href: '/services/architecture', ctaLabel: 'More' },
{ title: 'Interiors', description: '…', src: img2 },
]}
/>Below 960px: no slider, each panel shows its own still
Clean lines and bold structures define modern urban spaces. Every detail is considered, from facade materials to natural light pathways.
Thoughtful interiors balance function, comfort, and style. Spatial planning meets human behavior to create spaces people love.
Blending built environments with natural surroundings. Green infrastructure, terrain sensitivity, and seasonal planting strategies.
Homes designed around people's lives, flexible layouts, quality materials, and a deep respect for neighborhood context.
#swiper-dots-pill
לאיזה תוכןכרטיס עם כמה תמונות, כשהנקודות יושבות על התמונה (נכס, חדר, מוצר)
השאלההנקודות של הגלריה יושבות על תמונה, ובהירה עלולה להעלים אותן?
Dots on a picture only. Not ClassicGrid's dots
<div className="uk-dots-pill">
<UkCardGallery images={images} /> {/* Swiper */}
</div>
<div className="uk-dots-pill">
<BookingGallery images={images} preview="slider" /> {/* Fancybox */}
</div>
/* tokens: on the wrapper, or a scope ([data-demo="x"] { ... }) */
--uk-dots-pill-bg: rgb(0 0 0 / 0.38);
--uk-dots-pill-bottom: 12px;#swiper-trigger-slide
לאיזה תוכןסליידר של שקופית אחת במסך, שבכל שקופית שלו כמה חלקים זזים שמתנגנים מחדש בכל החלפה (הירו מתחלף, שלבים, השקת מוצר)
השאלהרואים שקופית אחת בכל פעם, ומה שבתוכה צריך לזוז בכל פעם שהיא מגיעה?
Swiper APIno Swiper events: a MutationObserver on .swiper-slide-active, any slider
תוכן חופשיכל שקופית היא JSX שלכם
A GSAP timeline per slide, replayed when the slide becomes active. Each [trigger_slide] is one tween in it.
One slide per view only
An entrance only: up to 6 parts, 2.5s
<ClassicGrid slidesPerView={1} slidesPerViewTablet={1} slidesPerViewMobile={1} loop effect="fade">
{slides.map((s) => (
<div key={s.id}>
<img trigger_slide="" trigger_slide_effect="settle" src={s.src} alt="" />
<span trigger_slide="" trigger_slide_from='{"scale":2.4,"rotation":-14,"opacity":0}' trigger_slide_duration="1.1">{s.number}</span>
<span trigger_slide="" trigger_slide_from='{"x":260,"y":-220,"rotation":200,"opacity":0}'
trigger_slide_at="0.45" trigger_slide_duration="1.3">חדש</span>
<div trigger_slide="" trigger_slide_from='{"scaleX":0}' trigger_slide_stagger="0.08">
<span /><span /><span /><span /><span />
</div>
<h3 trigger_slide="" trigger_slide_effect="mask_up">{s.title}</h3>
<div trigger_slide="" trigger_slide_effect="blur_up">…</div>
</div>
))}
</ClassicGrid>#swiper-sync-slider
לאיזה תוכןמראה ייחודי יותר מסליידר אחד: חלקי הפריט (תמונה, טקסט) בשני אזורים, כל אחד בעיצוב ובתנועה משלו, והם מתחלפים יחד
השאלהרוצים להפריד בין התמונה לטקסט של כל פריט לשני אזורים בעיצוב, כשהם עדיין זזים יחד?
Swiper APIController module (two-way control)
⛓️👮♂️ מבנה קשיח{ title, description, src, label?, linkText?, linkHref? }השדות חובה בכל פריט, העיצוב גמיש
import SyncSlider from '@/components/Swiper/sync_sliders_classic/SyncSlidersClassic'
{/* inside a uk-container: it has none of its own */}
<SyncSlider
swiperId="process"
items={[
{ label: '01', title: 'Architecture', description: 'One paragraph per item.', src: img1, linkText: 'More', linkHref: '/services/architecture' },
{ label: '02', title: 'Interiors', description: '…', src: img2 },
]}
/>contentSwiper.controller.control = gallerySwiper; // the line that joins them
gallerySwiper.controller.control = contentSwiper;demo_sync, לחיצה על כל אחד מזיז את השני#swiper-material-you
לאיזה תוכןכמה קטגוריות או תחומים עם תמונה גדולה ושם, כשהפעיל נפתח והאחרים צרים
השאלהיש קטגוריות שכדאי להציג יחד, אחת בהבלטה?
⛓️👮♂️ מבנה קשיח{ src, label?, href? }השדות חובה בכל פריט, העיצוב גמיש
import MaterialYouSlider from '@/components/Swiper/ui-initiative/material_you_slider/MaterialYouSlider'
<MaterialYouSlider
swiperId="categories"
slidesPerView={2}
centeredSlides
loop={false}
height={560}
combinedNav
slides={[
{ src: img1, label: 'Alpine Vista', href: '/category/alpine' },
{ src: img2, label: 'Morning Mist' },
]}
/>#swiper-fashion
לאיזה תוכןקולקציה של 3 עד 5 פריטים, לכל אחד צבע משלו ותמונה על כל המסך (שמלות, מוצרים)
השאלהכל פריט הוא עולם שלם עם צבע משלו, ומגיע לו מסך מלא?
⛓️👮♂️ מבנה קשיח{ title, src, bgColor }השדות חובה בכל פריט, העיצוב גמיש
import FashionSlider from '@/components/Swiper/ui-initiative/fashion_slider/FashionSlider'
<FashionSlider
swiperId="collection"
slides={[
{ src: img1, title: 'Alpine Vista', bgColor: '#1a1a2e' },
{ src: img2, title: 'Deep Forest', bgColor: '#16213e' },
]}
/>height: 100%. Set height or min-height on the parent div/section.#swiper-tabs-panels
לאיזה תוכןכמה קטגוריות, ובכל אחת רשימה שלמה משלה (חוף / תרבות / סקי, סוגי טיפולים)
השאלההגולש בוחר קטגוריה ואז רואה רשימה שלמה שלה?
תוכן חופשיכל שקופית היא JSX שלכם
A tab = a panel of any content (§3 Tabs Slider: a tab = a slide).
<SwiperTabsPanels
ariaLabel="סוגי דמואים"
navWrapClassName="uk-container" // panels full-bleed, tabs on the text's edge
className="uk-tabs-panels--center" // centred while the row fits
tabs={groups.map(g => ({ id: g.id, label: g.label, count: g.items.length,
content: <ClassicGrid swiperId={`row_${g.id}`} items={g.items} /> }))}
/>
/* tokens: --uk-tabs-panels-accent (the active line), --uk-tabs-panels-gap */#swiper-sync-layer
לאיזה תוכןסליידר שהרקע של הסקשן שלו משתנה לפי הפריט (המלצות עם דיוקן מטושטש, מוצרים בצבע שלהם)
השאלהלכל פריט יש תמונה או צבע שראוי למלא איתם את כל הרקע, ורואים פריט אחד בכל פעם?
Swiper APIno Controller: EffectFade layer, main.on('realIndexChange') → layer.slideTo(realIndex), one way
תוכן חופשיכל שקופית היא JSX שלכם
A layer behind the slider that crossfades with the active slide (renderLayer).
const PLACES = [
{ title: 'מעל העננים', src: '…', bg: 'linear-gradient(135deg, #ece1f3, #f7d3c6)' },
{ title: 'אגם בין הרים', src: '…', bg: 'linear-gradient(135deg, #d6f1f0, #9ad8d4)' },
]
<SwiperSyncLayer swiperId="places" items={PLACES}
renderLayer={(p) => <div style={{ background: p.bg }} />}>
<h3>…</h3>
<ClassicGrid swiperId="places" items={PLACES} renderSlide={(p) => <PlaceCard {...p} />} />
</SwiperSyncLayer><SwiperSyncLayer swiperId="quotes" items={QUOTES}
renderLayer={(q) => <img src={q.photo} alt="" />}
className="my-dark-panel"> /* --uk-sync-layer-blur: 40px; --uk-sync-layer-scale: 1.3;
--uk-sync-layer-overlay: rgb(0 0 0 / .38) */
<ClassicGrid swiperId="quotes" items={QUOTES} renderSlide={(q) => <QuoteCard {...q} />} />
</SwiperSyncLayer>