row-rule-break CSS property

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Want more browser support for this feature? Tell us why.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The row-rule-break CSS property sets the behavior for breaking row rules into segments where row rules intersect column gaps.

Try it

row-rule-break: none;
row-rule-break: normal;
row-rule-break: intersection;
<section id="default-example">
  <div id="example-element">
    <i>A</i>
    <i>B</i>
    <i>C</i>
    <i>D</i>
    <i>E</i>
    <i>F</i>
    <i>G</i>
    <i>H</i>
    <i>I</i>
    <i>J</i>
    <i>K</i>
    <i>L</i>
    <i>M</i>
    <i>N</i>
    <i>O</i>
    <i>P</i>
    <i>Q</i>
    <i>R</i>
    <i>S</i>
    <i>T</i>
    <i>U</i>
    <i>V</i>
    <i>W</i>
    <i>X</i>
    <i>Y</i>
    <i>Z</i>
  </div>
</section>
#example-element {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  row-rule: solid thick orange;
  column-rule: solid thick lavender;
  gap: 15px;
}
#example-element i {
  padding: 5px;
}

Syntax

css
/* Keywords */
row-rule-break: none;
row-rule-break: normal;
row-rule-break: intersection;

/* Global values */
row-rule-break: inherit;
row-rule-break: initial;
row-rule-break: revert;
row-rule-break: revert-layer;
row-rule-break: unset;

Values

This property is specified as a single keyword from the following list:

none

There are no breaks in row rules when they intersect column gaps; rather, a continuous row rule is painted the whole width of the container, from edge to edge.

normal

In grid and flex containers, behaves as none. In multi-col, behaves as none. This is the default value.

intersection

Row rules always break when they intersect column gaps, with row rule segments starting and ending at container and gap edges.

Description

The row-rule-break property specifies whether or not to break row rules into segments when they cross column gaps.

Row rules are painted within a row gap as one or more segments, with segments occurring between adjacent grid items in separate rows, between flex items or flex lines, depending on the flex-direction in flex layouts, or in gaps between adjacent rows of columns in multi-col layouts when column-height creates multiple rows of columns.

The row-rule-break property only determines if the break occurs. By default, the break, or space, between row rule segments is the width of the column gap, as each segments starts and ends at the edge of the gap (or edge of the container). If the gap is 0, this break may not be visible. The end positions can be controlled with the row-rule-inset properties.

If row-rule-break is set to none, there are no breaks, the row rule line is continuous, and any row-rule-inset values only affect the row rule on the left and right edge of the container. When there are breaks, the row-rule-inset properties affect the start and end of every row rule segment.

The row-rule-break property, along with the column-rule-break property, can be set using the rule-break shorthand.

Whether a row rule is by default composed of a single continuous segment or segments that break when intersecting column gaps depends on the container type.

Grid containers

In grid containers, by default, row rule segments continue through visible "cross" intersections. Setting row-rule-break: intersection will force the segments to break at every column gap, where they would otherwise cross.

By default, there are no row rule breaks. Check the checkbox to set ow-rule-break to intersection, which makes the continuous rules break at every "cross" intersection. By default, the break between segments is the width of the column-gap.

Flex containers

In flexbox, when the flex-direction is row or row-reverse in horizontal writing modes, the row rule is continuous, with the column segments starting and ending at the at the edge of the row gaps. When the flex-direction is column or column-reverse, the column rule is continuous, with the row segments starting and ending at the at the edge of the column gaps.

In horizontal writing modes, when set to row or row-reverse, the row rule is continuous by default, where as with column or column-reverse, the row rule breaks at every column gap. Setting the row-rule-break to intersection only impacts the row rules in the row and row-reverse scenarios.

Multi-col containers

In multi-col containers, the default normal behavior behaves the same as none.

If you select intersection, the row rule will break into segments whenever it reaches a column gap, with each segment starting and ending at the edge of the gap. The start and end positions can be changed with the row-rule-inset properties.

Formal definition

Value not found in DB!

Formal syntax

row-rule-break = 
none |
normal |
intersection

Examples

Basic usage

In this example, we use the row-rule-break property to break each rule segment in a grid container so row rule segments are created between column gaps. Changing the column-gap property will change the size of the segments.

HTML

We create a list of 50 items and a slider to change the column gap width. Most of the HTML is hidden for brevity.

html
<ul>
  <li>1</li>
  <li>2</li>
  ...
  <li>49</li>
  <li>50</li>
</ul>

CSS

We define the unordered list as a 8-column container, creating columns and rows with the grid-template-columns property and setting list-style-type to none to remove the bullets. We include a gap of 20px to provide enough room between the columns and rows to fit our 20px solid column and row rules. Last, we set the row rules to break into segments at every intersection.

css
ul {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  list-style-type: none;
  gap: 20px;

  row-rule: 10px solid olive;
  column-rule: 10px solid palegoldenrod;

  row-rule-break: intersection;
}

The rest of the CSS is hidden for brevity.

Result

Make the column gaps wider and note how the breaks between row segments grow. Bring the column gap width down to 0px, and notice how the row decoration appears continuous. It isn't! The 0px gap between segments may not be visible, but the segments still start and end at the gap, so any offsets set with row-rule-inset properties will still be applied.

Specifications

Specification
CSS Gaps Module Level 1
# propdef-row-rule-break

Browser compatibility

See also