CSS централизующие элементы - PullRequest
0 голосов
/ 02 февраля 2019

Итак, я изучаю графику CSS и пытаюсь создать это изображение в формате css:

enter image description here

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

Может кто-нибудь сказать мне, где я иду не так, пожалуйста?

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

Я поместил свой код в codepen и во фрагмент ниже.

*{
	color: #535252;
	font-family: --var(BB_font);
}

body {
	font-size: 15px;
	background-color: #c3c5c8;
}

.title{
	font-size: 5em
}

.image {
	background-repeat: no-repeat;
	background-position: center;
}

.orangeRectangle {
	width: 100%;
	height: auto;
	
	border-top-right-radius: 150px;
	border-bottom-right-radius: 150px;
	z-index: 0;

	background: #ec673e;
}

.blueRectangle {
	width: 100%;
	height: auto;

	border-top-left-radius: 150px;
	border-bottom-left-radius: 150px;
	z-index: 0;

	background: #67b9ce;
}

.rectangleTitle {
	text-align: center;
	font-size: 3em
}

.greyCircle {
	width: 40%;
	height: 40%;
	position: absolute;
	left: 30%;
	top: 25%;
	align-self: center;
	z-index: 5;
	background-color: #535252;
	border-radius: 50%;
}
<!DOCTYPE html>
<html>
<head>
	<title>Landing Page</title>

	<link href="https://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet">

	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">

	<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">

	<link rel="stylesheet" type="text/css" href="BB1.css">
</head>
<body>



<div class="container pt-2">
	<div class="border border-dark d-flex flex-row justify-content-center">
		<h1 class="title">Header</h1>
	</div>
	<div class="border border-dark d-flex flex-row justify-content-center align-items-stretch" style="height: 950px">
		<div class="blueRectangle border-left border-bottom">
			<h2 class="rectangleTitle pt-2">Heading 1</h2>
		</div>
		<div class="orangeRectangle border-left border-bottom border-right">
			<h2 class="rectangleTitle pt-2">Heading 2</h2>
		</div>
		<div class="greyCircle"></div>
	</div>		
	<div class="border border-dark d-flex flex-row justify-content-center align-items-center" style="height: 150px">
		<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Laboriosam cum iste voluptatibus reprehenderit in dolor veritatis non eveniet at. Suscipit molestiae maxime laboriosam! Ipsa praesentium consectetur ratione quo distinctio iure nulla explicabo quas consequatur, id deserunt ducimus labore error vitae omnis animi facilis harum debitis. Facere architecto impedit eaque excepturi dolorum optio nemo ab! Iusto, vel non veritatis dolorem debitis voluptatum provident omnis commodi perspiciatis velit distinctio! Deleniti, nam aliquid quidem repudiandae voluptates, excepturi aperiam nesciunt quo ad officia impedit. Ipsa eveniet culpa ullam odio amet ea cupiditate consectetur et? Illo, accusamus tempore. Dolor voluptas voluptatum asperiores esse illo eaque.</p>
	</div>
</div>



    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>

</body>
</html>

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Лучший способ достичь этого - создать дополнительный контейнер div.Внутри этого контейнера у вас есть свой фон и логотип с серым фоном в виде наложения.Я обновил ваш codepen соответственно.

.greyCircle {
    width: 40vh;
    height: 40vh;
    z-index: 5;
    background-color: #535252;
    border-radius: 50%;
}
.circle-container-overlay {
  position: absolute;
  width: 100%;
  height: 100%;
  align-items: center;
  justify-content: center;
  display: flex;
  top: 0;
}

.additional-outer-container {
  position: relative;
  height: 950px
}

Я рекомендую вам посмотреть Как сосредоточиться в CSS и Полное руководство по flexbox .Эти два сайта являются отличным ресурсом, когда дело доходит до создания макетов в CSS.

0 голосов
/ 02 февраля 2019

Центрирование во Flexbox

В flexbox самый простой способ для центрирования чего-либо - установить содержащий элемент на display: flex; или display: inline-flex;, а затем добавить align-items: center; (это будет центрировать все содержимое по вертикали) иjustify-content: center (это для горизонтального центрирования).

Как это:

* {
  margin: 0;
  padding: 0;
}

.flex-container {
  border: 5px solid red;
  display: flex;
  height: calc(100vh - 10px);
  width: calc(100vw - 10px);
}

.center-everything {
  align-items: center;
  justify-content: center;
}
<div class="flex-container center-everything">
  <strong>center me!</strong>
</div>

Поддержание соотношения сторон

Что касается поддержания соотношения сторон, вы можете определить height и width для каждого элемента.Если вам нужно, чтобы этот макет был адаптивным (иначе говоря, поддерживайте все пропорции при увеличении или уменьшении), вы можете использовать относительные единицы , чтобы гарантировать, что ваши пропорции фиксированы.

Создание элементов вЯкоря или кнопки с помощью обтекания

Создать элемент в кнопке так же просто, как обернуть его в теги <a></a> или <button></button>, которые являются встроенными тегами, которые должны поддерживать макет при использовании в качестве оберток.Затем вы можете настроить действия, выполняемые этими ссылками / кнопками, используя href, onclick или прослушиватели событий JavaScript (см. Мою демонстрацию ниже).Существует множество ресурсов в Интернете, если вы ищете что-то из этого.

Наложение и position: absolute

Что касается наложения, вы можете легко создать наложенный элемент, вложив его в контейнер и затем положиввложенный элемент над этим контейнером, используя position: absolute (это разрывает элемент из z-плоскости и позиционирует его относительно контейнера с position: relative).Вы можете установить height и width на 100%, так как этот вложенный элемент теперь относится к его контейнеру position: relative, поэтому эти настройки обеспечат наложение элемента на весь содержащий элемент.Затем вы можете позиционировать элемент, используя top: 0 и left: 0, что обеспечит прилегание элемента к двум сторонам его контейнера.

Хорошая статья по этому поводу: https://teamtreehouse.com/community/how-css-position-absolute-brings-the-overlay-element-to-the-front

Посмотрите эту демонстрацию с несколькими наложениями полупрозрачных цветов, используя position: absolute внутри контейнера position: relative (с забавным переключающим действием для ударов ногами):

const overlayYellow = document.querySelector(".overlay.yellow");
const overlayBlue = document.querySelector(".overlay.blue");
const buttonYellow = document.querySelector(".btn.yellow");
const buttonBlue = document.querySelector(".btn.blue");

buttonYellow.addEventListener('click', () => {
  toggleOverlay('yellow');
});

buttonBlue.addEventListener('click', () => {
  toggleOverlay('blue');
});

function toggleOverlay(color) {
  const overlay = (color === 'yellow') ? overlayYellow : overlayBlue;
  
  if (overlay.classList.contains('hidden')) {
    overlay.classList.remove('hidden');
  } else {
    overlay.classList.add('hidden');
  }
}
* {
  margin: 0;
  padding: 0;
}

.container {
  background: red;
  height: 100vh;
  width: 100vw;
}

.overlay {
  display: block;
  height: calc(100% - 10px);
  left: 5px;
  opacity: 0.5;
  position: absolute;
  top: 5px;
  width: calc(100% - 10px);
  z-index: 1;
}

.overlay.yellow {
  background: yellow;
}

.overlay.blue {
  background: blue;
}

.overlay.hidden {
  display: none;
}

.btn {
  cursor: pointer;
  height: 36px;
  position: absolute;
  right: 12px;
  width: 180px;
  z-index: 2;
}

.btn.yellow {
  top: 12px;
}

.btn.blue {
  top: 60px;
}
<div class="container">
  <div class="overlay yellow"></div>
  <div class="overlay blue"></div>
  <button class="btn yellow">Toggle yellow overlay!</button>
  <button class="btn blue">Toggle blue overlay!</button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...