{"id":37816,"date":"2026-01-16T07:40:43","date_gmt":"2026-01-16T04:40:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37816"},"modified":"2026-01-16T07:40:43","modified_gmt":"2026-01-16T04:40:43","slug":"vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/","title":{"rendered":"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131<\/h2>\n<h3>Giri\u015f: Duyarl\u0131 Tasar\u0131m\u0131n \u00d6nemi ve Vue.js Ekosistemi<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131lar\u0131n web sitelerine ve uygulamalar\u0131na eri\u015fmek i\u00e7in kulland\u0131klar\u0131 cihaz \u00e7e\u015fitlili\u011fi hi\u00e7 bu kadar fazla olmam\u0131\u015ft\u0131. Ak\u0131ll\u0131 telefonlardan tabletlere, diz\u00fcst\u00fc bilgisayarlardan ultra geni\u015f masa\u00fcst\u00fc ekranlara kadar her cihazda sorunsuz ve optimal bir kullan\u0131c\u0131 deneyimi sunmak, modern web geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. \u0130\u015fte bu noktada &#8220;duyarl\u0131 tasar\u0131m&#8221; (responsive design) kavram\u0131 devreye girer. Duyarl\u0131 tasar\u0131m, bir web sitesinin veya uygulaman\u0131n, kullan\u0131c\u0131n\u0131n ekran boyutu, \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc ve cihaz y\u00f6n\u00fc ne olursa olsun kendini otomatik olarak uyarlayabilmesi yetene\u011fini ifade eder. Bu, sadece estetik bir gereklilik de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 memnuniyeti, eri\u015filebilirlik, SEO performans\u0131 ve i\u015f hedeflerine ula\u015fma a\u00e7\u0131s\u0131ndan kritik bir fakt\u00f6rd\u00fcr.<\/p>\n<p>Vue.js, hafif yap\u0131s\u0131, esnekli\u011fi ve bile\u015fen tabanl\u0131 mimarisi sayesinde modern tek sayfa uygulamalar\u0131 (SPA) geli\u015ftirmek i\u00e7in pop\u00fcler bir JavaScript \u00e7er\u00e7evesidir. Vue.js ile g\u00fc\u00e7l\u00fc ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak kolay olsa da, bu aray\u00fczlerin farkl\u0131 ekran boyutlar\u0131nda nas\u0131l davranaca\u011f\u0131n\u0131 y\u00f6netmek, \u00f6zellikle karma\u015f\u0131k uygulamalarda, baz\u0131 zorluklar\u0131 beraberinde getirebilir. Geleneksel CSS medya sorgular\u0131, genel sayfa d\u00fczeni i\u00e7in harika olsa da, Vue bile\u015fenleri i\u00e7indeki dinamik davran\u0131\u015flar\u0131 veya bile\u015fenlerin \u00f6zelliklerini (props) ekran boyutuna g\u00f6re de\u011fi\u015ftirmeyi gerektiren senaryolarda yetersiz kalabilir. \u00d6rne\u011fin, mobil g\u00f6r\u00fcn\u00fcmde bir navigasyon men\u00fcs\u00fcn\u00fc hamburger men\u00fcye d\u00f6n\u00fc\u015ft\u00fcrmek, masa\u00fcst\u00fcnde ise tam bir men\u00fc olarak g\u00f6stermek veya bir bile\u015fenin belirli bir ekran boyutunda tamamen farkl\u0131 bir versiyonunu render etmek gibi durumlar, sadece CSS ile y\u00f6netilmesi zor veya imkans\u0131z olan lojik gerektirir.<\/p>\n<p>\u0130\u015fte bu noktada <code>vue-mq<\/code> gibi \u00f6zel Vue.js eklentileri devreye girer. <code>vue-mq<\/code>, Vue uygulamalar\u0131n\u0131za reaktif medya sorgular\u0131 entegre ederek, bile\u015fenlerinizin ekran boyutuna g\u00f6re dinamik olarak tepki vermesini sa\u011flayan g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcmd\u00fcr. Bu makalede, <code>vue-mq<\/code>&#8216;nun ne oldu\u011funu, nas\u0131l kuruldu\u011funu, temel ve ileri d\u00fczey kullan\u0131m senaryolar\u0131n\u0131, en iyi uygulamalar\u0131 ve alternatiflerini detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, Vue.js projelerinizde duyarl\u0131 tasar\u0131m\u0131 <code>vue-mq<\/code> ile nas\u0131l etkin bir \u015fekilde uygulayabilece\u011finizi ad\u0131m ad\u0131m g\u00f6stermektir.<\/p>\n<h3>Duyarl\u0131 Tasar\u0131m\u0131n Temelleri ve Vue.js Ba\u011flam\u0131nda Zorluklar\u0131<\/h3>\n<p>Duyarl\u0131 tasar\u0131m, genellikle a\u015fa\u011f\u0131daki temel prensiplere dayan\u0131r:<\/p>\n<p>*   <strong>Esnek Izgaralar (Fluid Grids):<\/strong> Sabit piksel de\u011ferleri yerine y\u00fczde veya di\u011fer g\u00f6receli birimler (vw, vh, rem, em) kullanarak d\u00fczenin ekran boyutuna g\u00f6re esnemesini veya k\u00fc\u00e7\u00fclmesini sa\u011flar. Flexbox ve CSS Grid, bu konuda modern ve g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r.<br \/>\n*   <strong>Esnek G\u00f6rseller ve Medya (Flexible Images and Media):<\/strong> G\u00f6rsellerin ve videolar\u0131n kapsay\u0131c\u0131lar\u0131na g\u00f6re boyutland\u0131r\u0131lmas\u0131n\u0131 ve ta\u015fmamas\u0131n\u0131 sa\u011flar (\u00f6rne\u011fin <code>max-width: 100%; height: auto;<\/code>).<br \/>\n*   <strong>Medya Sorgular\u0131 (Media Queries):<\/strong> Belirli ekran boyutlar\u0131na, \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklere, cihaz y\u00f6nlerine veya di\u011fer \u00f6zelliklere g\u00f6re farkl\u0131 CSS kurallar\u0131n\u0131n uygulanmas\u0131n\u0131 sa\u011flayan CSS \u00f6zellikleridir. \u00d6rne\u011fin, <code>min-width<\/code> veya <code>max-width<\/code> ile farkl\u0131 stiller tan\u0131mlanabilir.<br \/>\n*   <strong>Viewport Meta Etiketi:<\/strong> Mobil cihazlarda sayfan\u0131n do\u011fru bir \u015fekilde \u00f6l\u00e7eklenmesini ve g\u00f6r\u00fcnt\u00fclenmesini sa\u011flamak i\u00e7in HTML <code><head><\/code> etiketine eklenen kritik bir etikettir: <code><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><\/code>.<br \/>\n*   <strong>Mobil \u00d6ncelik (Mobile-First Approach):<\/strong> Tasar\u0131m s\u00fcrecine en k\u00fc\u00e7\u00fck ekran boyutundan ba\u015flayarak, daha sonra daha b\u00fcy\u00fck ekranlar i\u00e7in geli\u015ftirmeler yapma felsefesidir. Bu yakla\u015f\u0131m, performans ve kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan genellikle daha verimli sonu\u00e7lar verir.<\/p>\n<p>Vue.js gibi bile\u015fen tabanl\u0131 bir \u00e7er\u00e7evede geli\u015ftirme yaparken, bu temel prensipleri uygulamak genellikle CSS arac\u0131l\u0131\u011f\u0131yla m\u00fcmk\u00fcnd\u00fcr. Ancak, baz\u0131 senaryolarda sadece CSS medya sorgular\u0131 yetersiz kalabilir:<\/p>\n<p>*   <strong>Bile\u015fen Seviyesinde Lojik:<\/strong> Bir bile\u015fenin i\u00e7indeki veri veya davran\u0131\u015f\u0131n ekran boyutuna g\u00f6re de\u011fi\u015fmesi gerekti\u011finde (\u00f6rne\u011fin, bir veri tablosunun mobil g\u00f6r\u00fcn\u00fcmde liste olarak, masa\u00fcst\u00fcnde tablo olarak render edilmesi).<br \/>\n*   <strong>Dinamik Bile\u015fen De\u011fi\u015fimi:<\/strong> Belirli bir breakpoint&#8217;te tamamen farkl\u0131 bir bile\u015fenin g\u00f6sterilmesi veya gizlenmesi gerekti\u011finde.<br \/>\n*   <strong>Prop De\u011fi\u015fimi:<\/strong> Bir bile\u015fenin ald\u0131\u011f\u0131 \u00f6zelliklerin (props) ekran boyutuna g\u00f6re farkl\u0131 de\u011ferler almas\u0131 gerekti\u011finde (\u00f6rne\u011fin, bir <code>Slider<\/code> bile\u015feninin mobil g\u00f6r\u00fcn\u00fcmde 1, masa\u00fcst\u00fcnde 3 \u00f6\u011fe g\u00f6stermesi).<br \/>\n*   <strong>JavaScript Tabanl\u0131 Etkile\u015fimler:<\/strong> JavaScript ile tetiklenen animasyonlar\u0131n, olay dinleyicilerinin veya di\u011fer etkile\u015fimlerin ekran boyutuna g\u00f6re farkl\u0131la\u015fmas\u0131 gerekti\u011finde.<\/p>\n<p>Bu t\u00fcr senaryolarda, sadece CSS ile \u00e7\u00f6z\u00fcm \u00fcretmek, ya \u00e7ok karma\u015f\u0131k CSS kurallar\u0131na yol a\u00e7ar ya da JavaScript taraf\u0131nda <code>window.matchMedia<\/code> gibi taray\u0131c\u0131 API&#8217;lerini manuel olarak dinlemeyi gerektirir. Bu da kod tekrar\u0131na, bak\u0131m\u0131 zor bir yap\u0131ya ve performans sorunlar\u0131na yol a\u00e7abilir. \u0130\u015fte <code>vue-mq<\/code> tam da bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>Vue-mq Nedir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p><code>vue-mq<\/code>, Vue.js uygulamalar\u0131n\u0131za reaktif medya sorgular\u0131 entegre eden hafif ve esnek bir eklentidir. Temel amac\u0131, uygulaman\u0131z\u0131n mevcut ekran boyutunu tan\u0131mlad\u0131\u011f\u0131n\u0131z breakpoint&#8217;lere g\u00f6re izlemesini ve bu durumu Vue reaktivite sistemi arac\u0131l\u0131\u011f\u0131yla bile\u015fenlerinize sunmas\u0131n\u0131 sa\u011flamakt\u0131r. Bu sayede, JavaScript kodunuz i\u00e7inde veya do\u011frudan \u015fablonlar\u0131n\u0131zda mevcut breakpoint&#8217;e g\u00f6re ko\u015fullu render, stil veya davran\u0131\u015f de\u011fi\u015fiklikleri uygulayabilirsiniz.<\/p>\n<p><code>vue-mq<\/code>&#8216;nun \u00e7al\u0131\u015fma prensibi olduk\u00e7a basittir:<\/p>\n<p>1.  <strong>Breakpoint Tan\u0131mlamas\u0131:<\/strong> Uygulaman\u0131z\u0131n ba\u015flang\u0131c\u0131nda (genellikle <code>main.js<\/code> dosyas\u0131nda), uygulaman\u0131z\u0131n hangi ekran geni\u015fliklerini hangi &#8220;breakpoint&#8221; isimleriyle tan\u0131yaca\u011f\u0131n\u0131 belirlersiniz. \u00d6rne\u011fin, <code>mobile<\/code>, <code>tablet<\/code>, <code>desktop<\/code> gibi. Bu tan\u0131mlamalar, CSS medya sorgular\u0131ndaki <code>min-width<\/code> de\u011ferlerine benzer \u015fekilde \u00e7al\u0131\u015f\u0131r.<br \/>\n2.  <strong>Ekran Boyutu \u0130zleme:<\/strong> <code>vue-mq<\/code>, taray\u0131c\u0131n\u0131n <code>resize<\/code> olay\u0131n\u0131 dinleyerek mevcut ekran geni\u015fli\u011fini s\u00fcrekli izler.<br \/>\n3.  <strong>Aktif Breakpoint Belirleme:<\/strong> \u0130zlenen ekran geni\u015fli\u011finin, tan\u0131mlad\u0131\u011f\u0131n\u0131z breakpoint&#8217;lerden hangisine denk geldi\u011fini tespit eder. \u00d6rne\u011fin, ekran geni\u015fli\u011fi 768 piksel ise ve siz 768px&#8217;ten itibaren <code>tablet<\/code> breakpoint&#8217;ini tan\u0131mlad\u0131ysan\u0131z, <code>tablet<\/code> aktif breakpoint olur.<br \/>\n4.  <strong>Reaktif Durum Sa\u011flama:<\/strong> Tespit edilen aktif breakpoint&#8217;i Vue&#8217;nun reaktivite sistemi arac\u0131l\u0131\u011f\u0131yla uygulaman\u0131z\u0131n her yerine <code>$mq<\/code> global \u00f6zelli\u011fi veya <code><mq-layout><\/code> bile\u015feni arac\u0131l\u0131\u011f\u0131yla sunar. Bu sayede, aktif breakpoint de\u011fi\u015fti\u011finde, ilgili bile\u015fenler otomatik olarak g\u00fcncellenir.<\/p>\n<p>Bu mekanizma sayesinde, CSS medya sorgular\u0131 ile yapamad\u0131\u011f\u0131n\u0131z veya yapmakta zorland\u0131\u011f\u0131n\u0131z bir\u00e7ok dinamik duyarl\u0131 tasar\u0131m senaryosunu kolayca y\u00f6netebilirsiniz.<\/p>\n<h3>Vue-mq Kurulumu ve Temel Kullan\u0131m<\/h3>\n<p><code>vue-mq<\/code>&#8216;yu projenize dahil etmek olduk\u00e7a basittir.<\/p>\n<h4>1. Kurulum<\/h4>\n<p>\u00d6ncelikle, projenize <code>vue-mq<\/code> paketini npm veya yarn ile kurman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">npm install vue-mq\n<h2>veya<\/h2>\nyarn add vue-mq<\/code><\/pre>\n<h4>2. Plugin Kayd\u0131 ve Breakpoint Tan\u0131mlamas\u0131<\/h4>\n<p>Kurulumdan sonra, <code>vue-mq<\/code>&#8216;yu Vue uygulaman\u0131zda bir eklenti olarak kaydetmeniz ve uygulaman\u0131z\u0131n kullanaca\u011f\u0131 breakpoint&#8217;leri tan\u0131mlaman\u0131z gerekir. Bu i\u015flem genellikle <code>main.js<\/code> dosyas\u0131nda yap\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\/\/ main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport VueMq from 'vue-mq'; \/\/ vue-mq'yu import edin\n\nconst app = createApp(App);\n\napp.use(VueMq, {\n  breakpoints: {\n    mobile: 768, \/\/ 768px'e kadar mobil cihazlar\n    tablet: 1200, \/\/ 768px'ten 1200px'e kadar tabletler\n    desktop: Infinity, \/\/ 1200px ve \u00fczeri masa\u00fcst\u00fc cihazlar\n  },\n  defaultBreakpoint: 'desktop' \/\/ Varsay\u0131lan breakpoint (iste\u011fe ba\u011fl\u0131)\n});\n\napp.mount('#app');<\/code><\/pre>\n<p><strong><code>breakpoints<\/code> Nesnesi:<\/strong> Bu nesne, uygulaman\u0131z\u0131n farkl\u0131 ekran boyutlar\u0131n\u0131 nas\u0131l s\u0131n\u0131fland\u0131raca\u011f\u0131n\u0131 tan\u0131mlar. Anahtarlar (\u00f6rne\u011fin <code>mobile<\/code>, <code>tablet<\/code>, <code>desktop<\/code>) breakpoint&#8217;lerin isimleridir ve de\u011ferleri (\u00f6rne\u011fin <code>768<\/code>, <code>1200<\/code>) bu breakpoint&#8217;in ba\u015flad\u0131\u011f\u0131 minimum piksel geni\u015fli\u011fini (dahil) temsil eder. <code>Infinity<\/code> de\u011feri, o breakpoint&#8217;in bir \u00fcst s\u0131n\u0131r\u0131 olmad\u0131\u011f\u0131n\u0131 belirtir.<\/p>\n<p>Yukar\u0131daki \u00f6rnekte:<br \/>\n*   <code>mobile<\/code>: Ekran geni\u015fli\u011fi <code>0<\/code> ile <code>767px<\/code> aras\u0131. (\u00c7\u00fcnk\u00fc <code>tablet<\/code> 768&#8217;den ba\u015fl\u0131yor.)<br \/>\n*   <code>tablet<\/code>: Ekran geni\u015fli\u011fi <code>768px<\/code> ile <code>1199px<\/code> aras\u0131. (\u00c7\u00fcnk\u00fc <code>desktop<\/code> 1200&#8217;den ba\u015fl\u0131yor.)<br \/>\n*   <code>desktop<\/code>: Ekran geni\u015fli\u011fi <code>1200px<\/code> ve \u00fczeri.<\/p>\n<p><strong><code>defaultBreakpoint<\/code>:<\/strong> (\u0130ste\u011fe ba\u011fl\u0131) Bu ayar, sunucu taraf\u0131 olu\u015fturma (SSR) gibi durumlarda veya ba\u015flang\u0131\u00e7ta hen\u00fcz bir ekran boyutu tespit edilmemi\u015fken hangi breakpoint&#8217;in varsay\u0131lan olarak kabul edilece\u011fini belirtir.<\/p>\n<h3>Reaktif Breakpoint Durumlar\u0131na Eri\u015fim: $mq Global \u00d6zelli\u011fi<\/h3>\n<p><code>vue-mq<\/code>&#8216;yu kurduktan sonra, Vue bile\u015fenleriniz i\u00e7inde mevcut aktif breakpoint&#8217;e reaktif olarak eri\u015fmek i\u00e7in <code>$mq<\/code> global \u00f6zelli\u011fini kullanabilirsiniz. Bu \u00f6zellik, mevcut aktif breakpoint&#8217;in ad\u0131n\u0131 i\u00e7eren bir dize (string) d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>1. \u015eablon \u0130\u00e7inde Kullan\u0131m (Template Usage)<\/h4>\n<p>Do\u011frudan bile\u015fen \u015fablonunuzda <code>$mq<\/code>&#8216;yu kullanarak ko\u015fullu renderlama yapabilirsiniz:<\/p>\n<pre><code class=\"language-vue\"><!-- MyComponent.vue -->\n<template>\n  <div>\n    <h2 v-if=\"$mq === 'mobile'\">Mobil Ba\u015fl\u0131k<\/h2>\n    <h2 v-else-if=\"$mq === 'tablet'\">Tablet Ba\u015fl\u0131k<\/h2>\n    <h2 v-else>Masa\u00fcst\u00fc Ba\u015fl\u0131k<\/h2>\n\n    <p>\u015eu anki breakpoint: {{ $mq }}<\/p>\n\n    <button :class=\"{ 'btn-small': $mq === 'mobile', 'btn-large': $mq === 'desktop' }\">\n      Duyarl\u0131 Buton\n    <\/button>\n  <\/div>\n<\/template>\n\n<style scoped>\n.btn-small {\n  padding: 8px 12px;\n  font-size: 14px;\n}\n.btn-large {\n  padding: 15px 25px;\n  font-size: 18px;\n}\n<\/style><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>h2<\/code> ba\u015fl\u0131\u011f\u0131 ve butonun stilleri, <code>$mq<\/code> de\u011ferine g\u00f6re dinamik olarak de\u011fi\u015fir.<\/p>\n<h4>2. JavaScript Loji\u011fi \u0130\u00e7inde Kullan\u0131m (Script Usage)<\/h4>\n<p>Bile\u015feninizin <code><script><\/code> blo\u011funda, <code>computed<\/code> \u00f6zellikler, <code>methods<\/code> veya <code>watch<\/code> se\u00e7enekleri i\u00e7inde <code>$mq<\/code>'ya eri\u015ferek daha karma\u015f\u0131k lojikler olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-vue\"><!-- MyResponsiveTable.vue -->\n<template>\n  <div>\n    <h3>\u00dcr\u00fcn Listesi<\/h3>\n    <table v-if=\"isDesktop\">\n      <thead>\n        <tr>\n          <th>\u00dcr\u00fcn Ad\u0131<\/th>\n          <th>Fiyat<\/th>\n          <th>Stok<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody>\n        <tr v-for=\"product in products\" :key=\"product.id\">\n          <td>{{ product.name }}<\/td>\n          <td>{{ product.price }}<\/td>\n          <td>{{ product.stock }}<\/td>\n        <\/tr>\n      <\/tbody>\n    <\/table>\n\n    <ul v-else>\n      <li v-for=\"product in products\" :key=\"product.id\">\n        <strong>{{ product.name }}<\/strong> - {{ product.price }} (Stok: {{ product.stock }})\n      <\/li>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  data() {\n    return {\n      products: [\n        { id: 1, name: 'Laptop', price: '1200$', stock: 5 },\n        { id: 2, name: 'Mouse', price: '25$', stock: 20 },\n        { id: 3, name: 'Keyboard', price: '75$', stock: 10 },\n      ]\n    };\n  },\n  computed: {\n    isMobile() {\n      return this.$mq === 'mobile';\n    },\n    isTablet() {\n      return this.$mq === 'tablet';\n    },\n    isDesktop() {\n      return this.$mq === 'desktop';\n    },\n    \/\/ Farkl\u0131 bir prop de\u011feri d\u00f6nd\u00fcrmek i\u00e7in\n    sliderItemsToShow() {\n      if (this.isMobile) {\n        return 1;\n      } else if (this.isTablet) {\n        return 2;\n      } else {\n        return 4;\n      }\n    }\n  },\n  watch: {\n    '$mq'(newMq, oldMq) {\n      console.log(<code>Breakpoint de\u011fi\u015fti: ${oldMq} -> ${newMq}<\/code>);\n      \/\/ Breakpoint de\u011fi\u015fimine \u00f6zel bir aksiyon alabilirsiniz\n      if (newMq === 'mobile') {\n        \/\/ Mobil g\u00f6r\u00fcn\u00fcmde \u00f6zel bir JS fonksiyonunu tetikle\n      }\n    }\n  }\n};\n<\/script><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>computed<\/code> \u00f6zellikler sayesinde <code>$mq<\/code> de\u011ferini daha okunabilir boolean de\u011fi\u015fkenlere d\u00f6n\u00fc\u015ft\u00fcrebilir ve bu de\u011fi\u015fkenleri \u015fablonunuzda kullanabilirsiniz. Ayr\u0131ca, <code>watch<\/code> se\u00e7ene\u011fini kullanarak breakpoint de\u011fi\u015fimlerini dinleyebilir ve bu de\u011fi\u015fimlere \u00f6zel JavaScript loji\u011fi \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<h3><mq-layout> Bile\u015feni ile Ko\u015fullu \u0130\u00e7erik G\u00f6sterimi<\/h3>\n<p><code>vue-mq<\/code>, <code>$mq<\/code> global \u00f6zelli\u011finin yan\u0131 s\u0131ra, daha deklaratif ve okunabilir bir yol sunan <code><mq-layout><\/code> \u00f6zel bir bile\u015fen de sa\u011flar. Bu bile\u015fen, belirli breakpoint'ler veya breakpoint aral\u0131klar\u0131 i\u00e7in i\u00e7eri\u011fi ko\u015fullu olarak render etmenizi sa\u011flar.<\/p>\n<p><code><mq-layout><\/code> bile\u015feninin en temel prop'u <code>mq<\/code>'dur. Bu prop'a bir dize, bir dizi veya bir nesne ge\u00e7irerek hangi breakpoint'lerde i\u00e7eri\u011fin g\u00f6sterilece\u011fini belirleyebilirsiniz.<\/p>\n<h4>1. Tek Bir Breakpoint \u0130\u00e7in Kullan\u0131m<\/h4>\n<p>Tek bir breakpoint i\u00e7in i\u00e7eri\u011fi g\u00f6stermek istedi\u011finizde <code>mq<\/code> prop'una breakpoint ad\u0131n\u0131 bir dize olarak verirsiniz:<\/p>\n<pre><code class=\"language-vue\"><!-- MyHeader.vue -->\n<template>\n  <header>\n    <mq-layout mq=\"desktop\">\n      <nav class=\"desktop-nav\">\n        <a href=\"#\">Anasayfa<\/a>\n        <a href=\"#\">Hakk\u0131m\u0131zda<\/a>\n        <a href=\"#\">\u0130leti\u015fim<\/a>\n      <\/nav>\n    <\/mq-layout>\n\n    <mq-layout mq=\"mobile\">\n      <button class=\"hamburger-menu\">\u2630<\/button>\n      <nav class=\"mobile-nav\">\n        <!-- Mobil men\u00fc i\u00e7eri\u011fi -->\n      <\/nav>\n    <\/mq-layout>\n  <\/header>\n<\/template><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>desktop<\/code> breakpoint'inde <code>desktop-nav<\/code> navigasyonu, <code>mobile<\/code> breakpoint'inde ise <code>hamburger-menu<\/code> butonu ve <code>mobile-nav<\/code> g\u00f6sterilir.<\/p>\n<h4>2. Birden Fazla Breakpoint \u0130\u00e7in Kullan\u0131m<\/h4>\n<p>\u0130\u00e7eri\u011fi birden fazla breakpoint'te g\u00f6stermek isterseniz, <code>mq<\/code> prop'una breakpoint adlar\u0131n\u0131 i\u00e7eren bir dizi ge\u00e7irebilirsiniz:<\/p>\n<pre><code class=\"language-vue\"><template>\n  <div>\n    <mq-layout :mq=\"['mobile', 'tablet']\">\n      <p>Bu i\u00e7erik mobil ve tablet cihazlarda g\u00f6r\u00fcn\u00fcr.<\/p>\n    <\/mq-layout>\n\n    <mq-layout :mq=\"['desktop']\">\n      <p>Bu i\u00e7erik sadece masa\u00fcst\u00fc cihazlarda g\u00f6r\u00fcn\u00fcr.<\/p>\n    <\/mq-layout>\n  <\/div>\n<\/template><\/code><\/pre>\n<h4>3. Breakpoint Aral\u0131\u011f\u0131 \u0130\u00e7in Kullan\u0131m<\/h4>\n<p>Belirli bir aral\u0131ktaki t\u00fcm breakpoint'ler i\u00e7in i\u00e7eri\u011fi g\u00f6stermek isterseniz, <code>mq<\/code> prop'una ba\u015flang\u0131\u00e7 ve biti\u015f breakpoint'lerini i\u00e7eren bir nesne ge\u00e7irebilirsiniz. Bu nesnenin <code>from<\/code> ve <code>to<\/code> anahtarlar\u0131 olmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-vue\"><template>\n  <div>\n    <mq-layout :mq=\"{ from: 'mobile', to: 'desktop' }\">\n      <p>Bu i\u00e7erik mobil, tablet ve masa\u00fcst\u00fc dahil t\u00fcm breakpoint'lerde g\u00f6r\u00fcn\u00fcr.<\/p>\n    <\/mq-layout>\n\n    <mq-layout :mq=\"{ from: 'tablet' }\">\n      <p>Bu i\u00e7erik tablet ve masa\u00fcst\u00fc cihazlarda g\u00f6r\u00fcn\u00fcr.<\/p>\n    <\/mq-layout>\n\n    <mq-layout :mq=\"{ to: 'tablet' }\">\n      <p>Bu i\u00e7erik mobil ve tablet cihazlarda g\u00f6r\u00fcn\u00fcr.<\/p>\n    <\/mq-layout>\n  <\/div>\n<\/template><\/code><\/pre>\n<p>Bu kullan\u0131m, \u00f6zellikle karma\u015f\u0131k breakpoint lojiklerini y\u00f6netirken kodunuzu daha temiz ve okunabilir hale getirir. <code>from<\/code> ve <code>to<\/code> de\u011ferleri tan\u0131mlad\u0131\u011f\u0131n\u0131z breakpoint s\u0131ras\u0131na g\u00f6re \u00e7al\u0131\u015f\u0131r.<\/p>\n<h3>Geli\u015fmi\u015f Kullan\u0131m Senaryolar\u0131<\/h3>\n<p><code>vue-mq<\/code>, temel kullan\u0131mlar\u0131n\u0131n \u00f6tesinde, daha karma\u015f\u0131k duyarl\u0131 tasar\u0131m ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in \u00e7e\u015fitli geli\u015fmi\u015f senaryolarda da kullan\u0131labilir.<\/p>\n<h4>1. \u00d6zel Breakpoint Loji\u011fi Olu\u015fturma<\/h4>\n<p>Bazen <code>$mq<\/code>'nun do\u011frudan de\u011feri yerine, \u00f6zel bir lojikle belirlenen bir breakpoint durumu isteyebilirsiniz. \u00d6rne\u011fin, belirli bir breakpoint'ten <em>daha b\u00fcy\u00fck<\/em> veya <em>daha k\u00fc\u00e7\u00fck<\/em> olup olmad\u0131\u011f\u0131n\u0131 kontrol eden bir computed property olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-vue\"><template>\n  <div>\n    <p v-if=\"isSmallScreen\">K\u00fc\u00e7\u00fck ekranlar i\u00e7in optimize edilmi\u015f i\u00e7erik.<\/p>\n    <p v-else>Daha b\u00fcy\u00fck ekranlar i\u00e7in optimize edilmi\u015f i\u00e7erik.<\/p>\n\n    <MyComponent :variant=\"componentVariant\" \/>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  computed: {\n    \/\/ Mobil veya tablet ekranlarda true d\u00f6ner\n    isSmallScreen() {\n      return ['mobile', 'tablet'].includes(this.$mq);\n    },\n    \/\/ Belirli bir breakpoint'e e\u015fit veya daha b\u00fcy\u00fck olma kontrol\u00fc\n    isGreaterThanOrEqualTo(breakpointName) {\n      const breakpoints = Object.keys(this.$mq.breakpoints);\n      const currentIndex = breakpoints.indexOf(this.$mq);\n      const targetIndex = breakpoints.indexOf(breakpointName);\n      return currentIndex >= targetIndex;\n    },\n    \/\/ Bile\u015fen varyant\u0131n\u0131 dinamik olarak belirleme\n    componentVariant() {\n      if (this.isSmallScreen) {\n        return 'compact';\n      } else {\n        return 'full';\n      }\n    }\n  }\n};\n<\/script><\/code><\/pre>\n<p>Bu \u015fekilde, <code>$mq<\/code>'yu temel alarak kendi i\u015f mant\u0131\u011f\u0131n\u0131za uygun \u00f6zel reaktif durumlar t\u00fcretebilirsiniz.<\/p>\n<h4>2. Vuex ile Entegrasyon<\/h4>\n<p>Uygulaman\u0131z\u0131n global durum y\u00f6netimi i\u00e7in Vuex kullan\u0131yorsan\u0131z, mevcut breakpoint bilgisini Vuex store'unda tutmak isteyebilirsiniz. Bu, \u00f6zellikle farkl\u0131 mod\u00fcllerin veya bile\u015fenlerin ayn\u0131 breakpoint bilgisine merkezi bir yerden eri\u015fmesi gerekti\u011finde faydal\u0131 olabilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ store\/index.js\nimport { createStore } from 'vuex';\n\nexport default createStore({\n  state: {\n    currentBreakpoint: 'desktop', \/\/ Varsay\u0131lan de\u011fer\n  },\n  mutations: {\n    SET_BREAKPOINT(state, breakpoint) {\n      state.currentBreakpoint = breakpoint;\n    },\n  },\n  getters: {\n    isMobile: (state) => state.currentBreakpoint === 'mobile',\n    isTablet: (state) => state.currentBreakpoint === 'tablet',\n    isDesktop: (state) => state.currentBreakpoint === 'desktop',\n  },\n  actions: {\n    updateBreakpoint({ commit }, breakpoint) {\n      commit('SET_BREAKPOINT', breakpoint);\n    },\n  },\n});\n\n\/\/ main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport VueMq from 'vue-mq';\nimport store from '.\/store'; \/\/ Vuex store'unuzu import edin\n\nconst app = createApp(App);\n\napp.use(VueMq, {\n  breakpoints: {\n    mobile: 768,\n    tablet: 1200,\n    desktop: Infinity,\n  },\n  defaultBreakpoint: 'desktop'\n});\n\n\/\/ Vue-mq'nun mevcut breakpoint'ini Vuex'e senkronize etme\napp.mixin({\n  watch: {\n    '$mq'(newMq) {\n      this.$store.dispatch('updateBreakpoint', newMq);\n    }\n  },\n  created() {\n    \/\/ Uygulama y\u00fcklendi\u011finde mevcut breakpoint'i Vuex'e aktar\n    if (this.$mq) {\n      this.$store.dispatch('updateBreakpoint', this.$mq);\n    }\n  }\n});\n\napp.use(store); \/\/ Vuex'i uygulamaya ekleyin\napp.mount('#app');<\/code><\/pre>\n<p>Art\u0131k bile\u015fenlerinizde <code>this.$store.getters.isMobile<\/code> gibi ifadelerle breakpoint durumuna eri\u015febilirsiniz. Bu, daha b\u00fcy\u00fck uygulamalarda durum y\u00f6netimini merkezile\u015ftirmek i\u00e7in iyi bir stratejidir.<\/p>\n<h4>3. Sunucu Tarafl\u0131 Olu\u015fturma (SSR) ile Uyumluluk<\/h4>\n<p><code>vue-mq<\/code>, sunucu taraf\u0131 olu\u015fturma (SSR) ile de uyumludur. Ancak, SSR ortam\u0131nda <code>window<\/code> nesnesi mevcut olmad\u0131\u011f\u0131 i\u00e7in, ba\u015flang\u0131\u00e7ta bir ekran boyutu belirlenemez. Bu nedenle, <code>defaultBreakpoint<\/code> ayar\u0131n\u0131 kullanmak \u00f6nemlidir. Bu ayar, sunucuda olu\u015fturulan HTML'nin ba\u015flang\u0131\u00e7ta hangi breakpoint'e g\u00f6re davranaca\u011f\u0131n\u0131 belirler. Daha sonra istemci taraf\u0131nda (browser) JavaScript y\u00fcklendi\u011finde, <code>vue-mq<\/code> ger\u00e7ek ekran boyutunu alg\u0131lar ve bile\u015fenleri buna g\u00f6re g\u00fcnceller.<\/p>\n<p>SSR ile kullan\u0131rken, <code>defaultBreakpoint<\/code>'in iyi d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f bir de\u011fer olmas\u0131 \u00f6nemlidir. Genellikle, en yayg\u0131n veya en temel g\u00f6r\u00fcn\u00fcm\u00fc temsil eden bir breakpoint (\u00f6rne\u011fin <code>desktop<\/code> veya <code>mobile<\/code>) se\u00e7ilir.<\/p>\n<h3>Vue-mq Alternatifleri ve Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>Vue.js'te duyarl\u0131 tasar\u0131m uygulamak i\u00e7in <code>vue-mq<\/code> d\u0131\u015f\u0131nda da \u00e7e\u015fitli yakla\u015f\u0131mlar ve ara\u00e7lar mevcuttur:<\/p>\n<p>*   <strong>Saf CSS Medya Sorgular\u0131:<\/strong> En temel ve en performansl\u0131 y\u00f6ntemdir. Genel d\u00fczen ve stil de\u011fi\u015fiklikleri i\u00e7in idealdir. Ancak, JavaScript loji\u011fi veya bile\u015fen prop'lar\u0131n\u0131 de\u011fi\u015ftirmek gerekti\u011finde yetersiz kal\u0131r.<br \/>\n*   <strong><code>window.matchMedia<\/code> API'si:<\/strong> Taray\u0131c\u0131n\u0131n yerle\u015fik bir API'sidir ve JavaScript i\u00e7inde medya sorgular\u0131n\u0131 dinlemenizi sa\u011flar. <code>vue-mq<\/code> gibi eklentiler genellikle bu API'yi temel al\u0131r. Ancak, bu API'yi do\u011frudan kullanmak, her bile\u015fende veya her ihtiya\u00e7 duyulan yerde manuel olarak olay dinleyicileri eklemeyi ve temizlemeyi gerektirir ki bu da kod tekrar\u0131na ve karma\u015f\u0131kl\u0131\u011fa yol a\u00e7ar. <code>vue-mq<\/code>, bu karma\u015f\u0131kl\u0131\u011f\u0131 soyutlar ve reaktif bir aray\u00fcz sunar.<br \/>\n*   <strong>Di\u011fer Vue Breakpoint Eklentileri:<\/strong> <code>vue-screen-size<\/code>, <code>vue-breakpoint-component<\/code> gibi ba\u015fka eklentiler de mevcuttur. \u00c7o\u011fu benzer bir i\u015flevsellik sunar. <code>vue-mq<\/code>, \u00f6zellikle <code>$mq<\/code> global \u00f6zelli\u011fi ve <code><mq-layout><\/code> bile\u015feni ile hem esnek hem de deklaratif bir kullan\u0131m sunmas\u0131yla \u00f6ne \u00e7\u0131kar. Ayr\u0131ca aktif olarak bak\u0131m\u0131 yap\u0131lan ve geni\u015f bir kullan\u0131c\u0131 taban\u0131na sahip bir k\u00fct\u00fcphanedir.<\/p>\n<p><strong>Neden <code>vue-mq<\/code> tercih edilmeli?<\/strong><\/p>\n<p>*   <strong>Reaktivite:<\/strong> Vue'nun reaktivite sistemine tam entegrasyonu sayesinde breakpoint de\u011fi\u015fiklikleri otomatik olarak bile\u015fenlerinizi g\u00fcnceller.<br \/>\n*   <strong>Basit Kurulum ve Kullan\u0131m:<\/strong> Breakpoint tan\u0131mlamas\u0131 kolayd\u0131r ve <code>$mq<\/code> veya <code><mq-layout><\/code> ile eri\u015fim sezgiseldir.<br \/>\n*   <strong>Hem JavaScript Hem \u015eablon Deste\u011fi:<\/strong> Hem \u015fablon i\u00e7inde ko\u015fullu renderlama hem de JavaScript loji\u011fi i\u00e7inde dinamik davran\u0131\u015flar i\u00e7in esneklik sunar.<br \/>\n*   <strong>Deklaratif <code><mq-layout><\/code> Bile\u015feni:<\/strong> \u0130\u00e7eri\u011fi belirli breakpoint'lerde g\u00f6stermek i\u00e7in okunabilir ve temiz bir yol sa\u011flar.<br \/>\n*   <strong>Performans:<\/strong> Dahili olarak <code>debounce<\/code> mekanizmalar\u0131 kullanarak <code>resize<\/code> olaylar\u0131n\u0131 optimize eder, b\u00f6ylece gereksiz yeniden renderlamalar\u0131 \u00f6nler.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p><code>vue-mq<\/code> ile duyarl\u0131 tasar\u0131m uygularken a\u015fa\u011f\u0131daki en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak, daha s\u00fcrd\u00fcr\u00fclebilir ve performansl\u0131 bir uygulama geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r:<\/p>\n<p>*   <strong>Mobil \u00d6ncelik Yakla\u015f\u0131m\u0131:<\/strong> Tasar\u0131m ve geli\u015ftirme s\u00fcrecine her zaman en k\u00fc\u00e7\u00fck ekran boyutundan ba\u015flay\u0131n. Bu, genellikle daha iyi performans ve daha odakl\u0131 bir kullan\u0131c\u0131 deneyimi sa\u011flar. <code>vue-mq<\/code> breakpoint'lerinizi mobil-\u00f6ncelikli tan\u0131mlayarak (k\u00fc\u00e7\u00fckten b\u00fcy\u00fc\u011fe) bu yakla\u015f\u0131m\u0131 destekleyebilirsiniz.<br \/>\n*   <strong>Anlaml\u0131 Breakpoint \u0130simleri:<\/strong> Breakpoint'lerinize <code>xs<\/code>, <code>sm<\/code>, <code>md<\/code>, <code>lg<\/code> gibi genel isimler yerine, <code>mobile<\/code>, <code>tablet<\/code>, <code>desktop<\/code> gibi daha a\u00e7\u0131klay\u0131c\u0131 ve anlaml\u0131 isimler verin. Bu, kodunuzu daha okunabilir hale getirir.<br \/>\n*   <strong>Tutarl\u0131 Breakpoint Tan\u0131mlamalar\u0131:<\/strong> Uygulaman\u0131zdaki t\u00fcm breakpoint'leri merkezi olarak <code>main.js<\/code> i\u00e7inde tan\u0131mlay\u0131n ve CSS medya sorgular\u0131n\u0131zla uyumlu oldu\u011fundan emin olun. Bu, tutars\u0131z davran\u0131\u015flar\u0131 \u00f6nler.<br \/>\n*   <strong>Gereksiz Renderlamadan Ka\u00e7\u0131nma:<\/strong> <code>v-if<\/code> veya <code><mq-layout><\/code> kullan\u0131rken, belirli bir breakpoint'te g\u00f6r\u00fcnmeyecek i\u00e7eri\u011fin DOM'a hi\u00e7 eklenmemesini sa\u011flay\u0131n. Bu, performans a\u00e7\u0131s\u0131ndan <code>v-show<\/code> kullanmaktan daha iyidir, \u00e7\u00fcnk\u00fc <code>v-show<\/code> i\u00e7eri\u011fi gizlese de DOM'da tutmaya devam eder.<br \/>\n*   <strong>Performans Testleri:<\/strong> Uygulaman\u0131z\u0131 farkl\u0131 cihazlarda ve taray\u0131c\u0131larda test edin. \u00d6zellikle mobil cihazlarda y\u00fckleme s\u00fcrelerini ve etkile\u015fim h\u0131z\u0131n\u0131 kontrol edin. <code>vue-mq<\/code> kendisi optimize edilmi\u015f olsa da, a\u015f\u0131r\u0131 karma\u015f\u0131k bile\u015fen lojikleri performans\u0131 etkileyebilir.<br \/>\n*   <strong>Eri\u015filebilirlik (Accessibility):<\/strong> Duyarl\u0131 tasar\u0131m\u0131n eri\u015filebilirli\u011fi engellemedi\u011finden emin olun. \u00d6rne\u011fin, klavye navigasyonu veya ekran okuyucular i\u00e7in \u00f6nemli olan \u00f6\u011felerin farkl\u0131 ekran boyutlar\u0131nda hala eri\u015filebilir ve anlaml\u0131 oldu\u011fundan emin olun.<br \/>\n*   <strong>CSS ile JavaScript'i Birle\u015ftirme:<\/strong> Her \u015feyi JavaScript ile yapmaya \u00e7al\u0131\u015fmay\u0131n. Genel d\u00fczen ve basit stil de\u011fi\u015fiklikleri i\u00e7in CSS medya sorgular\u0131n\u0131 kullanmaya devam edin. <code>vue-mq<\/code>'yu, CSS ile \u00e7\u00f6z\u00fclemeyen veya JavaScript loji\u011fi gerektiren durumlar i\u00e7in bir tamamlay\u0131c\u0131 olarak d\u00fc\u015f\u00fcn\u00fcn.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Vue.js ile duyarl\u0131 tasar\u0131m uygulamak, modern web geli\u015ftirmenin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Geleneksel CSS medya sorgular\u0131 bir\u00e7ok temel ihtiyac\u0131 kar\u015f\u0131larken, Vue bile\u015fenleri i\u00e7inde dinamik davran\u0131\u015flar\u0131, ko\u015fullu renderlamay\u0131 ve prop de\u011fi\u015fikliklerini y\u00f6netmek i\u00e7in <code>vue-mq<\/code> gibi \u00f6zel ara\u00e7lar b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<p>Bu makalede inceledi\u011fimiz gibi, <code>vue-mq<\/code> basit kurulumu, <code>$mq<\/code> global \u00f6zelli\u011fi ve deklaratif <code><mq-layout><\/code> bile\u015feni sayesinde Vue.js uygulamalar\u0131n\u0131zda reaktif breakpoint y\u00f6netimini son derece kolay ve verimli hale getirir. Mobil-\u00f6ncelikli yakla\u015f\u0131mlar\u0131 desteklemesi, Vue'nun reaktivite sistemiyle tam entegrasyonu ve performans optimizasyonlar\u0131 sayesinde, geli\u015ftiricilere g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p><code>vue-mq<\/code>'yu projelerinize entegre ederek, kullan\u0131c\u0131lar\u0131n\u0131za cihazlar\u0131 ne olursa olsun tutarl\u0131, eri\u015filebilir ve keyifli bir deneyim sunarken, geli\u015ftirme s\u00fcrecinizi de \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirebilirsiniz. Unutmay\u0131n, iyi bir duyarl\u0131 tasar\u0131m sadece uygulaman\u0131z\u0131n g\u00f6r\u00fcn\u00fc\u015f\u00fcn\u00fc de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimini ve genel ba\u015far\u0131s\u0131n\u0131 da do\u011frudan etkiler.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131\nGiri\u015f: Duyarl\u0131 Tasar\u0131m\u0131n \u00d6nemi ve Vue.js Ekosistemi\nG\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kull","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1402],"tags":[],"class_list":{"0":"post-37816","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-vue","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Vue.js&#039;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js&#039;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131\" \/>\n<meta property=\"og:description\" content=\"Vue.js&#039;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 Giri\u015f: Duyarl\u0131 Tasar\u0131m\u0131n \u00d6nemi ve Vue.js Ekosistemi G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kull\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-16T04:40:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131\",\"datePublished\":\"2026-01-16T04:40:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\"},\"wordCount\":2696,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Vue\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\",\"name\":\"Vue.js'te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-16T04:40:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vue.js'te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js'te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131","og_description":"Vue.js'te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 Giri\u015f: Duyarl\u0131 Tasar\u0131m\u0131n \u00d6nemi ve Vue.js Ekosistemi G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kull","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-16T04:40:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131","datePublished":"2026-01-16T04:40:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/"},"wordCount":2696,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Vue"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/","name":"Vue.js'te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-16T04:40:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-vue-mq-ile-duyarli-tasarim-uygulamasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js&#8217;te vue-mq ile Duyarl\u0131 Tasar\u0131m Uygulamas\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37816"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37816\/revisions"}],"predecessor-version":[{"id":37817,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37816\/revisions\/37817"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}