align-self: flex start не отправляет дочерний элемент наверх - PullRequest
0 голосов
/ 02 декабря 2018

Я делаю элемент в javascript и добавляю его в гибкий контейнер.Контейнер, к которому я добавляю, содержит кнопку и отображение без div.Я хочу, чтобы элемент, который я делаю, был расположен в верхней части элемента div, к которому я его добавляю, и я стилизовал класс с помощью align-self: flex-start, но по какой-то причине это ничего не делает.Align-self: flex-end не работает ни один, ни любой из других align-self.Вот мой код:

// //handler to show text from eventData array
document.addEventListener('click', (e)=> {
    let noEvents = document.getElementsByClassName('no-Events')[0];
    let eventsDescContainer = document.querySelector('.events');

    if(e.target.classList.contains('day')){
        [...eventData['events']].forEach((event)=>{
            if(event['day']===e.target.innerHTML && event['month']===headerMonths.innerHTML && event['year']===headerYears.innerHTML){
                //span element to put Event text into
                let eventDesc = `${event['description']}`
                const span = document.createElement('span');
                let EventText = document.createTextNode(eventDesc);;
                //clear previous events message
                noEvents.style.display='none';
                clearEventText();

                //append to container
                span.appendChild(EventText)
                span.classList.add('event-desc', 'event-message');
                eventsDescContainer.appendChild(span);
            }  else {
                clearEventText();
                noEvents.style.display='initial';
                noEvents.innerHTML = `There are no events on ${headerMonths.innerHTML} ${e.target.innerHTML} ${headerYears.innerHTML}`;
            }
        });
    }
});




 <div class='events'>
                     //this span is hidden
                    <span class='no-Events event-message'>There are no events today</span>     //this button has no styles on it, it is just plain html 
                    <button class='show-event-form rotate'>Add new event</button>
                    //This is the span I want to go at the top of the container but it is positioned after the button
                    <span class='event-desc event-message'>text</span>
                </div>

Вот HTML-код для контейнера и созданного мною интервала.Кнопка не имеет стилей.

.events{
    height: 100%;
    display:flex;
    flex-direction: column;
    align-items: center; /*center children vertically*/
    overflow-y: auto;
}

.events .event-message {
    align-items: center;
    width: 80%;
    text-align: center;
    margin: 20px auto;
    padding: 10px 0;
    background-image: linear-gradient(to right, #649173, #dbd5a4 );
    border-radius: 3px;
    box-shadow: 3px 6px 10px #393a39;
}
//this is not working
.event-desc {
    align-self: flex-start;
}

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

У вас есть это в вашем коде:

.events{
    height: 100%;
    display:flex;
    flex-direction: column;
    align-items: center; /*center children vertically*/
    overflow-y: auto;
}

Ваш комментарий предполагает неправильное представление: align-items: center делает не центрирование дочерних элементов вертикально в контейнере в направлении столбцов.Он центрирует их по горизонтали.

Свойства justify-* применяются к главной оси.

Свойства align-* применяются к поперечной оси.

Эти оси смещаются в зависимости отна flex-direction.

Вот полное объяснение:

0 голосов
/ 02 декабря 2018

Я изменил направление flex-direction в моем контейнере на flex-direction: column-reverse и justify-content: начал посылать его в верхнюю часть моего контейнера, и это решило мою проблему.Я все еще не уверен, почему align-self работал.

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