diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css
index beac7e73c62d2..5f6f3c65c7ff7 100644
--- a/src/librustdoc/html/static/css/rustdoc.css
+++ b/src/librustdoc/html/static/css/rustdoc.css
@@ -961,10 +961,13 @@ pre, .rustdoc.src .example-wrap, .example-wrap .src-line-numbers {
}
.docblock li {
- margin-bottom: .8em;
+ margin-bottom: .4em;
}
-.docblock li p {
- margin-bottom: .1em;
+.docblock li p:not(:last-child) {
+ /* This margin is voluntarily smaller than `.docblock li` to keep the visual
+ list element items separated while also having a visual separation (although
+ smaller) for paragraphs. */
+ margin-bottom: .3em;
}
/* "where ..." clauses with block display are also smaller */
diff --git a/tests/rustdoc-gui/list-margins.goml b/tests/rustdoc-gui/list-margins.goml
new file mode 100644
index 0000000000000..c83f5898e8e46
--- /dev/null
+++ b/tests/rustdoc-gui/list-margins.goml
@@ -0,0 +1,11 @@
+// This test ensures that the documentation list markers are correctly placed.
+// It also serves as a regression test for .
+
+go-to: "file://" + |DOC_PATH| + "/test_docs/long_list/index.html"
+show-text: true
+
+// 0.3em
+assert-css: (".docblock li p:not(last-child)", {"margin-bottom": "4.8px"})
+assert-css: (".docblock li p + p:last-child", {"margin-bottom": "0px"})
+// 0.4em
+assert-css: (".docblock li", {"margin-bottom": "6.4px"})
diff --git a/tests/rustdoc-gui/src/test_docs/lib.rs b/tests/rustdoc-gui/src/test_docs/lib.rs
index 7397992c0ab0f..352995c49030b 100644
--- a/tests/rustdoc-gui/src/test_docs/lib.rs
+++ b/tests/rustdoc-gui/src/test_docs/lib.rs
@@ -628,3 +628,27 @@ pub mod short_docs {
/// subt_vec_num(x: &[f64], y: f64)
pub fn subt_vec_num() {}
}
+
+pub mod long_list {
+ //! bla
+ //!
+ //! * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque et libero ut leo
+ //! interdum laoreet vitae a mi. Aliquam erat volutpat. Suspendisse volutpat non quam non
+ //! commodo.
+ //!
+ //! Praesent enim neque, imperdiet sed nisl at, lobortis egestas augue. Sed vitae tristique
+ //! augue. Phasellus vel pretium lectus.
+ //! * Praesent enim neque, imperdiet sed nisl at, lobortis egestas augue. Sed vitae tristique
+ //! augue. Phasellus vel pretium lectus.
+ //! * Praesent enim neque, imperdiet sed nisl at, lobortis egestas augue. Sed vitae tristique
+ //! augue. Phasellus vel pretium lectus.
+ //!
+ //! Another list:
+ //!
+ //! * [`TryFromBytes`](#a) indicates that a type may safely be converted from certain byte
+ //! sequence (conditional on runtime checks)
+ //! * [`FromZeros`](#a) indicates that a sequence of zero bytes represents a valid instance of
+ //! a type
+ //! * [`FromBytes`](#a) indicates that a type may safely be converted from an arbitrary byte
+ //! sequence
+}