pub struct Block<'a> { /* private fields */ }
Expand description
Base widget to be used to display a box border around all other built-in widgets.
The borders can be configured with Block::borders
and others. A block can have multiple
Title
using Block::title
. It can also be styled and
padded.
You can call the title methods multiple times to add multiple titles. Each title will be rendered with a single space separating titles that are in the same position or alignment. When both centered and non-centered titles are rendered, the centered space is calculated based on the full width of the block, rather than the leftover width.
Titles are not rendered in the corners of the block unless there is no border on that edge. If the block is too small and multiple titles overlap, the border may get cut off at a corner.
┌With at least a left border───
Without left border───
§Constructor methods
Block::new
creates a newBlock
with no border or paddings.Block::bordered
Create a new block with all borders shown.
§Setter methods
These methods are fluent setters. They return a new Block
with the specified property set.
Block::borders
Defines which borders to display.Block::border_style
Defines the style of the borders.Block::border_type
Sets the symbols used to display the border (e.g. single line, double line, thick or rounded borders).Block::padding
Defines the padding inside aBlock
.Block::style
Sets the base style of the widget.Block::title
Adds a title to the block.Block::title_alignment
Sets the defaultAlignment
for all block titles.Block::title_style
Applies the style to all titles.Block::title_top
Adds a title to the top of the block.Block::title_bottom
Adds a title to the bottom of the block.Block::title_position
Adds a title to the block.
§Other Methods
Block::inner
Compute the inner area of a block based on its border visibility rules.
Style
s are applied first to the entire block, then to the borders, and finally to the
titles. If the block is used as a container for another widget, the inner widget can also be
styled. See Style
for more information on how merging styles works.
§Examples
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, BorderType, Borders};
Block::new()
.border_type(BorderType::Rounded)
.borders(Borders::LEFT | Borders::RIGHT)
.border_style(Style::default().fg(Color::White))
.style(Style::default().bg(Color::Black))
.title("Block");
You may also use multiple titles like in the following:
use ratatui::widgets::block::{Position, Title};
use ratatui::widgets::Block;
Block::new()
.title("Title 1")
.title(Title::from("Title 2").position(Position::Bottom));
You can also pass it as parameters of another widget so that the block surrounds them:
use ratatui::widgets::{Block, Borders, List};
let surrounding_block = Block::default()
.borders(Borders::ALL)
.title("Here is a list of items");
let items = ["Item 1", "Item 2", "Item 3"];
let list = List::new(items).block(surrounding_block);
Implementations§
Source§impl<'a> Block<'a>
impl<'a> Block<'a>
Sourcepub const fn bordered() -> Block<'a>
pub const fn bordered() -> Block<'a>
Create a new block with all borders shown
use ratatui::widgets::{Block, Borders};
assert_eq!(Block::bordered(), Block::new().borders(Borders::ALL));
Sourcepub fn title<T>(self, title: T) -> Block<'a>
pub fn title<T>(self, title: T) -> Block<'a>
Adds a title to the block.
The title
function allows you to add a title to the block. You can call this function
multiple times to add multiple titles.
Each title will be rendered with a single space separating titles that are in the same position or alignment. When both centered and non-centered titles are rendered, the centered space is calculated based on the full width of the block, rather than the leftover width.
You can provide any type that can be converted into Title
including: strings, string
slices (&str
), borrowed strings (Cow<str>
), spans, or
vectors of spans (Vec<Span>
).
By default, the titles will avoid being rendered in the corners of the block but will align against the left or right edge of the block if there is no border on that edge. The following demonstrates this behavior, notice the second title is one character off to the left.
┌With at least a left border───
Without left border───
Note: If the block is too small and multiple titles overlap, the border might get cut off at a corner.
§Examples
See the Block example for a visual representation of how the various borders and styles look when rendered.
The following example demonstrates:
- Default title alignment
- Multiple titles (notice “Center” is centered according to the full with of the block, not the leftover space)
- Two titles with the same alignment (notice the left titles are separated)
use ratatui::text::Line;
use ratatui::widgets::{Block, Borders};
Block::new()
.title("Title") // By default in the top left corner
.title(Line::from("Left").left_aligned()) // also on the left
.title(Line::from("Right").right_aligned())
.title(Line::from("Center").centered());
// Renders
// ┌Title─Left────Center─────────Right┐
§See also
Titles attached to a block can have default behaviors. See
§Future improvements
In a future release of Ratatui this method will be changed to accept Into<Line>
instead of
Into<Title>
. This allows us to remove the unnecessary Title
struct and store the
position in the block itself. For more information see
https://github.com/ratatui/ratatui/issues/738.
Sourcepub fn title_top<T>(self, title: T) -> Block<'a>
pub fn title_top<T>(self, title: T) -> Block<'a>
Adds a title to the top of the block.
You can provide any type that can be converted into Line
including: strings, string
slices (&str
), borrowed strings (Cow<str>
), spans, or
vectors of spans (Vec<Span>
).
§Example
use ratatui::{ widgets::Block, text::Line };
Block::bordered()
.title_top("Left1") // By default in the top left corner
.title_top(Line::from("Left2").left_aligned())
.title_top(Line::from("Right").right_aligned())
.title_top(Line::from("Center").centered());
// Renders
// ┌Left1─Left2───Center─────────Right┐
// │ │
// └──────────────────────────────────┘
Sourcepub fn title_bottom<T>(self, title: T) -> Block<'a>
pub fn title_bottom<T>(self, title: T) -> Block<'a>
Adds a title to the bottom of the block.
You can provide any type that can be converted into Line
including: strings, string
slices (&str
), borrowed strings (Cow<str>
), spans, or
vectors of spans (Vec<Span>
).
§Example
use ratatui::{ widgets::Block, text::Line };
Block::bordered()
.title_bottom("Left1") // By default in the top left corner
.title_bottom(Line::from("Left2").left_aligned())
.title_bottom(Line::from("Right").right_aligned())
.title_bottom(Line::from("Center").centered());
// Renders
// ┌──────────────────────────────────┐
// │ │
// └Left1─Left2───Center─────────Right┘
Sourcepub fn title_style<S>(self, style: S) -> Block<'a>
pub fn title_style<S>(self, style: S) -> Block<'a>
Applies the style to all titles.
This style will be applied to all titles of the block. If a title has a style set, it will
be applied after this style. This style will be applied after any Block::style
or
Block::border_style
is applied.
See Style
for more information on how merging styles works.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
Sourcepub const fn title_alignment(self, alignment: HorizontalAlignment) -> Block<'a>
pub const fn title_alignment(self, alignment: HorizontalAlignment) -> Block<'a>
Sets the default Alignment
for all block titles.
Titles that explicitly set an Alignment
will ignore this.
§Example
This example aligns all titles in the center except the “right” title which explicitly sets
Alignment::Right
.
use ratatui::layout::Alignment;
use ratatui::text::Line;
use ratatui::widgets::Block;
Block::new()
.title_alignment(Alignment::Center)
// This title won't be aligned in the center
.title(Line::from("right").right_aligned())
.title("foo")
.title("bar");
Sourcepub const fn title_position(self, position: Position) -> Block<'a>
pub const fn title_position(self, position: Position) -> Block<'a>
Sets the default Position
for all block titles.
Titles that explicitly set a Position
will ignore this.
§Example
This example positions all titles on the bottom except the “top” title which explicitly sets
Position::Top
.
use ratatui::widgets::block::Position;
use ratatui::widgets::Block;
Block::new()
.title_position(Position::Bottom)
// This title won't be aligned in the center
.title_top("top")
.title("foo")
.title("bar");
Sourcepub fn border_style<S>(self, style: S) -> Block<'a>
pub fn border_style<S>(self, style: S) -> Block<'a>
Defines the style of the borders.
This style is applied only to the areas covered by borders, and is applied to the block
after any Block::style
is applied.
See Style
for more information on how merging styles works.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
§Example
This example shows a Block
with blue borders.
use ratatui::style::{Style, Stylize};
use ratatui::widgets::Block;
Block::bordered().border_style(Style::new().blue());
Sourcepub fn style<S>(self, style: S) -> Block<'a>
pub fn style<S>(self, style: S) -> Block<'a>
Defines the style of the entire block.
This is the most generic Style
a block can receive, it will be merged with any other
more specific styles. Elements can be styled further with Block::title_style
and
Block::border_style
, which will be applied on top of this style. If the block is used as
a container for another widget (e.g. a Paragraph
), then the style of the widget is
generally applied before this style.
See Style
for more information on how merging styles works.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
§Example
use ratatui::style::{Color, Style, Stylize};
use ratatui::widgets::{Block, Paragraph};
let block = Block::new().style(Style::new().red().on_black());
// For border and title you can additionally apply styles on top of the block level style.
let block = Block::new()
.style(Style::new().red().bold().italic())
.border_style(Style::new().not_italic()) // will be red and bold
.title_style(Style::new().not_bold()) // will be red and italic
.title("Title");
// To style the inner widget, you can style the widget itself.
let paragraph = Paragraph::new("Content")
.block(block)
.style(Style::new().white().not_bold()); // will be white, and italic
Sourcepub const fn borders(self, flag: Borders) -> Block<'a>
pub const fn borders(self, flag: Borders) -> Block<'a>
Defines which borders to display.
Borders
can also be styled with Block::border_style
and Block::border_type
.
§Examples
Display left and right borders.
use ratatui::widgets::{Block, Borders};
Block::new().borders(Borders::LEFT | Borders::RIGHT);
To show all borders you can abbreviate this with Block::bordered
Sourcepub const fn border_type(self, border_type: BorderType) -> Block<'a>
pub const fn border_type(self, border_type: BorderType) -> Block<'a>
Sets the symbols used to display the border (e.g. single line, double line, thick or rounded borders).
Setting this overwrites any custom border_set
that was set.
See BorderType
for the full list of available symbols.
§Examples
use ratatui::widgets::{Block, BorderType};
Block::bordered()
.border_type(BorderType::Rounded)
.title("Block");
// Renders
// ╭Block╮
// │ │
// ╰─────╯
Sourcepub const fn border_set(self, border_set: Set) -> Block<'a>
pub const fn border_set(self, border_set: Set) -> Block<'a>
Sets the symbols used to display the border as a ratatui_core::symbols::border::Set
.
Setting this overwrites any border_type
that was set.
§Examples
use ratatui::{widgets::Block, symbols};
Block::bordered().border_set(symbols::border::DOUBLE).title("Block");
// Renders
// ╔Block╗
// ║ ║
// ╚═════╝
Sourcepub const fn padding(self, padding: Padding) -> Block<'a>
pub const fn padding(self, padding: Padding) -> Block<'a>
Defines the padding inside a Block
.
See Padding
for more information.
§Examples
This renders a Block
with no padding (the default).
use ratatui::widgets::{Block, Padding};
Block::bordered().padding(Padding::ZERO);
// Renders
// ┌───────┐
// │content│
// └───────┘
This example shows a Block
with padding left and right (Padding::horizontal
).
Notice the two spaces before and after the content.
use ratatui::widgets::{Block, Padding};
Block::bordered().padding(Padding::horizontal(2));
// Renders
// ┌───────────┐
// │ content │
// └───────────┘
Sourcepub fn inner(&self, area: Rect) -> Rect
pub fn inner(&self, area: Rect) -> Rect
Compute the inner area of a block based on its border visibility rules.
§Examples
Draw a block nested within another block
use ratatui::widgets::Block;
use ratatui::Frame;
let outer_block = Block::bordered().title("Outer");
let inner_block = Block::bordered().title("Inner");
let outer_area = frame.area();
let inner_area = outer_block.inner(outer_area);
frame.render_widget(outer_block, outer_area);
frame.render_widget(inner_block, inner_area);
// Renders
// ┌Outer────────┐
// │┌Inner──────┐│
// ││ ││
// │└───────────┘│
// └─────────────┘
Trait Implementations§
impl<'a> Eq for Block<'a>
impl<'a> StructuralPartialEq for Block<'a>
Auto Trait Implementations§
impl<'a> Freeze for Block<'a>
impl<'a> RefUnwindSafe for Block<'a>
impl<'a> Send for Block<'a>
impl<'a> Sync for Block<'a>
impl<'a> Unpin for Block<'a>
impl<'a> UnwindSafe for Block<'a>
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> Stylize<'_, T> for Uwhere
U: Styled<Item = T>,
impl<T, U> Stylize<'_, T> for Uwhere
U: Styled<Item = T>,
fn bg<C>(self, color: C) -> T
fn fg<C>(self, color: C) -> T
fn add_modifier(self, modifier: Modifier) -> T
fn remove_modifier(self, modifier: Modifier) -> T
fn reset(self) -> T
Source§fn on_magenta(self) -> T
fn on_magenta(self) -> T
magenta
.Source§fn on_dark_gray(self) -> T
fn on_dark_gray(self) -> T
dark_gray
.Source§fn on_light_red(self) -> T
fn on_light_red(self) -> T
light_red
.Source§fn light_green(self) -> T
fn light_green(self) -> T
light_green
.Source§fn on_light_green(self) -> T
fn on_light_green(self) -> T
light_green
.Source§fn light_yellow(self) -> T
fn light_yellow(self) -> T
light_yellow
.Source§fn on_light_yellow(self) -> T
fn on_light_yellow(self) -> T
light_yellow
.Source§fn light_blue(self) -> T
fn light_blue(self) -> T
light_blue
.Source§fn on_light_blue(self) -> T
fn on_light_blue(self) -> T
light_blue
.Source§fn light_magenta(self) -> T
fn light_magenta(self) -> T
light_magenta
.Source§fn on_light_magenta(self) -> T
fn on_light_magenta(self) -> T
light_magenta
.Source§fn light_cyan(self) -> T
fn light_cyan(self) -> T
light_cyan
.Source§fn on_light_cyan(self) -> T
fn on_light_cyan(self) -> T
light_cyan
.Source§fn not_italic(self) -> T
fn not_italic(self) -> T
italic
modifier.Source§fn underlined(self) -> T
fn underlined(self) -> T
underlined
modifier.Source§fn not_underlined(self) -> T
fn not_underlined(self) -> T
underlined
modifier.Source§fn slow_blink(self) -> T
fn slow_blink(self) -> T
slow_blink
modifier.Source§fn not_slow_blink(self) -> T
fn not_slow_blink(self) -> T
slow_blink
modifier.Source§fn rapid_blink(self) -> T
fn rapid_blink(self) -> T
rapid_blink
modifier.Source§fn not_rapid_blink(self) -> T
fn not_rapid_blink(self) -> T
rapid_blink
modifier.Source§fn not_reversed(self) -> T
fn not_reversed(self) -> T
reversed
modifier.hidden
modifier.hidden
modifier.Source§fn crossed_out(self) -> T
fn crossed_out(self) -> T
crossed_out
modifier.Source§fn not_crossed_out(self) -> T
fn not_crossed_out(self) -> T
crossed_out
modifier.Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more