Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 11
1

Почему такое поведение у float-элемента, и как исправить?

05.10.2015, 18:15. Показов 740. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, коллеги.

Наткнулся на странное поведение у float-элемента, после диагностики рабочий код сократился до вот такого фиддла:
HTML5
1
2
3
4
<div id="div">
    <span id="one">One</span>
    <span id="two">Two</span>
</div>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#one, #two {
    display:inline-block;
    background: green;
}
#two {
    float:left;
}
 
@media screen and (max-width: 320px) {
    #one, #two {
        display: block;
        background: red;
        float: none;
    }
}
https://jsfiddle.net/7re8j448/1/

У меня проблема проявляется в chrome 45.0.2454.101 m
Суть проблемы. Если при загрузке страницы (или нажатии Run, само собой) ширина рабочей области > 320px (зелёный bg), то элементы становятся так, как ожидается — two уплывает влево, получаем twoone. Но если отресайзить экран до < 320px (красного bg), а потом вернуть обратно, two почему-то не поднимается в первую строку, а остаётся во второй.

Вопрос, который гложет меня последние полдня — какого чёрта? Как от этого избавиться, не меняя функциональности?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2015, 18:15
Ответы с готовыми решениями:

почему сбрасывается background родителя, когда в нем 3 элемента с float:left?
http://jsfiddle.net/7MTZf/ вот собственно, с двумя флоатами работает, с третьим бэкграунд...

cannot convert `float' to `float*. Почему так происходит?
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже ...

[Error] expected primary-expression before 'float' ребята, как исправить
#include &lt;iostream&gt; #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;cstdlib&gt; #include&lt;locale.h&gt; ...

Почему точность Double такая же как у Float ?
Вначале столкнулся с проблемой float: time=65536.0f; (можно и больше число указать) time+=0.003;...

5
29 / 29 / 22
Регистрация: 27.12.2013
Сообщений: 368
05.10.2015, 18:25 2
эмм... Если я тебя правильно понял, то проблема в том, что
CSS
1
float: left
прописан только для блока two, и потому он прижимается к левому краю игнорируя блок one

Добавлено через 4 минуты
https://jsfiddle.net/5s9k41wn/
HTML5
1
2
3
4
<div id="div">
    <span id="one">One</span>
    <span id="two">Two</span>
</div>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#one, #two {
    display:inline-block;
    background: green;
    margin: 0px;
    padding: 0px;
    float:left;
}
 
#two{
   margin-left: 0px; 
}
 
@media screen and (max-width: 320px) {
    #one, #two {
        display: block;
        background: red;
        float: none;
    }
}
Добавлено через 29 секунд
Ты так хотел сделать?
0
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 11
05.10.2015, 20:15  [ТС] 3
Спасибо за ответ, но нет. Видимо, я недостаточно внятно описал, в чём заключается проблема.
Проблема в том, что из такого состояния:

в результате ресайзов страницы вёрстка принимает такой вид:

и никакими средствами, кроме перезагрузки страницы или, например, отключением и включением float в инструментах разработчика, в изначальное состояние не возвращается.
Изображения
  
0
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 22
06.10.2015, 10:09 4
Может потому, что в 11й строке ты их делаешь блочными - блочный элемент занимает 100% ширины страницы. Вот они не вмещаясь и скачут.
Измени в 5й строке (two) на (one), красивее будет
0
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 11
06.10.2015, 14:51  [ТС] 5
Да нет же! Они должны "скакать", в этом и идея.

Например, при ширине окна < 320px блоки выстраиваются вертикально, мобильное меню. При ширине 320px и больше становятся в ряд, при этом один из пунктов становится кнопкой и должен занять крайнее левое положение.

В этом мой кейс. Из примера я убрал всё это, потому что оно не играет роли. Осталось только то, что влияет на непонятное поведение, + цвет фона, для наглядности.
0
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 22
11.10.2015, 11:08 6
Это может быть проблема ресурса - где вы тестируете код (ошибки изменения экрана).
Сделайте документ и протестируйте:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    
#one, #two {
    display:inline-block;
    background: green;
}
#two {
    float:left;
}
 
@media screen and (max-width: 320px) {
    #one, #two {
        display: block;
        background: red;
        float: none;
    }
}   
    </style>
</head>
<body>
 
    <div id="div">
    <span id="one">One</span>
    <span id="two">Two</span>
</div>
    
</body>
</html>
0
11.10.2015, 11:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2015, 11:08
Помогаю со студенческими работами здесь

Вычислить значение функции (неожиданное поведение программы - как исправить?)
Мне нужно вичислить значение функции у= (4*(x^3)-2*(x^2)+5);для значении x от -3 до 1.Написан такой...

Поведение ::after как блочного элемента
Можно ли сделать чтоб псевдоэлемент вел себя так же как и обычные элементы? В данном примере...

Как исправить? warning C4244: 'initializing' : conversion from 'int' to 'float' [Код внутри]
В результате если ввести 3 5 6 9 11 (оно должно сложить 5+6+9 и разделить эту сумму на три) выдаёт...

Непонятное поведение div при float
Вот такой код: &lt;body&gt; &lt;div class=&quot;container&quot;&gt; &lt;div class=&quot;block...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru