HTML Макет с поплавковой конфигурацией - выравнивание по центру - PullRequest
2 голосов
/ 20 марта 2020

У меня есть плавающий макет в HTML, и я хочу разместить поля как в начале, в конце, так и в середине.

Вот мой фрагмент:

html,
body {
  height: 100%;
  margin: 0;
  text-align: center;
}

#root {
  background-color: blue;
  height: 80%;
  width: 80%;
}

.tray {
  box-sizing: border-box;
  background-color: red;
  border: thin solid black;
}

.tray-top,
.tray-bottom {
  height: 48px;
  line-height:48px;
  clear: both;
}

.tray-left,
.tray-right {
  width: 48px;
  height: calc(100% - 96px);
  float: left;
  position: relative;
}

.tray-right {
  float: right;
}

.button {
  background-color: yellow;
  width: 46px;
  height: 46px;
}

.tray-top .button,
.tray-bottom .button {
  max-width: 33%;
}

.tray-left .button,
.tray-right .button {
  max-height: 33%;
}

.tray-top .button.begin,
.tray-bottom .button.begin {
  float: left;
}

.tray-top .button.middle,
.tray-bottom .button.middle {
  float: left;
}

.tray-top .button.end,
.tray-bottom .button.end {
  float: right;
}

.button.middle {
}


.tray-left .button.end,
.tray-right .button.end {
  position: absolute;
  bottom: 0px;
}
<div id="root">
    <div class="tray tray-top">
		<div class="button begin">1</div>
		<div class="button middle">2</div>
		<div class="button end">3</div>
	</div>
    <div class="tray tray-left">
		<div class="button begin">4</div>
		<div class="button middle">5</div>
		<div class="button end">6</div>
	</div>
    <div class="tray tray-right">
		<div class="button begin">7</div>
		<div class="button middle">8</div>
		<div class="button end">9</div>
	</div>
    <div class="tray tray-bottom">
		<div class="button begin">10</div>
		<div class="button middle">11</div>
		<div class="button end">12</div>
	</div>
</div>

Как я могу сделать (см. Это на полной странице):

  • Box2 и Box11 до go в середине ( удерживая box3 и box12 в конце)?
  • Box5 и Box8 до go в середине по вертикали?
  • Box6 и Box9 до go до конца по вертикали?

Я не хочу придерживаться этого макета, но я хотел бы сохранить самую широкую поддержку всех браузеров (включая IE11 тоже).

Обратите внимание, что # root имеет 80% ширины и высоты. Это означает только размер # root! = Размер тела (поэтому абсолютное позиционирование и left: 50% - это не путь к go).

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Я бы добавил немного flexbox для этого. Было бы трудно сделать это только с помощью float и, вероятно, не очень хорошо использовать позиционирование:

html,
body {
  height: 100%;
  margin: 0;
  text-align: center;
}

#root {
  background-color: blue;
  height: 85%;
  width: 85%;
}

.tray {
  box-sizing: border-box;
  background-color: red;
  border: thin solid black;
}

.tray-top,
.tray-bottom {
  height: 48px;
  line-height: 48px;
  clear: both;
}

.tray-left,
.tray-right {
  width: 48px;
  height: calc(100% - 96px);
  float: left;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
}

.tray-right {
  float: right;
}

.button {
  background-color: yellow;
  width: 46px;
  height: 46px;
  display:inline-block;
}
.begin {
 float:left;
}
.end {
 float:right;
}
<div id="root">
  <div class="tray tray-top">
    <div class="button begin">1</div>
    <div class="button middle">2</div>
    <div class="button end">3</div>
  </div>
  <div class="tray tray-left">
    <div class="button begin">4</div>
    <div class="button middle">5</div>
    <div class="button end">6</div>
  </div>
  <div class="tray tray-right">
    <div class="button begin">7</div>
    <div class="button middle">8</div>
    <div class="button end">9</div>
  </div>
  <div class="tray tray-bottom">
    <div class="button begin">10</div>
    <div class="button middle">11</div>
    <div class="button end">12</div>
  </div>
</div>
0 голосов
/ 20 марта 2020

Это решает мою проблему, но я не уверен, что это самое сложное решение для этой проблемы:

html,
body {
  height: 100%;
  margin: 0;
  text-align: center;
}

#root {
  background-color: blue;
  height: 80%;
  width: 80%;
}

.tray {
  box-sizing: border-box;
  background-color: red;
  border: thin solid black;
}

.tray-top,
.tray-bottom {
  height: 48px;
  line-height:48px;
  clear: both;
  position: relative;
}

.tray-left,
.tray-right {
  width: 48px;
  height: calc(100% - 96px);
  float: left;
  position: relative;
}

.tray-right {
  float: right;
}

.button {
  background-color: yellow;
  width: 46px;
  height: 46px;
}

.tray-top .button,
.tray-bottom .button {
  max-width: 33%;
}

.tray-left .button,
.tray-right .button {
  max-height: 33%;
}

.tray-top .button.begin,
.tray-bottom .button.begin {
  float: left;
}

.tray-top .button.middle,
.tray-bottom .button.middle {
  float: left;
}

.tray-top .button.end,
.tray-bottom .button.end {
  float: right;
}

.button.middle {
  float: left;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
}

.tray-left .button.end,
.tray-right .button.end {
  position: absolute;
  bottom: 0px;
}
<div id="root">
    <div class="tray tray-top">
		<div class="button begin">1</div>
		<div class="button middle">2</div>
		<div class="button end">3</div>
	</div>
    <div class="tray tray-left">
		<div class="button begin">4</div>
		<div class="button middle">5</div>
		<div class="button end">6</div>
	</div>
    <div class="tray tray-right">
		<div class="button begin">7</div>
		<div class="button middle">8</div>
		<div class="button end">9</div>
	</div>
    <div class="tray tray-bottom">
		<div class="button begin">10</div>
		<div class="button middle">11</div>
		<div class="button end">12</div>
	</div>
</div>

Я должен был сделать средние поля position: absolute и их родителей на position: relative, тогда я смогу изменить их положение в их родителях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...