Как центрировать кнопку, расположенную относительно

#html #css #web #frontend #web-frontend

Вопрос:

У меня есть кнопка, которая расположена относительно ее родителя. Проблема в том, что когда эта родительская ширина меняется, мои кнопки больше не находятся в центре, и я не могу использовать margin: 0 auto

Я покажу несколько изображений, чтобы продемонстрировать, что я имею в виду:

изображение

посмотрите, как еда и гамбургер не центрированы, кстати, они расположены в центре экрана шириной 400 пикселей

 .card-container {
  width: 45%;
  margin-bottom: 1rem;
  background: #fff;
  border: 1px solid #707070;
  border-radius: 20px;
}

.card-container * {
  margin: 0;
  padding: 0 8px;
}


/* top-part */

.top-part {
  font-size: 1.1rem;
  font-weight: 700;
  text-align: center;
  padding: 2rem 0;
  border-bottom: 1px solid #808080;
}


/* meal amp; burger */

.middle-part {
  text-align: center;
  position: absolute;
  -webkit-box-align: center;
  -webkit-box-pack: center;
  display: -webkit-box;
}

img {
  width: 12em;
  height: 10em;
}

.meal-burger-btn {
  position: relative;
  background: #fff;
  border: 1px solid #808080;
  border-radius: 50%;
  width: 3.5rem;
  padding: 1.3em 0;
  top: -28px;
  left: 15%;
  margin: auto;
} 
 <div class="card-container">
  <div class="top-part">
    <p>crazy burger</p>
  </div>

  <div class="middle-part">
    <button class="meal-burger-btn">meal</button>
    <button class="meal-burger-btn">burger</button>
  </div>

  <div class="bottom-part">
    <p class="price price-active">2.0 bd</p>
    <p class="price">1.7 bd</p>

    <div class="card-image-container">
      <img src="https://www.freepngimg.com/thumb/burger/4-2-burger-png-file.png" alt="">
    </div>

    <p class="ingredients">ingredients:</p>
    <p class="ingredients-2">Beef patty - Toasted burger buns - Bacon - Onion rings - Cheddar cheese - Crazy Sauce</p>
  </div>
</div> 

Я попробовал решение w3school, и оно не сработало, я также пробовал другой вопрос о переполнении стека, также не сработал

Ответ №1:

.средняя часть можете ли вы удалить функцию position:absolute здесь и попробовать?

Редактировать..

И .еда-бургер-btn -> >слева: удалить функцию

Комментарии:

1. это сообщение с ответом может быть комментарием, поэтому, пожалуйста, продемонстрируйте его с помощью фрагмента кода

Ответ №2:

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

 .card-container {
  width: 45%;
  margin-bottom: 1rem;
  background: #fff;
  border: 1px solid #707070;
  border-radius: 20px;
}

.card-container * {
  margin: 0;
  padding: 0 8px;
}


/*
-----
top-part
-----
*/

.top-part {
  font-size: 1.1rem;
  font-weight: 700;
  text-align: center;
  padding: 2rem 0;
  border-bottom: 1px solid #808080;
}


/*
----
meal amp;amp; burger
----
*/

.middle-part {
  text-align: center;
  -webkit-box-align: center;
  -webkit-box-pack: center;
  display: -webkit-box;
  margin-top: -1.75rem;
  margin-left: auto;
  margin-right: auto;
}

.meal-burger-btn {
  background: #fff;
  border: 1px solid #808080;
  border-radius: 50%;
  width: 3.5rem;
  height: 3.5rem;
  padding: 0;
  line-height: 3.2rem
} 
 <div class="card-container">
  <div class="top-part">
    <p>crazy burger</p>
  </div>

  <div class="middle-part">
    <button class="meal-burger-btn">meal</button>
    <button class="meal-burger-btn">burger</button>
  </div>

  <div class="bottom-part">
    <p class="price price-active">2.0 bd</p>
    <p class="price">1.7 bd</p>

    <div class="card-image-container">
      <img src="images/IMG_0406_LI.jpg" alt="">
    </div>

    <p class="ingredients">ingredients:</p>
    <p class="ingredients-2">Beef patty - Toasted burger buns - Bacon - Onion rings - Cheddar cheese - Crazy Sauce</p>
  </div>
</div> 

Ответ №3:

Ну , если вы должны использовать абсолютную позицию, вам нужно придать ей ширину 100%, и она будет использовать все пространство, которое у нее есть, в соответствии с ее родителем, прямо сейчас абсолютно позиционированный div имеет ширину автоматически, и ширина будет расширяться только в соответствии с содержимым, которое в нем есть . Не нужно помещать самого родителя в центр , а скорее централизовать содержимое в нем.

 middle-part{
  text-align: center;
  position: absolute;
  -webkit-box-align: center;
  -webkit-box-pack: center;
  display: -webkit-box;
  width:100%;
  width:-webkit-fill-available;
}
 

Помните , что добавление центра в div просто не само по себе , но влияние применяется к содержимому или дочерним элементам в нем.
Кроме того , я бы посоветовал заглянуть в flex-box , он очень полезен, когда вы хотите легко создавать CSS, который следует последовательному шаблону.

Также не используйте поля/сверху/слева/отступы для центрирования , они всегда будут увеличиваться при изменении разрешения , если только вы не используете с ними Авто.