mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 03:59:50 +08:00
UX: Better alignment for experimental grids (#22066)
Improves the layout of most grids in posts, by using `object-fit: cover` for most images. This allows images to better fill up the space, without changing their aspect ratio.
This commit is contained in:
parent
3da29a06fd
commit
3c490b2db8
|
@ -69,9 +69,11 @@ export default class Columns {
|
||||||
Array.from(this.container.children).forEach((child) => {
|
Array.from(this.container.children).forEach((child) => {
|
||||||
if (child.nodeName === "P" && child.children.length > 0) {
|
if (child.nodeName === "P" && child.children.length > 0) {
|
||||||
// sometimes children are wrapped in a paragraph
|
// sometimes children are wrapped in a paragraph
|
||||||
targets.push(...child.children);
|
Array.from(child.children).forEach((c) => {
|
||||||
|
targets.push(this._wrapDirectImage(c));
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
targets.push(child);
|
targets.push(this._wrapDirectImage(child));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -80,6 +82,17 @@ export default class Columns {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_wrapDirectImage(item) {
|
||||||
|
if (item.nodeName !== "IMG") {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
const wrapper = document.createElement("span");
|
||||||
|
wrapper.classList.add("image-wrapper");
|
||||||
|
wrapper.append(item);
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
_distributeEvenly() {
|
_distributeEvenly() {
|
||||||
const count = this.count();
|
const count = this.count();
|
||||||
const columns = this._prepareColumns(count);
|
const columns = this._prepareColumns(count);
|
||||||
|
|
|
@ -18,6 +18,26 @@
|
||||||
|
|
||||||
.d-image-grid-column {
|
.d-image-grid-column {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
// use flex layout, flex-grow and object-fit: cover
|
||||||
|
// to better have the images fill their containers
|
||||||
|
// and line up vertically (it's not perfect!)
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
> div,
|
||||||
|
> span {
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
// hardcoded max-height here prevents extra tall images
|
||||||
|
// from having an outsized effect on the grid
|
||||||
|
max-height: 1200px;
|
||||||
|
|
||||||
|
img:not(.thumbnail):not(.ytp-thumbnail-image):not(.emoji) {
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
|
@ -28,7 +48,7 @@
|
||||||
margin-bottom: $grid-column-gap;
|
margin-bottom: $grid-column-gap;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forces images in the grid to fill each column
|
// Forces images in the grid to fill each column width-wise
|
||||||
img,
|
img,
|
||||||
> .lightbox-wrapper,
|
> .lightbox-wrapper,
|
||||||
> .lightbox-wrapper > .lightbox {
|
> .lightbox-wrapper > .lightbox {
|
||||||
|
@ -42,20 +62,24 @@
|
||||||
.meta .filename {
|
.meta .filename {
|
||||||
flex-grow: 3;
|
flex-grow: 3;
|
||||||
}
|
}
|
||||||
|
// full-height lightbox element in container
|
||||||
|
> .lightbox {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// when staging edits
|
// when staging edits
|
||||||
.image-wrapper {
|
.image-wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-bottom: $grid-column-gap;
|
margin-bottom: $grid-column-gap;
|
||||||
margin-bottom: 0em;
|
padding-bottom: 0em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.desktop-view .d-editor-preview & {
|
.d-editor-preview & {
|
||||||
.image-wrapper {
|
.image-wrapper {
|
||||||
padding-bottom: $grid-column-gap;
|
margin-bottom: $grid-column-gap;
|
||||||
margin-bottom: 0em;
|
padding-bottom: 0em;
|
||||||
.button-wrapper {
|
.button-wrapper {
|
||||||
.scale-btn-container,
|
.scale-btn-container,
|
||||||
&[editing] .wrap-image-grid-button {
|
&[editing] .wrap-image-grid-button {
|
||||||
|
@ -64,4 +88,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mobile-view .d-editor-preview & {
|
||||||
|
.image-wrapper {
|
||||||
|
.button-wrapper {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
&:hover .button-wrapper {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2426,6 +2426,7 @@ en:
|
||||||
experimental_new_new_view_groups: 'EXPERIMENTAL: Enable a new topics list that combines unread and new topics and make the "Everything" link in the sidebar link to it.'
|
experimental_new_new_view_groups: 'EXPERIMENTAL: Enable a new topics list that combines unread and new topics and make the "Everything" link in the sidebar link to it.'
|
||||||
enable_custom_sidebar_sections: "EXPERIMENTAL: Enable custom sidebar sections"
|
enable_custom_sidebar_sections: "EXPERIMENTAL: Enable custom sidebar sections"
|
||||||
experimental_topics_filter: "EXPERIMENTAL: Enables the experimental topics filter route at /filter"
|
experimental_topics_filter: "EXPERIMENTAL: Enables the experimental topics filter route at /filter"
|
||||||
|
experimental_post_image_grid: "EXPERIMENTAL: Enables a [grid] tag in posts to display images in a grid layout."
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
invalid_css_color: "Invalid color. Enter a color name or hex value."
|
invalid_css_color: "Invalid color. Enter a color name or hex value."
|
||||||
|
|
|
@ -988,9 +988,6 @@ posting:
|
||||||
autohighlight_all_code:
|
autohighlight_all_code:
|
||||||
client: true
|
client: true
|
||||||
default: false
|
default: false
|
||||||
experimental_post_image_grid:
|
|
||||||
client: true
|
|
||||||
default: false
|
|
||||||
highlighted_languages:
|
highlighted_languages:
|
||||||
default: "bash|c|cpp|csharp|css|diff|go|graphql|ini|java|javascript|json|kotlin|lua|makefile|markdown|objectivec|perl|php|php-template|plaintext|python|python-repl|r|ruby|rust|scss|shell|sql|swift|typescript|xml|yaml|wasm"
|
default: "bash|c|cpp|csharp|css|diff|go|graphql|ini|java|javascript|json|kotlin|lua|makefile|markdown|objectivec|perl|php|php-template|plaintext|python|python-repl|r|ruby|rust|scss|shell|sql|swift|typescript|xml|yaml|wasm"
|
||||||
choices: "HighlightJs.languages"
|
choices: "HighlightJs.languages"
|
||||||
|
@ -2115,6 +2112,9 @@ developer:
|
||||||
experimental_topics_filter:
|
experimental_topics_filter:
|
||||||
client: true
|
client: true
|
||||||
default: false
|
default: false
|
||||||
|
experimental_post_image_grid:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
new_edit_sidebar_categories_tags_interface_groups:
|
new_edit_sidebar_categories_tags_interface_groups:
|
||||||
type: group_list
|
type: group_list
|
||||||
list_type: compact
|
list_type: compact
|
||||||
|
|
Loading…
Reference in New Issue
Block a user