Code Monkey home page Code Monkey logo

vue-svg-flexbox's Introduction

vue-svg-flexbox

Build Status NPM Download NPM Version NPM License PRs Welcome Automated Release Notes by gren

A Vue-based Flexbox layout container for SVG elements.

Table of Contents

What is this?

A Vue-based Flexbox layout container for SVG elements.

What problem does it solve?

SVG lacks the convenient layout features of CSS; all elements must be positioned absolutely. There are ways around this (with foreignObject for instance), but there are cases where you just end up having to write cumbersome layout calculations for absolute positions. This component attempts to free us from having to do that.

Does it work just like Flexbox in HTML?

No. It computes positions using Facebook's css-layout, which implements a subset of the Flexbox algorithm. This table shows what is supported. These settings are not supported:

On the container:

  • align-content: space-between
  • align-items: baseline
  • align-items: stretch
  • flex-wrap: wrap-reverse
  • justify-content: space-evenly

On the children:

  • align-self
  • flex-basis
  • flex-grow
  • flex-shrink
  • order

Despite these omissions, css-layout implements enough of Flexbox to be useful.

Demo and examples

Live demo: jie123108.github.io/vue-svg-flexbox

Here is the source for the examples. To run them locally:

  • yarn: yarn install && yarn start.
  • or npm: npm install && npm run start

Installation

vue-svg-flexbox is intended to be installed from npm and bundled into your Vue app.

yarn add @jie123108/vue-svg-flexbox

Usage

Add an instance of the Flexbox component to your app, and style it to taste. CSS-Tricks has a great overview of Flexbox if you need help on that score.

<template>
  <Flexbox :x="x">
    <rect :fill="bgcolor" :width="width" :height="height" stroke="blue" :style="{}" />
    <text :x="width/2" :y="height/2" :style="textStyle">
      <slot></slot>
    </text>
  </Flexbox>
</template>

<script>
import Flexbox from '@jie123108/vue-svg-flexbox';

export default {
  name: 'Textbox',
  components: {
    Flexbox,
  },
  props: {
    bgcolor: {type: String, default: '#c0ffc0'},
    x: {type: Number, default: 0},
    width: {type: Number, default: 100},
    height: {type: Number, default: 100},
    textStyle: {
      type: Object,
      default () {
        return {
          "dominant-baseline": "central",
          "font-family": "arial",
          "text-anchor": "middle",
        }
      },
    }
  }
}
</script>

For how to achieve specific layouts using this component, see the examples.

Props

className : String

Arbitrary string to set as className on the root element of the Flexbox instance. By default, the component has no class name.

onLayout : Function

Callback that will receive the entire computed layout when the layout updates. This is useful if you need to inspect layout values from a Flexbox instance in order to make decisions elsewhere in your application.

style : Object

Object containing Flexbox settings, as well as optional width and/or height. You have to pass something in order for layout to occur.

x : Number

The horizontal position, in pixels, at which the Flexbox instance should appear within its parent element.

y : Number

The vertical position, in pixels, at which the Flexbox instance should appear within its parent element.

License

MIT

โฌ† Back to Top

vue-svg-flexbox's People

Contributors

jie123108 avatar

Stargazers

Acampbell avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.