Не удается настроить align-content для работы в сетке flexbox css - PullRequest
1 голос
/ 08 апреля 2020

Я использую CSS flexbox для создания сетки элементов, которые переносятся при изменении размера страницы. Я хочу, чтобы сетка была горизонтально отцентрирована, что благодаря justify-content: center;. Проблема в том, что последнее поле (в некоторых случаях) центрировано, а не выровнено по левому краю. Как сделать так, чтобы он был выровнен по левому краю?

Я пытался использовать align-content: flex-start; для контейнера, но, похоже, он не работает, и я не уверен, почему.

@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
@-ms-viewport {width: device-width;}

.flex-container {
  max-width: 100%;
  margin: 0 auto;
  background-color: whitesmoke;
}

.flex-row {
  display: flex;
  flex-wrap: wrap;
  overflow: hidden;
  justify-content: center;
  align-content: flex-start;
}

.flex-item {
  width: 300px;
  position: relative;
  box-sizing: border-box;
  border: dashed 1px navy;
  overflow-wrap: break-word;
  word-wrap: break-word;
  word-break: break-word;
  -webkit-hyphens: auto;
  -ms-hyphens: auto;
  hyphens: auto;
  padding: 1em;
}

.flex-item .flex-wrapper {
  height: 100%;
  width: 100%;
  overflow: hidden;
  background-color: crimson;
}

.flex-item a.flex-permalink {
  text-decoration: none;
  color: black;
  display: block;
  background-color: lightpink;
  height: 100%;
}

.flex-item img { width: 100%;}

.flex-item h1 {
  font-family: 'Roboto', sans-serif;
  font-size: 1.5em;
  font-weight: 500;
  margin: 0;
  padding: 1em;
}
<div class="flex-container">
	<div class="flex-row">
		<!-- ------ Let the loop begin ------ -->
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Exercitation cupidatat ex non aliqua dolore veniam veniam officia ex dolore.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Sint eiusmod est laborum reprehenderit.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Adipisicing quis tempor duis irure magna quis occaecat.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Culpa dolore sint sit non voluptate nostrud nulla dolor laborum.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Tempor consectetur do elit magna sunt cillum dolor.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>AEu eiusmod qui nostrud anim nulla dolore non veniam excepteur adipisicing sed.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Lorem ipsum duis non laboris</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Dolor occaecat laboris enim duis eiusmod</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Exercitation do enim sint pariatur consectetur</h1>
				</a>
			</div>
		</div>
		<!-- ------ Let the loop end ------ -->
	</div>
</div>

Редактировать: Illustration

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

В вашем CSS вы можете указать, что последний ребенок выровнен по левому краю; добавьте это в своем стиле:

.flex-row>*:last-child{
   margin-right: auto;
}

Осталось только настроить пространство.

0 голосов
/ 09 апреля 2020

Проблема с flexbox заключается в том, что это не настоящая сетка, она полагается на перенос, который оставляет нежелательное пустое пространство, надеясь, что может быть гибкий элемент, достаточно маленький, чтобы поместиться в него, и поэтому контейнер не сжимается.

Кроме того, поскольку flexbox не устанавливает sh истинную сетку, нет никакого способа нацеливания на последнюю строку.

Однако это легко сделать в сетке CSS.

Использование

grid-template-columns:repeat(auto-fit,300px);

Мы говорим сетке создавать столбцы размером 300px ширина, определенная в .flex-item, только если это возможно и только если есть больше элементов для размещения в этом созданном столбце благодаря auto-fit

.flex-container {
  max-width: 100%;
  margin: 0 auto;
  background-color: whitesmoke;
}

.flex-row {
  display: grid;
  grid-template-columns: repeat(auto-fill, 300px);
  overflow: hidden;
  justify-content: center;
}

.flex-item {
  width: 300px;
  position: relative;
  box-sizing: border-box;
  border: dashed 1px navy;
  overflow-wrap: break-word;
  word-wrap: break-word;
  word-break: break-word;
  -webkit-hyphens: auto;
  -ms-hyphens: auto;
  hyphens: auto;
  padding: 1em;
}

.flex-item .flex-wrapper {
  height: 100%;
  width: 100%;
  overflow: hidden;
  background-color: crimson;
}

.flex-item a.flex-permalink {
  text-decoration: none;
  color: black;
  display: block;
  background-color: lightpink;
  height: 100%;
}

.flex-item img {
  width: 100%;
}

.flex-item h1 {
  font-family: 'Roboto', sans-serif;
  font-size: 1.5em;
  font-weight: 500;
  margin: 0;
  padding: 1em;
}
<div class="flex-container">
  <div class="flex-row">
    <!-- ------ Let the loop begin ------ -->
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Exercitation cupidatat ex non aliqua dolore veniam veniam officia ex dolore.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Sint eiusmod est laborum reprehenderit.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Adipisicing quis tempor duis irure magna quis occaecat.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Culpa dolore sint sit non voluptate nostrud nulla dolor laborum.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Tempor consectetur do elit magna sunt cillum dolor.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>AEu eiusmod qui nostrud anim nulla dolore non veniam excepteur adipisicing sed.</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Lorem ipsum duis non laboris</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Dolor occaecat laboris enim duis eiusmod</h1>
        </a>
      </div>
    </div>
    <div class="flex-item">
      <div class="flex-wrapper">
        <a class="flex-permalink" href="">
          <img src="SVG_fallback_image.svg" alt="">
          <h1>Exercitation do enim sint pariatur consectetur</h1>
        </a>
      </div>
    </div>
    <!-- ------ Let the loop end ------ -->
  </div>
</div>
0 голосов
/ 08 апреля 2020

вместо justify-content: центр; используйте justify-content: flex-start или space -ween или space-evenly

, если вы хотите, чтобы все это было центрировано по оси x, используйте поле: 0 auto для внешнего контейнера

@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
@-ms-viewport {width: device-width;}

.flex-container {
  max-width: 100%;
  margin: 0 auto;
  background-color: whitesmoke;
}

.flex-row {
  display: flex;
  flex-wrap: wrap;
  overflow: hidden;
  justify-content: flex-start;
  align-content: flex-start;
}

.flex-item {
  width: 300px;
  position: relative;
  box-sizing: border-box;
  border: dashed 1px navy;
  overflow-wrap: break-word;
  word-wrap: break-word;
  word-break: break-word;
  -webkit-hyphens: auto;
  -ms-hyphens: auto;
  hyphens: auto;
  padding: 1em;
}

.flex-item .flex-wrapper {
  height: 100%;
  width: 100%;
  overflow: hidden;
  background-color: crimson;
}

.flex-item a.flex-permalink {
  text-decoration: none;
  color: black;
  display: block;
  background-color: lightpink;
  height: 100%;
}

.flex-item img { width: 100%;}

.flex-item h1 {
  font-family: 'Roboto', sans-serif;
  font-size: 1.5em;
  font-weight: 500;
  margin: 0;
  padding: 1em;
}
<div class="flex-container">
	<div class="flex-row">
		<!-- ------ Let the loop begin ------ -->
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Exercitation cupidatat ex non aliqua dolore veniam veniam officia ex dolore.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Sint eiusmod est laborum reprehenderit.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Adipisicing quis tempor duis irure magna quis occaecat.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Culpa dolore sint sit non voluptate nostrud nulla dolor laborum.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Tempor consectetur do elit magna sunt cillum dolor.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>AEu eiusmod qui nostrud anim nulla dolore non veniam excepteur adipisicing sed.</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Lorem ipsum duis non laboris</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Dolor occaecat laboris enim duis eiusmod</h1>
				</a>
			</div>
		</div>
		<div class="flex-item">
			<div class="flex-wrapper">
				<a class="flex-permalink" href="">
					<img src="SVG_fallback_image.svg" alt="">
					<h1>Exercitation do enim sint pariatur consectetur</h1>
				</a>
			</div>
		</div>
		<!-- ------ Let the loop end ------ -->
	</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...