Column 1 | Column 2 | Column 3 | Column 4 | Column 5 |
---|---|---|---|---|
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Overlays optionally accept a color
, which sets the "start" (opaque) color of a gradient mask. Because this overlay is intended to reveal underlying content, the "end" color is fixed to transparent.
The optional layout
prop accepts the position
and size
of the overlay as a key:value pair.
The position
key accepts bottom
(default), top
, y
(for both top and bottom) right
, left
, or x
(for both left and right), which sets the side(s) where the color
overlay starts. The direction of the overlay is always toward the opposite side of the position. For example, the default position of bottom
starts the overlay on the bottom edge of your container and extends it toward the opposite side: the top.
The size
value is full
(100%) by default, but accepts our spacing tokens or a percentage value as a string, and literally translates to how much of the container is covered by the overlay(s).
<%= pb_rails("overlay") do %> <%= pb_rails("table", props: { size: "sm" }) do %> <thead> <tr> <th>Column 1</th> <th>Column 2</th> <th>Column 3</th> <th>Column 4</th> <th>Column 5</th> </tr> </thead> <tbody> <% 7.times do %> <tr> <td>Value 1</td> <td>Value 2</td> <td>Value 3</td> <td>Value 4</td> <td>Value 5</td> </tr> <% end %> </tbody> <% end %> <% end %>
Optionally, you can pass multi-directional options (x
or y
) to the position
key, which creates multiple overlays.
Your color
is still applied as the starting edge to both overlays, and each mask will fade to transparent moving toward its opposite edge, ending at the size
value you set.
NOTE: Multi-directional overlays share the available container space, so passing full
or a percentage string greater than 50% to a multi-directional overlay will cause your masks to overlap at the midline of your container. As a best practice, we do not recommend exceeding a percentage size of 25% when using multi-directional overlays.
<%= pb_rails("overlay", props: { layout: { "x": "xl" }, color: "card_light" }) do %> <%= pb_rails("flex", props: { column_gap: "lg", orientation: "row", overflow_x: "auto" }) do %> <% 15.times do %> <%= pb_rails("flex/flex_item") do %> <%= pb_rails("card") do %> Card content <% end %> <% end %> <% end %> <% end %> <% end %>
Column 1 | Column 2 | Column 3 | Column 4 | Column 5 |
---|---|---|---|---|
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
To toggle an overlay, add a button with an event handler. Remove the overlay container to reveal the underlying content. Re-wrap the overlay container to add the overlay back.
<div id="outer-container"> <%= pb_rails("overlay", props: { id: "overlay-container", overflow: "hidden" }) do %> <div id="underlying-table"> <%= pb_rails("table", props: { size: "sm" }) do %> <thead> <tr> <th>Column 1</th> <th>Column 2</th> <th>Column 3</th> <th>Column 4</th> <th>Column 5</th> </tr> </thead> <tbody> <% 7.times do %> <tr> <td>Value 1</td> <td>Value 2</td> <td>Value 3</td> <td>Value 4</td> <td>Value 5</td> </tr> <% end %> </tbody> <% end %> </div> <% end %> <%= pb_rails("button", props: { text: "Show More", id: "show-more-button", variant: "link", full_width: true, icon: "chevron-down", icon_right: true }) %> <%= pb_rails("button", props: { text: "Show Less", id: "show-less-button", variant: "link", full_width: true, icon: "chevron-up", icon_right: true }) %> </div> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", () => { const showMoreButton = document.getElementById("show-more-button"); const showLessButton = document.getElementById("show-less-button"); const overlayContainer = document.getElementById("overlay-container"); const underlyingTable = document.getElementById("underlying-table"); const outerContainer = document.getElementById("outer-container"); showLessButton.style.display = "none"; underlyingTable.style.height = "200px"; const showMore = () => { outerContainer.appendChild(underlyingTable); outerContainer.appendChild(showLessButton); showMoreButton.style.display = "none"; showLessButton.style.display = "flex"; underlyingTable.style.height = "auto"; }; const showLess = () => { overlayContainer.appendChild(underlyingTable); showMoreButton.style.display = "flex"; showLessButton.style.display = "none"; underlyingTable.style.height = "200px"; }; showMoreButton.addEventListener("click", showMore); showLessButton.addEventListener("click", showLess); }); </script>
Props | Type | Values |
---|---|---|
max_width |
array
|
0%
xs
sm
md
lg
xl
xxl
0
none
100%
|
min_width |
array
|
0%
xs
sm
md
lg
xl
xxl
0
none
100%
|
width |
array
|
0%
xs
sm
md
lg
xl
xxl
0
none
100%
|
z_index |
array
|
1
2
3
4
5
6
7
8
9
10
|
number_spacing |
array
|
tabular
|
shadow |
array
|
none
deep
deeper
deepest
|
line_height |
array
|
tightest
tighter
tight
normal
loose
looser
loosest
|
display |
array
|
block
inline_block
inline
flex
inline_flex
none
|
cursor |
array
|
auto
default
none
contextMenu
help
pointer
progress
wait
cell
crosshair
text
verticalText
alias
copy
move
noDrop
notAllowed
grab
grabbing
eResize
nResize
neResize
nwResize
sResize
seResize
swResize
wResize
ewResize
nsResize
neswResize
nwseResize
colResize
rowResize
allScroll
zoomIn
zoomOut
|
flex_direction |
array
|
row
column
rowReverse
columnReverse
|
flex_wrap |
array
|
wrap
nowrap
wrapReverse
|
justify_content |
array
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
justify_self |
array
|
auto
start
end
center
stretch
|
align_items |
array
|
flexStart
flexEnd
start
end
center
baseline
stretch
|
align_content |
array
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
align_self |
array
|
auto
start
end
center
stretch
baseline
|
flex |
array
|
auto
initial
0
1
2
3
4
5
6
7
8
9
10
11
12
none
|
flex_grow |
array
|
1
0
|
flex_shrink |
array
|
1
0
|
order |
array
|
1
2
3
4
5
6
7
8
9
10
11
12
|
position |
array
|
relative
absolute
fixed
sticky
|
hover |
array
|
|
border_radius |
array
|
none
xs
sm
md
lg
xl
rounded
|
text_align |
array
|
start
end
left
right
center
justify
justify-all
match-parent
|
overflow |
array
|
visible
hidden
scroll
auto
|
truncate |
array
|
1
2
3
4
5
|
left |
array
|
0
xxs
xs
sm
md
lg
xl
auto
initial
inherit
|
top |
array
|
0
xxs
xs
sm
md
lg
xl
auto
initial
inherit
|
right |
array
|
0
xxs
xs
sm
md
lg
xl
auto
initial
inherit
|
bottom |
array
|
0
xxs
xs
sm
md
lg
xl
auto
initial
inherit
|
vertical_align |
array
|
baseline
super
top
middle
bottom
sub
text-top
text-bottom
|
height |
array
|
auto
xs
sm
md
lg
xl
xxl
xxxl
|
min_height |
array
|
auto
xs
sm
md
lg
xl
xxl
xxxl
|
max_height |
array
|
auto
xs
sm
md
lg
xl
xxl
xxxl
|
overflow_x |
array
|
visible
hidden
scroll
auto
|
overflow_y |
array
|
visible
hidden
scroll
auto
|
margin |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
classname |
string
|
|
dark |
boolean
|
|
group_hover |
boolean
|
|
id |
string
|
|
data |
hashprop
|
|
aria |
hashprop
|
|
html_options |
hashprop
|
|
children |
proc
|
|
style |
hashprop
|
Props | Type | Values | Default |
---|---|---|---|
color |
enum
|
card_light
bg_light
card_dark
bg_dark
|
card_light
|
layout |
hashprop
|
{:bottom=>"full"}
|