在Vaadin中创建补充工具栏或垂直菜单

Raf*_*ero 15 css sass vaadin vaadin7 vaadin-valo-theme

如何在Vaadin中创建VerticalMenuSidebar?是否有任何特定组件或我是否以编程方式使用CSS?

我想创建像Vaadin Demo这样的东西:

在此输入图像描述

我正在使用新的Valo主题.

Red*_*eda 10

为了能够为您的应用程序创建响应行为,您必须使用CSS.像Zigac一样,Vaadin已经为某些组件编写了一些样式(例如我们的菜单),但是你最终想申请更多...

查看具有Valo主题和响应性的新仪表板演示!这是一个更全面的样式组件示例,并实现与Valo Theme Demo相同的逻辑.您可以在此处查看源代码

基本上它的作用是将菜单创建为CustomComponent,将内容区域创建为CssLayout.只要在菜单中单击某个组件,它就会调用MainView内容区域中的相应视图

例如,其中一个视图是DashboardView,它是用户看到的第一个视图.它是一个响应式VerticalLayout,具有响应的组件.

您可以在此处查看不同视图的样式技术(在Sass中)

以下是一些代码:

MainView.java

public class MainView extends HorizontalLayout {

public MainView() {
    //This is the root of teh application it
    //extends a HorizontalLayout
    setSizeFull();
    addStyleName("mainview");

    //here we add the Menu component
    addComponent(new DashboardMenu());

    //add the content area and style
    ComponentContainer content = new CssLayout();
    content.addStyleName("view-content");
    content.setSizeFull();
    addComponent(content);

    setExpandRatio(content, 1.0f);

    new DashboardNavigator(content);
}
}
Run Code Online (Sandbox Code Playgroud)

DashboardMenu.java

public DashboardMenu() {
    addStyleName("valo-menu");
    setSizeUndefined();
    DashboardEventBus.register(this);

    //add components to the menu (buttons, images..etc)
    setCompositionRoot(buildContent());
}
Run Code Online (Sandbox Code Playgroud)

DashboardView.java

public DashboardView() {
    addStyleName(ValoTheme.PANEL_BORDERLESS);
    setSizeFull();
    DashboardEventBus.register(this);

    root = new VerticalLayout();
    root.setSizeFull();
    root.setMargin(true);
    root.addStyleName("dashboard-view");
    setContent(root);

    //this allows you to use responsive styles
    //on the root element
    Responsive.makeResponsive(root);

    //build your dashboard view
    root.addComponent(buildHeader());

    root.addComponent(buildSparklines());

    Component content = buildContent();
    root.addComponent(content);

    //set the content area position on screen
    root.setExpandRatio(content, 1);
...
Run Code Online (Sandbox Code Playgroud)

这是样式表中的styleName"dashboard-view"

dashboardview.scss

@mixin dashboard-dashboard-view {

.dashboard-view.dashboard-view {
//Styles for all devices
padding: $view-padding;
overflow: visible;

.sparks {
  @include valo-panel-style;
  margin-bottom: round($view-padding / 3);

  //styles for a tablet
  @include width-range($max: 680px) {
    .spark {
      width: 50%;
    }
    .spark:nth-child(2n+1) {
      border-left: none;
    }
    .spark:nth-child(n+3) {
      border-top: valo-border($strength: 0.3);
    }
  }
...
Run Code Online (Sandbox Code Playgroud)


Zig*_*gac 7

对于那个确切的设计,您不需要CSS编码,所有样式都提供了编译的Valo主题.您只需在组件和布局上使用适当的样式.

GIT链接的确切(Vaadin演示)实现:

ValoThemeUI.java - 页面上的布局valo菜单

ValoMenuLayout.java - 在valo-menu中布局组件

  • 在https://github.com/vaadin/valo-demo上似乎有一个警告,该示例已被弃用. (2认同)