• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Złe rozmieszczenie elementów na stronie css

Object Storage Arubacloud
+1 głos
219 wizyt
pytanie zadane 17 października 2021 w HTML i CSS przez Leonardo Użytkownik (770 p.)

Tworzę chat w js i php, jednak niezbyt ogarniam przy tym css, zajmowałem się tym bardzo mało. Wygląda to tak:

Mój kod to:

<div id="main">
	<div id="chatbox">
		<div id="messbox"></div>
		<div id="sendbox">
				<input type="text" name="mess" placeholder="Type here a message" id="messin" required />
				<button id="messsend" value="Send" onclick="send()">Send</button>
		</div>
	</div>
</div>
#main{
	width: 80%;
	margin-left: 10%;
	margin-right: 10%;
	min-height: 200px;
	background-color: #ded9d9;
	padding-top: 20px;
	padding-bottom: 40px;
	text-align: center;
}
#chatbox{
	margin: auto;
	height: 300px;
	width: 300px;
}
#messbox{
	width: 100%;
	height: 270px;
	overflow: hidden; 
	overflow-y: scroll;
	border: 1px solid;
}
#sendbox{
	width: 100%;
	padding: 10px;
	height: 30px;
}
#messin{
	width: 50%;
	height: 100%;
}
#messsend{
	width: 20%;
	height: 100%;
}
.mess{
	width: 100%;
	height: 50px;
}
.sender{
	border: 1px solid;
	padding: 10px;
	background-color: black;
	color: white;
}
.messcon{
	word-wrap: break-word;
	max-width: 50%;
	border: 1px solid;
	padding: 10px;
}

Oraz fragment wstawiający wiadomości przez php (do messbox):

if($row['sender']==$_SESSION['name']){
	echo '
		<div class="mess"> 
		<div class="messcon" style="float: right;">
			'.$row['text'].'
		</div>
		<div class="sender" style="float: right;">
			'.$row['sender'].' 
		</div>
	        </div>';
}
else{
	echo '
		<div class="mess"> 
		<div class="sender" style="float: left;">
			'.$row['sender'].' 
		</div>
		<div class="messcon" style="float: left;">
			'.$row['text'].'
		</div>
        	</div>';
}

Jak zrobić, by wiadomości na siebie nie nachodziły, jak widać na zdjęciu? Męczę sie już z tym długo

2 odpowiedzi

+3 głosów
odpowiedź 18 października 2021 przez cava96 Gaduła (3,940 p.)
Możesz zrobić tak: główny kontener (ustalasz mu jakąś szerokość, wysokość, overflow itd.), to jest rodzic i ma display: flex. Następnie każdy jego potomek (kolejne divy) mają 100% jego szerokości i w nich umieszczasz kolejne elementy od wyświetlenia nazwy użytkownika i treści wiadomości. W zależności czy to jest odebrana wiadomość czy wysłana nadajesz im odpowiedni align. Ważne jest też, żeby główny kontener miał ustawione flex-wrap: nowrap i wyświetlał elementy w wierszu a nie w kolumnie. Poczytaj o Flex, bardzo ułatwia budowę layoutów.

Jeżeli będziesz chciał to mogę wysłać Ci w prywatnej wiadomości mój kod, który kiedyś pisałem i też dotyczy właśnie chat room.
0 głosów
odpowiedź 19 października 2021 przez VBService Ekspert (253,340 p.)
edycja 19 października 2021 przez VBService

Spróbuj flex justify-content użyć. Przy podawaniu nazw klas dla elementu html możesz po spacji dodać kolejną klasę np.

<div class="mess right">
. . .
<div class="mess left">

 

proponowane zmiany w Twoim kodzie (szczególnie w css-ie)

<div id="main">
  <div id="chatbox">
    <div id="messbox">
 
      <!-- dodane dla demonstracji -->
      <div class="mess right"> 
        <div class="messcon">
          Lor
        </div>
        <div class="sender">
          sender
        </div>
      </div>
      <div class="mess left"> 
        <div class="sender">
          sender
        </div>
        <div class="messcon">
          Lorem
        </div>
      </div>
      <div class="mess right"> 
        <div class="messcon">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
        </div>
        <div class="sender">
          sender
        </div>
      </div>
      <div class="mess left"> 
        <div class="sender">
          sender
        </div>
        <div class="messcon">
          Lor
        </div>
      </div>      
      <!-- /dodane dla demonstracji -->
 
    </div>
    <div id="sendbox">
      <input type="text" name="mess" placeholder="Type here a message" id="messin" required />
      <button id="messsend" value="Send" onclick="send()">Send</button>
    </div>
  </div>
</div>
#main{
    width: 80%;
    margin-left: 10%;
    margin-right: 10%;
    min-height: 200px;
    background-color: #ded9d9;
    padding-top: 20px;
    padding-bottom: 40px;
    text-align: center;
}
#chatbox{
    margin: auto;
    height: 300px;
    width: 300px;
}
#messbox{
    width: 100%;
    height: 270px;
    overflow: hidden; 
    overflow-y: scroll;
    border: 1px solid;
}
#sendbox{
    width: 100%;
    padding: 10px;
    height: 30px;
}
#messin{
    width: 50%;
    height: 100%;
}
#messsend{
    width: 20%;
    height: 100%;
}
.mess{
    display: flex;
    width: 100%;
    padding-bottom: 5px;
}
.sender{
    border: 1px solid black;
    padding: 10px;
    background-color: black;
    color: white;
    max-height: 20px;
}
.messcon{
    word-wrap: break-word;
    max-width: 50%;
    border: 1px solid black;
    padding: 10px;
}
.right {
  justify-content: flex-start;
}
.left {
  justify-content: flex-end;
}
if($row['sender']==$_SESSION['name']){
    echo '
        <div class="mess right"> 
          <div class="messcon">
            '.$row['text'].'
          </div>
          <div class="sender">
            '.$row['sender'].'
          </div>
       </div>';
}
else{
    echo '
        <div class="mess left"> 
          <div class="sender">
            '.$row['sender'].'
          </div>
          <div class="messcon">
            '.$row['text'].'
          </div>
        </div>';
}

Podobne pytania

0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 6 czerwca 2019 w HTML i CSS przez polonez11212 Początkujący (350 p.)
0 głosów
1 odpowiedź 275 wizyt
0 głosów
2 odpowiedzi 152 wizyt
pytanie zadane 19 maja 2016 w HTML i CSS przez DreaM Użytkownik (840 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...