Элемент не выравнивается по центру к div - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь добиться следующего эффекта , и это мой код.

<style type ="text/css">
 @font-face {
    font-family: Montserrat;
    src: url("Montserrat_Light.otf") format("opentype");
}
body{
    background-color: #c3c8c0;
}
button {
    font-family: Montserrat;
    font-size: 36px;
    color: #38332b;
    
    border-radius: 60px;
    border: 2.2px solid transparent;
    background: linear-gradient(#d8d8d8, #d0d0d0), linear-gradient(#fefcfc, #a8a4a9 60%);
    background-clip: padding-box, border-box;
    background-origin: padding-box, border-box;

    box-shadow: 0px 1px 0px 1px #fec75a, 0px 20px 20px 2px #b79d89, 0px 0px 20px 10px #d6cbc6; /*d6cbc6 c8c3c0*/

    height: 120px;
    width: 120px;
}
button:focus{
    outline: none;
}
.buttonholder{
    height: 160px;
    width: 160px;
    border-radius: 80px;
    background: #c3c8c0;
    box-shadow: 0px 0px 2px 1px #d6d0cc;
}
<body>

<div class="buttonholder">
    <button>
        21
    </button>
</div>
</body>

Однако, как вы можете видеть, основная часть кнопки (светлая часть) не выровнена должным образом с большим тусклым кругом. Кто-нибудь знает, почему это так, и как это исправить? Спасибо за любую помощь.

Ответы [ 2 ]

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

Вы можете добавить достаточное поле вокруг кнопки, чтобы размеры окна кнопки (ширина + 2 * поле) суммировались с размером элемента div. Это, кажется, немного от agile: измените любой из размеров, и вам придется поиграться с другими свойствами, чтобы сохранить отношения.

IIU C (я также изучаю это), в настоящее время рекомендуется использовать гибкую коробку.

@font-face {
    font-family: Montserrat;
    src: url("Montserrat_Light.otf") format("opentype");
}
body{
    background-color: #c3c8c0;
}
button {
    font-family: Montserrat;
    font-size: 36px;
    color: #38332b;
    
    border-radius: 60px;
    border: 2.2px solid transparent;
    background: linear-gradient(#d8d8d8, #d0d0d0), linear-gradient(#fefcfc, #a8a4a9 60%);
    background-clip: padding-box, border-box;
    background-origin: padding-box, border-box;

    box-shadow: 0px 1px 0px 1px #fec75a, 0px 20px 20px 2px #b79d89, 0px 0px 20px 10px #d6cbc6; /*d6cbc6 c8c3c0*/

    height: 120px;
    width: 120px;
}

button:focus{
    outline: none;
}

.buttonholder{
    height: 160px;
    width: 160px;
    border-radius: 80px;
    background: #c3c8c0;
    box-shadow: 0px 0px 2px 1px #d6d0cc;

/* added to make the container a flex box and center its content */
display: flex;
justify-content: center;
align-items: center
}
<div class="buttonholder">
    <button>
        21
    </button>
</div>

Свойство display:flex приводит к тому, что div .buttonholder выглядит как flex-box. Возможности гибкого блока включают в себя простые средства для центрирования контента по горизонтали, используя justify-content:center;, и для центрирования контента по вертикали, используя align-items:center;.

Если вам требуется поддержка старых браузеров, которые не поддерживают поддержка display:flex, другой подход будет использовать абсолютное позиционирование кнопки относительно содержащего div в сочетании с переводом:

@font-face {
    font-family: Montserrat;
    src: url("Montserrat_Light.otf") format("opentype");
}
body{
    background-color: #c3c8c0;
}
button {
    font-family: Montserrat;
    font-size: 36px;
    color: #38332b;
    
    border-radius: 60px;
    border: 2.2px solid transparent;
    background: linear-gradient(#d8d8d8, #d0d0d0), linear-gradient(#fefcfc, #a8a4a9 60%);
    background-clip: padding-box, border-box;
    background-origin: padding-box, border-box;

    box-shadow: 0px 1px 0px 1px #fec75a, 0px 20px 20px 2px #b79d89, 0px 0px 20px 10px #d6cbc6; /*d6cbc6 c8c3c0*/

    height: 120px;
    width: 120px;

/* added to get centered positioning */
margin:0;
position:absolute;
top:50%;
left:50%;
transform: translate(-50%, -50%);
}
button:focus{
    outline: none;
}
.buttonholder{
    height: 160px;
    width: 160px;
    border-radius: 80px;
    background: #c3c8c0;
    box-shadow: 0px 0px 2px 1px #d6d0cc;

/* added to use absolute positioning of content relative to the holder */
position:relative;
}
<div class="buttonholder">
    <button>
        21
    </button>
</div>

Я думаю, что это может быть более надежным.

Объяснить: position:absolute для кнопки обеспечивает позиционирование относительно ближайшего расположенного предка. Добавление position:relative в .buttonholder делает div позиционируемым элементом, но без каких-либо дополнительных CSS не меняет его положение.

Назад к кнопке: установка значения top / left на 50% устанавливает верхний левый угол кнопки на половину поперек / вниз по ширине / высоте div - для текущего размера div, (80 , 80), но это автоматически отрегулируется, если вы измените размер div. А затем transform: translate(-50%, -50%) перемещает кнопку назад наполовину. Конечный результат заключается в том, что кнопка центрируется внутри элемента div и остается в центре, даже если вы измените размеры кнопки или элемента div.

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

Вам нужно расположить кнопку в центре. Я изменил твой код. Приведенный ниже код работает нормально, как и ожидалось.

<style type ="text/css">
 @font-face {
    font-family: Montserrat;
    src: url("Montserrat_Light.otf") format("opentype");
}
body{
    background-color: #c3c8c0;
}
button {
    font-family: Montserrat;
    font-size: 36px;
    color: #38332b;
    
    border-radius: 60px;
    border: 2.2px solid transparent;
    background: linear-gradient(#d8d8d8, #d0d0d0), linear-gradient(#fefcfc, #a8a4a9 60%);
    background-clip: padding-box, border-box;
    background-origin: padding-box, border-box;

    box-shadow: 0px 1px 0px 1px #fec75a, 0px 20px 20px 2px #b79d89, 0px 0px 20px 10px #d6cbc6; /*d6cbc6 c8c3c0*/

    height: 120px;
    width: 120px;
margin:20px;
}
button:focus{
    outline: none;
}
.buttonholder{
    height: 160px;
    width: 160px;
    border-radius: 80px;
    background: #c3c8c0;
    box-shadow: 0px 0px 2px 1px #d6d0cc;
}
<body>

<div class="buttonholder">
    <button>
        21
    </button>
</div>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...