响应 CSS 同时保持设置的宽度

Responsive CSS whilst maintaining set widths

对 CSS 和 vaadin 都很业余,试图在 Vaadin 中实现响应式 UI,但在设置 UI 对象的宽度方面遇到问题;一切似乎都无法响应 CSS。这是我所描述的示例:

 CssLayout filterTypeLOptimiseBLayout = new CssLayout();
    filterTypeLOptimiseBLayout.setResponsive(true);
    filterTypeLOptimiseBLayout.addStyleName("flexwrap");
    filterTypeLOptimiseBLayout.setSizeFull();

        Label filtTypeLabel = new Label("Filter Type Filler");
        filtTypeLabel.addStyleName("filtTypeLabel");
        filtTypeLabel.setSizeFull();
        filtTypeLabel.setResponsive(true);
        filterTypeLOptimiseBLayout.addComponent(filtTypeLabel);

并将相应的响应式 CSS 块应用于 filtTypeLabel

 /* ---- Filter Type Filler Label ------*/
  //Basic inherited CSS
  .filtTypeLabel {
    padding: 5px;
  }

  //Mobile
  .filtTypeLabel[width-range~="0-300px"] {
    font-size: 12pt;
    margin: 5px;
  }

  //Small Browser
  .filtTypeLabel[width-range~="301px-600px"] {
    font-size: 14pt;
    margin: 10px;
  }

  //Big Browser
  .filtTypeLabel[width-range~="601px-"] {
    font-size: 16pt;
    margin: 20px;
  }

使用前面的代码,我按预期实现了按钮字体和边距的缩放,但我还想控制标签的宽度。使用 filtTypeLabel.setSizeFull(); 会导致与标签在同一行的任何内容环绕到下一行,因为标签水平占据所有 space。调用 filtTypeLabel.setWidthUndefined(); 会破坏响应式缩放,而 filtTypeLabel.setWidth("5%"); 也会破坏它。在 CSS 中设置 max-widthmin-width 也会破坏它。

有什么方法可以将设置的宽度应用于响应式 CSS 启用的对象?

宽度范围检查适用于特定组件,不适用于您的 window 尺寸。因此,如果您的组件始终具有相同的大小,则此检查将始终显示相同的结果。您需要创建这样的组件,它具有响应式和宽度范围样式,它会根据 window 大小更改其大小。您所有的响应式子项都必须具有子项样式。

CssLayout filterTypeLOptimiseBLayout = new CssLayout();
  filterTypeLOptimiseBLayout.setResponsive(true);
  filterTypeLOptimiseBLayout.addStyleName("flexwrap");
  filterTypeLOptimiseBLayout.setSizeFull();
  filterTypeLOptimiseBLayout.setResponsive(true);

.flexwrap {
  .filtTypeLabel {
    padding: 5px;
  }
}

//Mobile
.flexwrap[width-range~="0-300px"] {
  .filtTypeLabel {
    font-size: 12pt;
    margin: 5px;
  }
}
//Small Browser
.flexwrap[width-range~="301px-600px"] {
  .filtTypeLabel {
    font-size: 14pt;
    margin: 10px;
  }
}

//Big Browser
.flexwrap[width-range~="601px-"] {
  .filtTypeLabel {
    font-size: 16pt;
    margin: 20px;
  }
}