feat: add a textimage element, add news design, add a footer
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<f:section name="Header"></f:section>
|
||||
</head>
|
||||
<body>
|
||||
<f:section name="main"></f:section>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
<div class="news-item-featured">
|
||||
<f:if condition="{newsItem.media}">
|
||||
<f:image image="{newsItem.media.0}" class="news-item-featured-image" alt="{newsItem.title}" />
|
||||
</f:if>
|
||||
<div class="news-item-featured-content">
|
||||
<!-- Category and Title -->
|
||||
<f:if condition="{newsItem.firstCategory}">
|
||||
<div class="news-item-category">{newsItem.firstCategory.title}</div>
|
||||
</f:if>
|
||||
<h3 class="news-item-title">{newsItem.title}</h3>
|
||||
<f:link.page pageUid="{newsItem.link}" class="news-item-link"> </f:link.page>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
<div class="news-item-grid">
|
||||
<f:if condition="{newsItem.media}">
|
||||
<f:image image="{newsItem.media.0}" class="news-item-grid-image" alt="{newsItem.title}" />
|
||||
</f:if>
|
||||
<div class="news-item-grid-content">
|
||||
<f:if condition="{newsItem.firstCategory}">
|
||||
<div class="news-item-category">{newsItem.firstCategory.title}</div>
|
||||
</f:if>
|
||||
<h5 class="news-item-title">{newsItem.title}</h5>
|
||||
<f:link.page pageUid="{newsItem.link}" class="news-item-link"> </f:link.page>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
<div class="news-item-side">
|
||||
<f:if condition="{newsItem.media}">
|
||||
<f:image image="{newsItem.media.0}" class="news-item-side-image" alt="{newsItem.title}" />
|
||||
</f:if>
|
||||
<div class="news-item-side-content">
|
||||
<f:if condition="{newsItem.firstCategory}">
|
||||
<div class="news-item-category">{newsItem.firstCategory.title}</div>
|
||||
</f:if>
|
||||
<h4 class="news-item-title">{newsItem.title}</h4>
|
||||
<f:link.page pageUid="{newsItem.link}" class="news-item-link"> </f:link.page>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,55 @@
|
||||
<f:layout name="General" />
|
||||
<f:section name="content">
|
||||
<f:if condition="{news}">
|
||||
<f:then>
|
||||
<div class="news-list-container">
|
||||
<!-- First 4 items: 1 large on the left and 3 stacked on the right -->
|
||||
<f:if condition="{news -> f:count()} > 0">
|
||||
<div class="news-featured-wrapper">
|
||||
<div class="news-featured-item">
|
||||
<f:for each="{news}" as="item" iteration="iterator">
|
||||
<f:if condition="{iterator.index} == 0">
|
||||
<f:then>
|
||||
<f:render partial="News/ItemFeatured" arguments="{newsItem: item}" />
|
||||
</f:then>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
<div class="news-side-items">
|
||||
<f:for each="{news}" as="item" iteration="iterator">
|
||||
<f:if condition="{iterator.index} > 0 && {iterator.index} < 4">
|
||||
<f:then>
|
||||
<f:render partial="News/ItemSide" arguments="{newsItem: item}" />
|
||||
</f:then>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<!-- Remaining items in a responsive grid of 3 columns -->
|
||||
<f:if condition="{news -> f:count()} > 4">
|
||||
<div class="news-list-grid">
|
||||
<f:for each="{news}" as="item" iteration="iterator">
|
||||
<f:if condition="{iterator.index} >= 4">
|
||||
<f:then>
|
||||
<f:render partial="News/ItemGrid" arguments="{newsItem: item}" />
|
||||
</f:then>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<!-- "Alle anzeigen" button if listPid is set -->
|
||||
<f:if condition="{settings.listPid}">
|
||||
<div class="news-show-all">
|
||||
<f:link.page pageUid="{settings.listPid}" class="btn-show-all">Alle anzeigen</f:link.page>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<p>No news available.</p>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
@@ -1,11 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2024-12-11UTC16:10:160">
|
||||
<file source-language="en" datatype="plaintext" original="messages">
|
||||
<header>
|
||||
<authorName>Test</authorName>
|
||||
<authorEmail>test@test.at</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="imageorient.25">
|
||||
<source>Image on left</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="imageorient.26">
|
||||
<source>Image on right</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -8,14 +8,26 @@
|
||||
<f:render section="Main" />
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<f:cObject
|
||||
typoscriptObjectPath="lib.dynamicContentSlide"
|
||||
data="{pageUid: '{data.uid}', colPos: '90'}"
|
||||
/>
|
||||
<f:cObject
|
||||
typoscriptObjectPath="lib.dynamicContentSlide"
|
||||
data="{pageUid: '{data.uid}', colPos: '91'}"
|
||||
/>
|
||||
<p>© {f:format.date(date: 'now', format: 'Y')} Your Company</p>
|
||||
<footer class="site-footer">
|
||||
<div class="site-footer__top">
|
||||
<div class="container site-footer__grid">
|
||||
<div class="site-footer__left">
|
||||
<f:cObject typoscriptObjectPath="lib.dynamicContentSlide" data="{pageUid: '{data.uid}', colPos: '90'}" />
|
||||
</div>
|
||||
<div class="site-footer__right">
|
||||
<f:cObject typoscriptObjectPath="lib.dynamicContentSlide" data="{pageUid: '{data.uid}', colPos: '91'}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="site-footer__divider" />
|
||||
|
||||
<div class="site-footer__bottom">
|
||||
<div class="container site-footer__bottom-grid">
|
||||
<ul class="site-footer__legal">
|
||||
<f:cObject typoscriptObjectPath="lib.footerMenu" />
|
||||
</ul>
|
||||
<p class="site-footer__copyright">© All Right Reserved</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
81
packages/base/Resources/Public/Scss/components/_footer.scss
Normal file
81
packages/base/Resources/Public/Scss/components/_footer.scss
Normal file
@@ -0,0 +1,81 @@
|
||||
.site-footer {
|
||||
background: #f8f8ea;
|
||||
color: #4b4b4b;
|
||||
font-size: 0.9rem;
|
||||
padding: 2rem 0;
|
||||
|
||||
&__top {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
&__grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
&__left, &__right {
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
&__grid {
|
||||
flex-direction: row;
|
||||
gap: 4rem;
|
||||
}
|
||||
|
||||
&__left, &__right {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&__divider {
|
||||
border: none;
|
||||
border-top: 1px solid #4b4b4b;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
&__bottom-grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
&__bottom-grid {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
&__legal {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&__copyright {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Social links styling based on href */
|
||||
a[href*="instagram.com"], a[href*="tiktok.com"], a[href*="linkedin.com"], a[href*="twitter.com"], a[href*="x.com"] {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
color: #4b4b4b;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
a[href*="instagram.com"]:hover,
|
||||
a[href*="tiktok.com"]:hover,
|
||||
a[href*="linkedin.com"]:hover,
|
||||
a[href*="twitter.com"]:hover,
|
||||
a[href*="x.com"]:hover {
|
||||
color: #6B8E23;
|
||||
}
|
||||
144
packages/base/Resources/Public/Scss/components/_news.scss
Normal file
144
packages/base/Resources/Public/Scss/components/_news.scss
Normal file
@@ -0,0 +1,144 @@
|
||||
.news-list-container {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
/* Mobile-first: single column by default */
|
||||
/* All items in a single column */
|
||||
.news-featured-wrapper,
|
||||
.news-side-items,
|
||||
.news-list-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.news-item-featured,
|
||||
.news-item-side,
|
||||
.news-item-grid {
|
||||
position: relative;
|
||||
border-radius: 0.5rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.news-item-featured-image,
|
||||
.news-item-side-image,
|
||||
.news-item-grid-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.news-item-featured-content,
|
||||
.news-item-side-content,
|
||||
.news-item-grid-content {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 1rem;
|
||||
background: #215A2A;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.news-item-category {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.news-item-title {
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.news-item-link {
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
}
|
||||
|
||||
.news-show-all {
|
||||
margin-top: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-show-all {
|
||||
display: inline-block;
|
||||
background: #6B8E23;
|
||||
color: #fff;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.5rem;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Adjust the title size for side and grid items */
|
||||
.news-item-side-content .news-item-title,
|
||||
.news-item-grid-content .news-item-title {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
/* On medium screens: switch to a 3-column grid for the first four items.
|
||||
First four items are equal size and placed in a 3x grid. */
|
||||
.news-featured-wrapper {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
|
||||
/* For the first four items, we treat them all equally:
|
||||
The first item (featured) plus next three (side items) fill a 3-column grid equally. */
|
||||
.news-side-items {
|
||||
display: contents; /* Merge side items into the same grid */
|
||||
}
|
||||
|
||||
/* Additional items still in a 3-column grid */
|
||||
.news-list-grid {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
/* On wide screens: special layout:
|
||||
- First item bigger: takes 2 columns and 3 rows
|
||||
- Next 3 items stacked in one column (3 rows) to the right of the big one
|
||||
|
||||
We'll create a 3-column grid for the first 4 items:
|
||||
The first item (featured) will occupy the first two columns and span 3 rows.
|
||||
The next 3 side items will each occupy the third column in their own row.
|
||||
*/
|
||||
|
||||
.news-featured-wrapper {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
grid-auto-rows: auto;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
/* The featured item (index 0) spans 2 columns and 3 rows */
|
||||
.news-featured-item {
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 1 / span 3;
|
||||
}
|
||||
|
||||
/* Side items should appear in the third column, one per row */
|
||||
.news-side-items {
|
||||
display: contents;
|
||||
}
|
||||
|
||||
.news-side-items .news-item-side:nth-of-type(1) {
|
||||
grid-column: 3;
|
||||
grid-row: 1;
|
||||
}
|
||||
.news-side-items .news-item-side:nth-of-type(2) {
|
||||
grid-column: 3;
|
||||
grid-row: 2;
|
||||
}
|
||||
.news-side-items .news-item-side:nth-of-type(3) {
|
||||
grid-column: 3;
|
||||
grid-row: 3;
|
||||
}
|
||||
|
||||
/* Additional items still in a 3-column grid below the first four */
|
||||
.news-list-grid {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
@@ -2,3 +2,6 @@
|
||||
@import 'abstracts/mixins';
|
||||
@import 'base/base';
|
||||
@import 'components/navigation';
|
||||
@import 'components/contentElements';
|
||||
@import 'components/news';
|
||||
@import 'components/footer';
|
||||
|
||||
Reference in New Issue
Block a user