Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cards overlapping when responsive #17

Open
AndreasBuc opened this issue Feb 24, 2024 · 4 comments
Open

Cards overlapping when responsive #17

AndreasBuc opened this issue Feb 24, 2024 · 4 comments

Comments

@AndreasBuc
Copy link

Hi xhlife,
first off all, thanks for this project! <3

I have experienced an issue with the responsive feature.

Think of a layout with 3 x 3 cards.
While shrinking, the grid is responsive, but not collapsing to a 9x1 but to a 3x1 grid.
So the cards of one row are overlapping.

Does that happen others as well?
"vue3-grid-layout-next": "^1.0.6",

Thanks again!

collapsing

@xhlife
Copy link
Owner

xhlife commented Feb 26, 2024

I failed to reproduce this. could you show me your code?

@AndreasBuc
Copy link
Author

I tried again with a brand new project (vue-create) and copied the example:

<template>
  <div style="width: 100%; height: 2000px bg-white">
    <div style="width: 100%; margin-top: 10px; height: 100%">
      <grid-layout
        :layout.sync="layout"
        :col-num="12"
        :row-height="30"
        :is-draggable="draggable"
        :is-resizable="resizable"
        :responsive="responsive"
        :vertical-compact="true"
        :use-css-transforms="true">
        <grid-item
          v-for="item in layout"
          :static="item.static"
          :x="item.x"
          :y="item.y"
          :w="item.w"
          :h="item.h"
          :i="item.i">
          <span class="text">{{ item.i }}</span>
        </grid-item>
      </grid-layout>
    </div>
  </div>
</template>

<script>
  import { GridLayout, GridItem } from 'vue3-grid-layout';

  export default {
    components: {
      GridLayout,
      GridItem,
    },
    data() {
      return {
        layout: [
          { x: 0, y: 0, w: 2, h: 2, i: '0' },
          { x: 2, y: 0, w: 2, h: 4, i: '1' },
          { x: 4, y: 0, w: 2, h: 5, i: '2' },
          { x: 6, y: 0, w: 2, h: 3, i: '3' },
          { x: 8, y: 0, w: 2, h: 3, i: '4' },
          { x: 10, y: 0, w: 2, h: 3, i: '5' },
          { x: 0, y: 5, w: 2, h: 5, i: '6' },
          { x: 2, y: 5, w: 2, h: 5, i: '7' },
          { x: 4, y: 5, w: 2, h: 5, i: '8' },
          { x: 6, y: 4, w: 2, h: 4, i: '9' },
          { x: 8, y: 4, w: 2, h: 4, i: '10' },
          { x: 10, y: 4, w: 2, h: 4, i: '11' },
          { x: 0, y: 10, w: 2, h: 5, i: '12' },
          { x: 2, y: 10, w: 2, h: 5, i: '13' },
          { x: 4, y: 8, w: 2, h: 4, i: '14' },
          { x: 6, y: 8, w: 2, h: 4, i: '15' },
          { x: 8, y: 10, w: 2, h: 5, i: '16' },
          { x: 10, y: 4, w: 2, h: 2, i: '17' },
          { x: 0, y: 9, w: 2, h: 3, i: '18' },
          { x: 2, y: 6, w: 2, h: 2, i: '19' },
        ],
        draggable: true,
        resizable: true,
        responsive: true,
        index: 0,
      };
    },
    methods: {},
  };
</script>

<style scoped>
  .vue-grid-layout {
    background: #eee;
  }

  .vue-grid-item:not(.vue-grid-placeholder) {
    background: #ccc;
    border: 1px solid black;
  }

  .vue-grid-item .resizing {
    opacity: 0.9;
  }

  .vue-grid-item .static {
    background: #cce;
  }

  .vue-grid-item .text {
    font-size: 24px;
    text-align: center;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
    height: 100%;
    width: 100%;
  }

  .vue-grid-item .no-drag {
    height: 100%;
    width: 100%;
  }

  .vue-grid-item .minMax {
    font-size: 12px;
  }

  .vue-grid-item .add {
    cursor: pointer;
  }

  .vue-draggable-handle {
    position: absolute;
    width: 20px;
    height: 20px;
    top: 0;
    left: 0;
    background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><circle cx='5' cy='5' r='5' fill='#999999'/></svg>")
      no-repeat;
    background-position: bottom right;
    padding: 0 8px 8px 0;
    background-repeat: no-repeat;
    background-origin: content-box;
    box-sizing: border-box;
    cursor: pointer;
  }

  .layoutJSON {
    background: #ddd;
    border: 1px solid black;
    margin-top: 10px;
    padding: 10px;
  }

  .columns {
    -moz-columns: 120px;
    -webkit-columns: 120px;
    columns: 120px;
  }
</style>

and packge.json

{
  "name": "tets",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "run-p type-check \"build-only {@}\" --",
    "preview": "vite preview",
    "build-only": "vite build",
    "type-check": "vue-tsc --build --force"
  },
  "dependencies": {
    "vue": "^3.4.15",
    "vue3-grid-layout": "^1.0.0"
  },
  "devDependencies": {
    "@tsconfig/node20": "^20.1.2",
    "@types/node": "^20.11.10",
    "@vitejs/plugin-vue": "^5.0.3",
    "@vue/tsconfig": "^0.5.1",
    "npm-run-all2": "^6.1.1",
    "typescript": "~5.3.0",
    "vite": "^5.0.11",
    "vue-tsc": "^1.8.27"
  }
}

Best regards
Andreas

@xhlife
Copy link
Owner

xhlife commented Feb 28, 2024

'.sync' modifier on 'v-bind' directive is deprecated. Use 'v-model:layout' instead. The use of ": layout" can also lead to this issue, so it is necessary to use "v-model: layout". I hope this can help you

@AndreasBuc
Copy link
Author

Hey, thanks a lot, that was just the case :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants