• 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

VPS Starter Arubacloud
+1 głos
257 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 (255,800 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ź 168 wizyt
pytanie zadane 6 czerwca 2019 w HTML i CSS przez polonez11212 Początkujący (350 p.)
0 głosów
1 odpowiedź 357 wizyt
0 głosów
2 odpowiedzi 159 wizyt
pytanie zadane 19 maja 2016 w HTML i CSS przez DreaM Użytkownik (840 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...