View this page in the latest version of Appian. Pane Layout Share Share via LinkedIn Reddit Email Copy Link Print On This Page SAIL Design System guidance available for Pane Layout When users need to scroll through information but also leave part of the interface static, use the pane layout. Learn how to use two- and three-pane layouts to build flexible interfaces with greater user control. Function a!paneLayout( panes, showWhen, showPaneDividers ) Displays two or three vertical panes, each with independent scrolling. Can be used as a top-level layout, or in the contents parameter of a form or header content layout. See also: Responsive Design Pane Component Parameters Name Keyword Types Description Pane panes Any Type List of two or three a!pane() components to display in the pane layout. Show When showWhen Boolean Determines whether the layout is displayed on the interface. When set to false, the layout is hidden and is not evaluated. Default: true. Show pane dividers showPaneDividers Boolean Determines whether to display a divider line to separate the panes. Default: true Usage considerations Using pane layout The pane layout is primarily a top-level layout designed to structure an entire interface. You can also use it within an a form layout or header content layout to create interfaces with independently scrolling sections below a common header or within a form structure. Using a pane layout as a top-level layout When used as a top-level layout, the pane layout takes up the full width and height of the screen. Because it is designed to structure an entire page, there are several limitations on how you can use a pane layout: You cannot place other components next to a pane layout or nest it inside other components (except a form layout or header content layout). You cannot nest a pane layout inside of another pane layout. An interface can only contain one pane layout. Using a pane layout in a form layout Related style guidelines: Turn off pane dividers in forms with header and button footer dividers You can place a single pane layout within the contents parameter of a form layout to create forms with multiple, independently scrolling columns of content. When a pane layout is used in a form layout: The form's header and button footer will span across the top and bottom of all panes. The contentsWidth parameter of the form layout will always use "FULL". The panes will always occupy the entire width of the form's content area. Using a pane layout in a header content layout You can place a single pane layout inside the contents parameter of a header content layout.This is useful when you need a consistent header that spans across multiple, independently scrollable content sections. When a pane layout is used in a header content layout: The fixedHeader parameter of the header content layout is ignored. The contentsPadding parameter of the header content layout will apply to the area around the pane layout. Adjusting for different screen sizes The user's screen size should be considered when designing a paned interface. Let's look at the message inbox template as an example. On a large, wide screen, such as a laptop display, this interface uses three panes so users can scroll both the list of messages and the message contents. Scroll or drag to pan · ⌘+/⌘− to zoom · Esc to close For smaller screens, we recommend considering alternative layouts to better accommodate the contents of the panes. You can reuse the wide display for a tablet in landscape mode, but the user will not have the ability to scroll the panes independently. For a tablet in portrait mode, moving the navigation elements to a top bar helps save some space so users can still comfortably see the list of messages and message details. Scroll or drag to pan · ⌘+/⌘− to zoom · Esc to close On phone screens, you can display the list of messages separately from the message contents to give users the ability to navigate each set of information freely. Scroll or drag to pan · ⌘+/⌘− to zoom · Esc to close Appian Mobile considerations Panes have different behavior when the interface is viewed in the Appian Mobile app. Panes are converted to columns, so the contents cannot be scrolled independently. Larger devices like tablets will display the columns side by side, while phones and other smaller devices will show the panes as stacked columns. This may result in very long pages depending on a pane's contents. Note: Panes are not converted for mobile browsers. Users viewing the paned interface this way will have a similar experience to those using a desktop browser. See Adjusting for different screen sizes to learn how to adapt the layout for smaller screens. Examples Pane layout with two panes This example shows a two-pane layout for a dashboard with filter controls. Users can select from the available filters to apply to the dashboard data. Each pane can be scrolled while the other remains fixed. Pane layout with three panes This example shows a three-pane layout from an insurance claim processing app. The layout includes a timeline, claim details, and input fields for the claim reviewer to add their findings. Each pane can be scrolled while the others remain fixed. Empty form with panes This example shows an empty pane layout within a form layout. To experiment with this example, copy and paste the expression into an interface object, or select the Form with Panes template from an empty interface object. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 a!formLayout( titleBar: a!headerTemplateFull( title: "Form", secondaryText: "Enter your details", secondaryTextColor: "SECONDARY", backgroundColor: "ACCENT" ), showTitleBarDivider: false, contents: { a!paneLayout( panes: { a!pane(contents: {}, width: "NARROW_PLUS"), a!pane(contents: {}, width: "AUTO") } ) }, buttons: a!buttonLayout( primaryButtons: { a!buttonWidget( label: "Submit", submit: true, style: "SOLID", loadingIndicator: true ) }, secondaryButtons: { a!buttonWidget( label: "Cancel", value: true, saveInto: ri!cancel, submit: true, style: "OUTLINE", validate: false ) } ), showButtonDivider: true ) Pane layout in form layout This example shows a document review form created with a pane layout in a form layout. It displays the following interface. To experiment with examples, copy and paste the expression into an interface object. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 a!formLayout( titleBar: a!headerTemplateSimple( title: "Review Form Data", secondaryText: "Review the information extracted from the submitted document. Compare the details below with the form on the left. Correct any fields that are inaccurate before submitting.", secondaryTextColor: "STANDARD" ), showTitleBarDivider: true, contents: { a!paneLayout( panes: { a!pane( contents: { a!documentViewerField( labelPosition: "COLLAPSED", /* Replace this with a document constant in your environment */ /* document: cons!DOC_EXAMPLE, */ height: "TALL" ) }, width: "AUTO", padding: "NONE" ), a!pane( contents: { a!textField( label: "Name" ), a!textField( label: "Street Address" ), a!textField( label: "City" ), a!dropdownField( data: null, label: "State", placeholder: "Select a state" ), a!integerField( label: "Zip Code" ), a!textField( label: "Phone Number" ), a!textField( label: "Email" ), a!paragraphField( label: "Supporting Information", height: "TALL" ), a!dateField( label: "Start Date" ), a!dateField( label: "End Date" ) }, width: "NARROW_PLUS", backgroundColor: "GRAY" ) }, showPaneDividers: false ) }, buttons: a!buttonLayout( primaryButtons: { a!buttonWidget( label: "Submit", style: "SOLID" ) }, secondaryButtons: { a!buttonWidget( label: "Cancel" ) } ), showButtonDivider: true ) Pane layout with billboard header This example shows a two-pane layout within a billboard header content layout. It displays the following interface. To experiment with examples, copy and paste the expression into an interface object. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 a!headerContentLayout( header: { a!billboardLayout( backgroundMedia: a!documentImage(document: a!EXAMPLE_BILLBOARD_IMAGE()), backgroundColor: "#f0f0f0", marginBelow: "NONE", overlay: a!fullOverlay( alignVertical: "BOTTOM", contents: { a!cardLayout( contents: { a!richTextDisplayField( labelPosition: "COLLAPSED", value: { a!richTextItem(text: "Properties / First Property / "), a!richTextItem(text: "Messages", style: "STRONG"), char(10), char(10) } ), a!sideBySideLayout( items: { a!sideBySideItem( item: a!richTextDisplayField( labelPosition: "COLLAPSED", value: { a!richTextItem( text: "First Property", size: "LARGE", style: "STRONG" ), char(10), a!richTextItem(text: "Address, City, VA 99999"), char(10) } ) ) }, alignVertical: "MIDDLE" ) }, style: "TRANSPARENT", padding: "NONE", marginBelow: "NONE", showBorder: false ) }, style: "SEMI_DARK" ) ) }, contents: a!paneLayout( panes: { a!pane( contents: { a!sectionLayout( label: "", contents: { a!cardLayout( contents: { a!sideBySideLayout( items: { a!sideBySideItem( item: a!richTextDisplayField( labelPosition: "COLLAPSED", value: a!richTextHeader(text: "Inbox") ), width: "MINIMIZE" ) }, alignVertical: "MIDDLE", marginAbove: "STANDARD", marginBelow: "STANDARD" ) }, height: "AUTO", style: "TRANSPARENT", marginBelow: "NONE", showBorder: false ) }, marginAbove: "EVEN_LESS", marginBelow: "EVEN_LESS" ), a!cardLayout(contents: {}, height: "EXTRA_TALL"), a!cardLayout(contents: {}, height: "EXTRA_TALL") }, width: "MEDIUM", padding: "NONE" ), a!pane( contents: { a!cardLayout( contents: { a!sideBySideLayout( items: { a!sideBySideItem( item: a!richTextDisplayField( labelPosition: "COLLAPSED", value: { a!richTextItem(text: "Messages", size: "MEDIUM_PLUS") }, preventWrapping: true ) ) }, alignVertical: "MIDDLE" ) }, height: "AUTO", style: "#ffffff", shape: "SEMI_ROUNDED", padding: "STANDARD", marginBelow: "NONE", showBorder: false ), a!cardLayout(contents: {}, height: "EXTRA_TALL"), a!cardLayout(contents: {}, height: "EXTRA_TALL"), a!horizontalLine(marginAbove: "NONE", marginBelow: "NONE") }, width: "AUTO", backgroundColor: "GRAY", padding: "STANDARD" ) } ), contentsPadding: "NONE" ) Feature compatibility The table below lists this component's compatibility with various features in Appian. Feature Compatibility Note Portals Compatible Offline Interfaces Compatible Sync-Time Custom Record Fields Incompatible Real-Time Custom Record Fields Incompatible Custom record fields that evaluate in real time must be configured using one or more Custom Field functions. Process Reports Incompatible Cannot be used to configure a process report. Process Events Incompatible Cannot be used to configure a process event node, such as a start event or timer event. Process Autoscaling Incompatible Cannot be used in autoscaled processes. Event Consumer Filter Conditions Compatible Can be used in filter conditions. Event Consumer Event Handlers Compatible Can be used in event handler expressions. Feedback Was this page helpful? SHARE FEEDBACK Loading...