Skip to main content

Mobil Öncelikli Tasarım: Mobile-First Web Tasarımı

2026'da web trafiğinin %65'i mobil'den geliyor. Hala "desktop-first" tasarım yapan şirketler, pazarın 2/3'sini kaybediyor.

Mobil öncelikli tasarım (Mobile-First Design), bu sorunu çözer. Desktop için tasarlamak yerine, önce mobil için tasarla. Sonra desktop'a ekle.

Bu rehberde, mobile-first tasarımın filosofisini, pratiğini, ve doğru uygulanmasını öğreneceksiniz.

Mobile-First Nedir?

Mobile-First: Tasarımı mobil ekranda başla, sonra tablet ve desktop'a scale up et.

Desktop-First vs Mobile-First

Desktop-First:
Desktop 1920px → Tablet 768px → Mobil 375px
(Çıkarma işlemi - saati, hamburger menu koyup, column'ı sil)

Mobile-First:
Mobil 375px → Tablet 768px → Desktop 1920px
(Ekleme işlemi - menu ekle, column ekle, spacing scale up)

Mobile-First neden daha iyi?

  1. Constraint Forces Simplicity: Mobil dar olduğu için, gereksiz elemanları çıkarmaya zorlanırsın
  2. Content First: Essentials'ı belirlemek kolay
  3. Performance: Mobil'de optimize edilmiş ise, desktop'ta da hızlı
  4. SEO: Google, mobile-first index'lemesini yapıyor

Mobile-First Design Process

Adım 1: Mobil Wireframe (375px)

<!-- Mobil layout - single column -->
<header>
    <logo></logo>
    <hamburger-menu></hamburger-menu>
</header>

<main>
    <hero-section></hero-section>
    <feature-card></feature-card>
    <feature-card></feature-card>
    <feature-card></feature-card>
</main>

<footer></footer>

Önemli: Vertically stacked, no sidebars, full-width.

Adım 2: Tablet Wireframe (768px)

<!-- Tablet - iki kolona başla -->
<header>
    <logo></logo>
    <nav><!-- Hamburger + inline menu --></nav>
</header>

<main>
    <hero-section></hero-section>
    <feature-grid columns=2></feature-grid>
</main>

Adım 3: Desktop Wireframe (1920px)

<!-- Desktop - full feature sayfası -->
<header>
    <logo></logo>
    <nav full-menu></nav>
</header>

<main>
    <sidebar></sidebar>
    <hero-section></hero-section>
    <feature-grid columns=3></feature-grid>
</main>

<footer></footer>

Mobile-First CSS Architecture

Mobile-first CSS'de, base styles mobil, media queries tablet/desktop:

/* Mobile (default, breakpoint yok) */
body {
    font-size: 16px;
    padding: 16px;
    background: white;
}

.container {
    width: 100%;
    max-width: none;
}

.feature-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
}

.nav {
    display: none; /* Hamburger menu'ye hide */
}

.hamburger {
    display: block;
}

/* Tablet (768px+) */
@media (min-width: 768px) {
    body {
        font-size: 16px;
        padding: 24px;
    }

    .feature-grid {
        grid-template-columns: 1fr 1fr; /* 2 columns */
        gap: 24px;
    }

    .nav {
        display: flex;
    }

    .hamburger {
        display: none;
    }
}

/* Desktop (1024px+) */
@media (min-width: 1024px) {
    body {
        padding: 32px;
    }

    .container {
        max-width: 1200px;
        margin: 0 auto;
    }

    .feature-grid {
        grid-template-columns: 1fr 1fr 1fr; /* 3 columns */
        gap: 32px;
    }
}

Anahtar: Desktop media query'i max-width değil, min-width kullan.

Mobile-First Navigation

Mobile'da menu depolama zor. Çözümler:

1. Hamburger Menu (Slide-out)

<!-- HTML -->
<header>
    <button id="hamburger" aria-label="Menu">☰</button>
    <nav id="menu" class="hidden">
        <a href="/">Home</a>
        <a href="/about">About</a>
        <a href="/services">Services</a>
        <a href="/contact">Contact</a>
    </nav>
</header>

<!-- JavaScript -->
<script>
const hamburger = document.getElementById('hamburger');
const menu = document.getElementById('menu');

hamburger.addEventListener('click', () => {
    menu.classList.toggle('open');
    hamburger.setAttribute('aria-expanded', 
        menu.classList.contains('open'));
});
</script>

<!-- CSS -->
<style>
nav {
    position: fixed;
    top: 0;
    left: -300px;
    width: 300px;
    height: 100vh;
    background: #333;
    transition: left 0.3s ease;
    z-index: 1000;
}

nav.open {
    left: 0;
}

/* Desktop - sidebar yok, inline nav */
@media (min-width: 768px) {
    nav {
        position: static;
        width: auto;
        height: auto;
        background: none;
        display: flex;
        gap: 24px;
        left: auto;
    }

    nav.open {
        left: auto;
    }
}
</style>

2. Bottom Tab Navigation

Mobil uygulamalarda popüler. Footer'da 4-5 tab.

<!-- Bottom tabs (mobil) -->
<nav class="bottom-tabs">
    <a href="/" class="tab">🏠 Home</a>
    <a href="/search" class="tab">🔍 Search</a>
    <a href="/profile" class="tab">👤 Profile</a>
    <a href="/settings" class="tab">⚙️ Settings</a>
</nav>

<style>
.bottom-tabs {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    display: flex;
    justify-content: space-around;
    background: white;
    border-top: 1px solid #ddd;
}

.tab {
    flex: 1;
    padding: 12px;
    text-align: center;
}

/* Desktop - hidden */
@media (min-width: 768px) {
    .bottom-tabs {
        display: none;
    }
}
</style>

Mobile-First Typography

Mobil ekranda okuma zor. Optimizasyonlar:

/* Mobile Typography */
body {
    font-size: 16px; /* Min 16px (zoom trigger) */
    line-height: 1.6; /* Readable */
    font-weight: 400;
    -webkit-font-smoothing: antialiased;
}

h1 {
    font-size: 28px; /* Mobil başlığı */
    line-height: 1.2;
    font-weight: 700;
    margin-bottom: 16px;
}

h2 {
    font-size: 22px;
    line-height: 1.3;
    margin-bottom: 12px;
}

p {
    margin-bottom: 16px;
}

/* Tablet+ */
@media (min-width: 768px) {
    h1 { font-size: 36px; }
    h2 { font-size: 28px; }
}

/* Desktop+ */
@media (min-width: 1024px) {
    h1 { font-size: 48px; }
    h2 { font-size: 32px; }
}

Mobile-First Images

Responsive images, mobile-first:

<!-- Responsive image (mobile-first) -->
<picture>
    <!-- Mobile (default) -->
    <img src="image-small.jpg" alt="Description">
    
    <!-- Tablet (600px+) -->
    <source media="(min-width: 600px)" srcset="image-medium.jpg">
    
    <!-- Desktop (1024px+) -->
    <source media="(min-width: 1024px)" srcset="image-large.jpg">
</picture>

<!-- Modern approach: srcset -->
<img 
    srcset="
        image-small.jpg 480w,
        image-medium.jpg 1024w,
        image-large.jpg 1920w"
    sizes="
        (max-width: 480px) 100vw,
        (max-width: 1024px) 80vw,
        1200px"
    src="image-medium.jpg"
    alt="Description"
>

Mobile-First Layouts: Grid & Flexbox

Flex (Simple)

/* Mobile - single column */
.container {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* Tablet+ - two column */
@media (min-width: 768px) {
    .container {
        flex-direction: row;
        flex-wrap: wrap;
    }

    .item {
        flex: 1 1 calc(50% - 8px);
    }
}

/* Desktop+ - three column */
@media (min-width: 1024px) {
    .item {
        flex: 1 1 calc(33.333% - 11px);
    }
}

Grid (Advanced)

/* Mobile - single column */
.grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
}

/* Tablet+ - responsive columns */
@media (min-width: 768px) {
    .grid {
        grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
        gap: 24px;
    }
}

/* Desktop+ - fixed columns */
@media (min-width: 1024px) {
    .grid {
        grid-template-columns: repeat(3, 1fr);
        gap: 32px;
    }
}

Mobile-First Touch Interactions

Mobile'da tıklama konuşu çok. Tasarım:

/* Touch-friendly buttons & links */
button, a[role="button"] {
    min-width: 48px;
    min-height: 48px;
    padding: 12px 16px;
    font-size: 16px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: all 0.3s ease;
    -webkit-tap-highlight-color: transparent; /* iOS tap color */
}

button:active {
    background: darker;
    transform: scale(0.98); /* Visual feedback */
}

/* Links - underline on mobile, on hover desktop */
a {
    color: #0066CC;
    text-decoration: underline;
}

@media (min-width: 768px) {
    a {
        text-decoration: none;
    }

    a:hover {
        text-decoration: underline;
    }
}

Mobile-First Forms

Mobil formlar kısa ve basit:

<!-- Mobile-friendly form -->
<form>
    <div class="form-group">
        <label for="email">Email</label>
        <input 
            id="email" 
            type="email" 
            inputmode="email"
            placeholder="you@example.com"
            required>
    </div>

    <div class="form-group">
        <label for="phone">Phone</label>
        <input 
            id="phone" 
            type="tel" 
            inputmode="tel"
            placeholder="+90 (___) ___ __">
    </div>

    <button type="submit">Submit</button>
</form>

<!-- CSS -->
<style>
.form-group {
    margin-bottom: 16px;
}

label {
    display: block;
    margin-bottom: 8px;
    font-weight: 600;
}

input {
    width: 100%;
    padding: 12px;
    font-size: 16px;
    border: 1px solid #ddd;
    border-radius: 4px;
}

input:focus {
    outline: none;
    border-color: #0066CC;
    box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1);
}

/* Tablet+ - inline form */
@media (min-width: 768px) {
    .form-group {
        display: inline-block;
        width: calc(50% - 8px);
        margin-right: 16px;
    }
}
</style>

Mobile-First Performance

Mobile-first, otomatik olarak performance-optimized:

// Lazy load non-critical resources
if (window.innerWidth > 1024) {
    // Load desktop-only resources
    const script = document.createElement('script');
    script.src = 'desktop-features.js';
    document.body.appendChild(script);
}

// Intersection Observer for lazy load
const images = document.querySelectorAll('img[loading="lazy"]');
const imageObserver = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            entry.target.src = entry.target.dataset.src;
            imageObserver.unobserve(entry.target);
        }
    });
});
images.forEach(img => imageObserver.observe(img));

Mobile-First Testing

Tasarımı test et (mobile'dan desktop'a):

  1. Physical Mobile Devices:

    • iPhone 12/13/14 (iOS)
    • Samsung Galaxy (Android)
    • Test touch interactions
  2. DevTools (Chrome/Safari/Firefox):

    • Toggle Device Toolbar (Cmd+Shift+M)
    • Test breakpoint'leri
    • Check performance
  3. Real Device Testing:

    • BrowserStack
    • LambdaTest
    • Özel cihazlar

Mobile-First Checklist

  • [ ] Tasarımı mobil'de başlat
  • [ ] Base CSS mobil optimize
  • [ ] Media queries min-width kullan
  • [ ] Touch targets 48x48px+
  • [ ] Font size 16px+
  • [ ] Navigation hamburger veya bottom tabs
  • [ ] Forms minimal alanlar
  • [ ] Images responsive
  • [ ] Lazy loading implemented
  • [ ] Performance optimized (LCP < 2.5s)
  • [ ] Accessibility checked
  • [ ] Tested on real devices
  • [ ] No horizontal scroll
  • [ ] Gestures (swipe, pinch) handled
  • [ ] Loading states visible

Sonuç: Mobile-First = Future-Proof

Mobile-first tasarım:

  • Otomatik mobile optimization
  • Content-first approach
  • Better performance
  • Higher conversion (mobile users)
  • Future-proof (screen sizes değişebilir, ama principle aynı)

2026'da hala desktop-first yapıyorsan, pazarın 2/3'ünü kaybediyorsun.

Mobile-first web tasarımında yardımcı olabiliriz. İletişime geçin.

merhaba@kreativa.com.tr