A mobile chat interface. You can write, send image and... switch user! Hope you'll enjoy :)
A Pen by Simone Giannangeli on CodePen.
| main | |
| .change.firstView | |
| .Avatar | |
| img.second(src="http://davidsclassiccars.com/images/full/rare-1964-chevelle-malibu-ss-4-speed-convertible-true-supersport-7.jpg") | |
| img.first(src="https://pbs.twimg.com/profile_images/456212657553432576/wlvb6fuq.jpeg") | |
| .Name | |
| span.second Vincent Vega | |
| span.first Jules Winnfield | |
| .btnChange Switch! | |
| .chat.start.firstView | |
| .Contact | |
| .btnBack | |
| svg(width="30px" height="60px" viewBox="0 0 30 60") | |
| polyline(class="" points="13.9,38 6.5,30 13.9,22") | |
| .contactInfo | |
| .Avatar.active | |
| img.second(src="http://davidsclassiccars.com/images/full/rare-1964-chevelle-malibu-ss-4-speed-convertible-true-supersport-7.jpg") | |
| img.first(src="https://pbs.twimg.com/profile_images/456212657553432576/wlvb6fuq.jpeg") | |
| .Name | |
| span.second Vincent Vega | |
| span.first Jules Winnfield | |
| .Status Active now | |
| .btnOptions | |
| svg(width="30px" height="60px" viewBox="0 0 30 60") | |
| path(class="" d="M13,22.6c0-1.1,0.9-2,2-2s2,0.9,2,2c0,1.1-0.9,2-2,2S13,23.8,13,22.6z M15,28c-1.1,0-2,0.9-2,2c0,1.1,0.9,2,2,2s2-0.9,2-2 C17,28.9,16.1,28,15,28z M15,35.4c-1.1,0-2,0.9-2,2c0,1.1,0.9,2,2,2s2-0.9,2-2C17,36.2,16.1,35.4,15,35.4z") | |
| .modalAttachment | |
| .preview | |
| .msgSpace | |
| div | |
| ul.msg | |
| li.date | |
| span yesterday | |
| li.first | |
| div Okay so, tell me again about the hash bars? | |
| time 07:12 AM | |
| li.second | |
| div Okay what d'you want to know? | |
| time 07:12 AM | |
| li.first | |
| div Hash is legal there, right? | |
| time 07:12 AM | |
| li.second | |
| div Yeah, it's legal, but is ain't a hundred percent legal 🤓 | |
| time 07:12 AM | |
| li.second | |
| div I mean you can't walk into a restaurant, roll a joint, and start puffin' away. I mean they want you to smoke in your home or certain designated places... | |
| time 07:13 AM | |
| li.first | |
| div Those are hash bars? 😍 | |
| time 07:13 AM | |
| li.second | |
| div Yeah, it breaks down like this, okay: it's legal to buy it, it's legal to own it and, if you're the proprietor of a hash bar, it's legal to sell it. it's legal to carry it, but that doesn't matter 'cause... | |
| time 07:14 AM | |
| li.second | |
| div ...get a load of this, alright... | |
| time 07:14 AM | |
| li.second | |
| div ...if you get stopped by a cop in Amsterdam, it's illegal for them to search you. I mean that's a right that the cops in Amsterdam don't have 👮🏻🖕 | |
| time 07:14 AM | |
| li.first | |
| div Oh, man... I'm goin', that's all there is to it | |
| time 07:14 AM | |
| li.first | |
| div I'm fuckin' goin' 🤪🤪🤪 | |
| time 07:15 AM | |
| li.second | |
| div You'll dig it the most. But you know what the funniest thing about Europe is? | |
| time 07:15 AM | |
| li.first | |
| div What? | |
| time 07:15 AM | |
| li.second | |
| div It's the little differences. I mean they got the same shit over there, we got here, but it's just there's a little difference ❤️ | |
| time 07:15 AM | |
| li.first | |
| div Examples? | |
| time 07:16 AM | |
| li.second | |
| div Alright, well you can walk into a movie theatre in Amsterdam and buy a beer. And I don't mean in a paper cup. I'm talkin' about a glass of beer. | |
| time 07:16 AM | |
| li.second | |
| div And in Paris, you can buy a beer at MacDonald's. | |
| time 07:16 AM | |
| li.second | |
| div You know what they call a Quarter Pounder with Cheese in Paris? | |
| time 07:16 AM | |
| li.first | |
| div They don't call it a Quarter Pounder with Cheese? | |
| time 07:17 AM | |
| li.second | |
| div No, man, they got the metric system there, they wouldn't know what the fuck a Quarter Pounder is. | |
| time 07:17 AM | |
| li.first | |
| div What'd they call it? | |
| time 07:17 AM | |
| li.second | |
| div They call it Royale with Cheese 👑 | |
| time 07:17 AM | |
| li.first | |
| div 🤯 | |
| time 07:17 AM | |
| li.first | |
| div What'd they call a Big Mac? | |
| time 07:17 AM | |
| li.second | |
| div Big Mac's a Big Mac, but they call it Le Big Mac. | |
| time 07:17 AM | |
| li.first | |
| div 😂😂😂 | |
| time 07:17 AM | |
| li.first | |
| div What do they call a Whopper? | |
| time 07:18 AM | |
| li.second | |
| div I dunno, I didn't go into a Burger King 🤔 | |
| time 07:18 AM | |
| li.second | |
| div You know what they put on french fries in Holland instead of ketchup? | |
| time 07:18 AM | |
| li.first | |
| div What? | |
| time 07:18 AM | |
| li.second | |
| div Mayonnaise! 😱 | |
| time 07:18 AM | |
| li.first | |
| div Goddamn! 🤢 | |
| time 07:18 AM | |
| li.second.img | |
| div | |
| img(src="https://www.rtl.be/info/GED/00900000/907700/907767.jpg") | |
| span.caption I seen 'em do it, man. They fuckin' drown 'em in this shit. | |
| time 07:18 AM | |
| li.first | |
| div 🤮🤮🤮 | |
| time 07:19 AM | |
| .input | |
| .btnAttach | |
| input(type="file" id="attachment" accept=".png, .jpg, .jpeg") | |
| label(for="attachment") | |
| svg(width="48px" height="48px" viewBox="0 0 48 48") | |
| path(class="" d="M22,17.5v11c0,1.1,0.9,2,2,2h0c1.1,0,2-0.9,2-2v-11c0-2.2-1.8-4-4-4h0c-2.2,0-4,1.8-4,4v11c0,3.3,2.7,6,6,6h0 c3.3,0,6-2.7,6-6v-9.2") | |
| input(type="text" id="msgInput" placeholder="Type here") | |
| button.send(disabled="true") | |
| svg(width="48px" height="48px" viewBox="0 0 48 48") | |
| path(class="" d="M34.6,22.6l-16.3-8.4c-1.1-0.6-2.5,0.4-2.3,1.6l0.8,6.1c0.1,0.7,0.7,1.3,1.5,1.4l9.8,0.7l-9.8,0.7 c-0.7,0.1-1.4,0.6-1.5,1.4L16,32.1c-0.2,1.3,1.1,2.2,2.3,1.6l16.3-8.4C35.7,24.8,35.7,23.2,34.6,22.6z") |
A mobile chat interface. You can write, send image and... switch user! Hope you'll enjoy :)
A Pen by Simone Giannangeli on CodePen.
| // change chat | |
| $(".change").click(function(){ | |
| if ($(".chat").hasClass("firstView")) { | |
| $(".chat").addClass("changeScreen"); | |
| $(".change").addClass("changeScreen"); | |
| setTimeout(function(){ | |
| $(".chat").removeClass("firstView"); | |
| $(".chat").addClass("secondView"); | |
| $(".change").removeClass("firstView"); | |
| $(".change").addClass("secondView"); | |
| }, 500); | |
| setTimeout(function(){ | |
| $(".chat").removeClass("changeScreen"); | |
| $(".change").removeClass("changeScreen"); | |
| }, 1000); | |
| } else { | |
| $(".chat").addClass("changeScreen"); | |
| $(".change").addClass("changeScreen"); | |
| setTimeout(function(){ | |
| $(".chat").removeClass("secondView"); | |
| $(".chat").addClass("firstView"); | |
| $(".change").removeClass("secondView"); | |
| $(".change").addClass("firstView"); | |
| }, 500); | |
| setTimeout(function(){ | |
| $(".chat").removeClass("changeScreen"); | |
| $(".change").removeClass("changeScreen"); | |
| }, 1000); | |
| } | |
| }); | |
| // send button | |
| $("#msgInput").keyup(function(){ | |
| if($(this).val() != "") { | |
| $("button.send").prop("disabled", false); | |
| } else { | |
| $("button.send").prop("disabled", true); | |
| } | |
| }); | |
| $(".send").click(function(){ | |
| if ($(".chat").hasClass("attachment")) { | |
| sendImg(); | |
| } else { | |
| sendMsg(); | |
| } | |
| }); | |
| $("#attachment").change(function() { | |
| attachment(this); | |
| $("button.send").prop("disabled", false); | |
| }); | |
| $("#msgInput").on('keypress',function(e) { | |
| if($(".chat").hasClass("attachment")) { | |
| if(e.which == 13) { | |
| sendImg(); | |
| } | |
| } else if($(this).val() != "" && !$(".chat").hasClass("attachment")) { | |
| if(e.which == 13) { | |
| sendMsg(); | |
| } | |
| } | |
| }); | |
| // send text | |
| function sendMsg() { | |
| var message = $("#msgInput").val(); | |
| if ($(".chat").hasClass("start")) { | |
| if ($(".chat").hasClass("firstView")) { | |
| $(".msg").append("<li class=\"date\"><span>today</span></li><li class=\"first\"><div>"+message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } else if ($(".chat").hasClass("secondView")) { | |
| $(".msg").append("<li class=\"date\"><span>today</span></li><li class=\"second\"><div>"+message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } | |
| $(".chat").removeClass("start"); | |
| } else if (!$(".chat").hasClass("start")) { | |
| if ($(".chat").hasClass("firstView")) { | |
| $(".msg").append("<li class=\"first\"><div>"+message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } else if ($(".chat").hasClass("secondView")) { | |
| $(".msg").append("<li class=\"second\"><div>"+message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } | |
| } | |
| $(".msgSpace div").scrollTop($(".msg").height()); | |
| $("#msgInput").val(""); | |
| $("button.send").prop("disabled", true); | |
| $("#msgInput").focus(); | |
| } | |
| //attach | |
| function attachment(input) { | |
| if (input.files && input.files[0]) { | |
| var reader = new FileReader(); | |
| reader.onload = function(e) { | |
| $(".chat").addClass("attachment"); | |
| var preview = e.target.result; | |
| $(".modalAttachment").html("<div class=\"preview\"><img src=\""+preview+"\" /></div>"); | |
| } | |
| reader.readAsDataURL(input.files[0]); | |
| } | |
| } | |
| // send img + text | |
| function sendImg() { | |
| $(".chat").removeClass("attachment"); | |
| if ($("#msgInput").val() != "" ) { | |
| var message = "<span class=\"caption\">" + $("#msgInput").val() + "</span>"; | |
| } else { | |
| var message = "" | |
| } | |
| var attach = $(".preview").html(); | |
| if ($(".chat").hasClass("start")) { | |
| if ($(".chat").hasClass("firstView")) { | |
| $(".msg").append("<li class=\"date\"><span>today</span></li><li class=\"first img\"><div>"+attach + message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } else if ($(".chat").hasClass("secondView")) { | |
| $(".msg").append("<li class=\"date\"><span>today</span></li><li class=\"second img\"><div>"+attach + message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } | |
| $(".chat").removeClass("start"); | |
| } else if (!$(".chat").hasClass("start")) { | |
| if ($(".chat").hasClass("firstView")) { | |
| $(".msg").append("<li class=\"first img\"><div>"+attach + message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } else if ($(".chat").hasClass("secondView")) { | |
| $(".msg").append("<li class=\"second img\"><div>"+attach + message+"</div><time>"+time(new Date)+"</time></li>"); | |
| } | |
| } | |
| $(".msgSpace div").scrollTop($(".msg").height()); | |
| $("#msgInput").val(""); | |
| $("button.send").prop("disabled", true); | |
| $("#msgInput").focus(); | |
| } | |
| // time | |
| function time(date) { | |
| var hours = date.getHours(); | |
| var minutes = date.getMinutes(); | |
| var ampm = hours >= 12 ? 'pm' : 'am'; | |
| hours = hours % 12; | |
| hours = hours ? hours : 12; // the hour '0' should be '12' | |
| hours = hours < 10 ? '0'+hours : hours; | |
| minutes = minutes < 10 ? '0'+minutes : minutes; | |
| var strTime = hours + ':' + minutes + ' ' + ampm; | |
| return strTime; | |
| } | |
| // start | |
| $(".msgSpace div").scrollTop($(".msg").height()); |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> |
| $bkgMain: #ddd; | |
| $bkgChat: #f1f3f6; | |
| $textDark: #353b47; | |
| $text: #717a90; | |
| $greyLight: #c4c7d0; | |
| $white: #fff; | |
| $statusOk: #19d0c5; | |
| $greyChange :#7b808b; | |
| $bkgDark: #353b47; | |
| $topColor01: #4f89c4; | |
| $me01: #a4c4e1; | |
| $send01: #46cc7c; | |
| $topColor02: #333; | |
| $me02: #e58091; | |
| $send02: #fb963c; | |
| *{letter-spacing: -0.02px;-webkit-font-smoothing: antialiased; width: 100% ;font-family: "Montserrat"; font-size:14px; line-height: 24px; font-weight: 500; box-sizing: border-box; color: $text;} | |
| ::-webkit-scrollbar { | |
| display: none; | |
| } | |
| main { | |
| display: block; | |
| position:absolute; | |
| width: calc(100% - 40px); | |
| height: calc(100% - 40px); | |
| top: 20px; | |
| left: 20px; | |
| bottom: 20px; | |
| right: 20px; | |
| border-radius: 20px; | |
| background: $bkgMain; | |
| } | |
| .change { | |
| display: block; | |
| position: absolute; | |
| bottom: 0px; | |
| right: 0px; | |
| width: 200px; | |
| height: auto; | |
| padding: 40px; | |
| transform-origin: bottom right; | |
| border-radius: 8px; | |
| opacity: 0.7; | |
| cursor: pointer; | |
| transition: all 500ms; | |
| &:hover { | |
| opacity: 1; | |
| } | |
| &:before { | |
| content: "You are:"; | |
| display: block; | |
| width: auto; | |
| height: 30px; | |
| text-align: center; | |
| font-size: 10px; | |
| line-height: 28px; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| color: $greyChange; | |
| opacity: 0.5; | |
| } | |
| .Avatar { | |
| display: block; | |
| position: relative; | |
| width: 40px; | |
| height: 40px; | |
| margin: 0px auto; | |
| border-radius: 24px; | |
| img {border-radius: 24px;} | |
| } | |
| .Name { | |
| display: block; | |
| width: auto; | |
| height: auto; | |
| text-align: center; | |
| span{ | |
| display: block; | |
| margin: 6px 0px 12px 0px; | |
| color: $greyChange; | |
| font-size: 12px; | |
| line-height: 20px; | |
| font-weight: 600; | |
| } | |
| } | |
| .btnChange { | |
| display: block; | |
| position: relative; | |
| width: auto; | |
| height: 30px; | |
| font-size: 18px; | |
| color: $white; | |
| font-size: 12px; | |
| line-height: 30px; | |
| font-weight: 600; | |
| text-align: center; | |
| border-radius: 8px; | |
| background: $send01; | |
| } | |
| } | |
| .change.firstView { | |
| .Avatar { | |
| img.second {display: none;} | |
| } | |
| .Name { | |
| span.second {display: none;} | |
| } | |
| } | |
| .change.secondView { | |
| .Avatar { | |
| img.first {display: none;} | |
| } | |
| .Name { | |
| span.first {display: none;} | |
| } | |
| } | |
| // basic | |
| .chat { | |
| display: block; | |
| position:absolute; | |
| top: calc(50% - 360px); | |
| left: calc(50% - 187.5px); | |
| width: 375px; | |
| height: 720px; | |
| border-radius: 30px 30px 70px 70px; | |
| background: $topColor01; | |
| .Contact { | |
| display: block; | |
| position: absolute; | |
| top: 0px; | |
| left: 0px; | |
| z-index: 100; | |
| width: 100%; | |
| height: 100px; | |
| padding: 20px; | |
| .btnBack { | |
| display: block; | |
| float: left; | |
| width: 30px; | |
| height: 100%; | |
| svg { | |
| fill: none; | |
| stroke: rgba($white, 0.5); | |
| stroke-width: 2; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| } | |
| .btnOptions { | |
| display: block; | |
| float: right; | |
| width: 30px; | |
| height: 100%; | |
| svg { | |
| fill: rgba($white, 0.5); | |
| stroke: none; | |
| } | |
| } | |
| .contactInfo { | |
| display: block; | |
| float: left; | |
| width: auto; | |
| height: 60px; | |
| padding: 6px; | |
| .Avatar { | |
| display: block; | |
| position: relative; | |
| float: left; | |
| width: 48px; | |
| height: 48px; | |
| margin: 0px 20px 0px 0px; | |
| border-radius: 24px; | |
| img { | |
| border-radius: 24px; | |
| } | |
| &:after { | |
| content:""; | |
| display: block; | |
| position: absolute; | |
| bottom: -1px; | |
| right: -1px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 24px; | |
| border: 2px solid $topColor01; | |
| background: $statusOk; | |
| } | |
| } | |
| .Name { | |
| display: block; | |
| float: left; | |
| width: auto; | |
| height: 48px; | |
| span{ | |
| display: block; | |
| margin: 5px 0px 4px 0px; | |
| color: $white; | |
| font-size: 18px; | |
| line-height: 20px; | |
| font-weight: 600; | |
| } | |
| .Status{ | |
| display: block; | |
| font-size: 12px; | |
| line-height: 14px; | |
| font-weight: 500; | |
| color: rgba($white, 0.5); | |
| } | |
| } | |
| } | |
| } | |
| .modalAttachment { | |
| display: block; | |
| visibility: hidden; | |
| position: absolute; | |
| top: 0px; | |
| left: 0px; | |
| z-index: 10; | |
| width: 100%; | |
| height: 100%; | |
| padding: 20px; | |
| background: $bkgDark; | |
| border-radius: 30px 30px 50px 50px; | |
| opacity: 0; | |
| .preview{ | |
| display: block; | |
| position: absolute; | |
| z-index: 1; | |
| width: 100%; | |
| height: auto; | |
| top: 50%; | |
| left: 0px; | |
| padding: 40px; | |
| transform: translate(0%, -50%); | |
| img{ | |
| display: block; | |
| max-width: 100%; | |
| height: auto; | |
| border-radius: 10px; | |
| } | |
| } | |
| } | |
| .input { | |
| display: flex; | |
| justify-content: space-between; | |
| position:absolute; | |
| bottom: 20px; | |
| left: 20px; | |
| z-index: 10; | |
| width: 335px; | |
| height: 60px; | |
| padding: 6px; | |
| border-radius: 30px; | |
| box-shadow: 0px 8px 20px rgba($greyLight, 0.4); | |
| background: $white; | |
| button { | |
| display: block; | |
| width: 48px; | |
| height: 48px; | |
| padding: 0px; | |
| border-radius: 30px; | |
| border: 0px; | |
| outline: 0px; | |
| background: $send01; | |
| cursor: pointer; | |
| &:disabled{ | |
| opacity: 0.5; | |
| cursor: default; | |
| } | |
| svg { | |
| fill: $white; | |
| stroke: none; | |
| } | |
| } | |
| input { | |
| display: block; | |
| width: 200px; | |
| height: 48px; | |
| font-size: 14px; | |
| font-weight: 500; | |
| color: $text; | |
| border: 0px; | |
| background: transparent; | |
| outline: 0px; | |
| } | |
| .btnAttach { | |
| display: block; | |
| width: 48px; | |
| height: 48px; | |
| input {display: none;} | |
| label { | |
| display: block; | |
| width: 48px; | |
| height: 48px; | |
| border-radius: 30px; | |
| border: 0px; | |
| outline: 0px; | |
| cursor: pointer; | |
| background: rgba($greyLight,0.05); | |
| svg { | |
| fill: none; | |
| stroke: $greyLight; | |
| stroke-width: 2; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| } | |
| } | |
| } | |
| &.attachment .btnAttach { | |
| label { | |
| display: none; | |
| } | |
| } | |
| .msgSpace{ | |
| display: block; | |
| position:absolute; | |
| top: 100px; | |
| z-index: 1; | |
| width: 375px; | |
| height: calc(100% - 100px); | |
| overflow: hidden; | |
| border-radius: 30px 30px 50px 50px; | |
| background: $bkgChat; | |
| & > div{ | |
| display: block; | |
| width: 100%; | |
| height: calc(100% - 90px); | |
| overflow-y: scroll; | |
| } | |
| &:before{ | |
| content:""; | |
| display: block; | |
| position:absolute; | |
| top: 0px; | |
| left: 0px; | |
| z-index: 1; | |
| width: 375px; | |
| height: 40px; | |
| background: linear-gradient(180deg, rgba($bkgChat,0.6) 0%, rgba($bkgChat,0) 100%); | |
| } | |
| &:after{ | |
| content:""; | |
| display: block; | |
| position:absolute; | |
| bottom: 90px; | |
| left: 0px; | |
| z-index: 1; | |
| width: 375px; | |
| height: 20px; | |
| background: linear-gradient(180deg, rgba($bkgChat,0) 0%, rgba($bkgChat,1) 100%); | |
| } | |
| } | |
| .msg { | |
| display: block; | |
| float: left; | |
| width: 375px; | |
| //max-height: calc(100% - 110px); | |
| padding: 0px 30px 20px 30px; | |
| margin: 0px; | |
| list-style: none; | |
| li { | |
| display: block; | |
| position: relative; | |
| float: right; | |
| width: 100%; | |
| height: auto; | |
| margin: 20px 0px 0px 0px; | |
| &.date { | |
| display: block; | |
| position: relative; | |
| float: left; | |
| width: 100%; | |
| height: 26px; | |
| text-align: center; | |
| margin: 40px auto 0px auto; | |
| span { | |
| display: inline-block; | |
| width: auto!important; | |
| height: 26px; | |
| text-align: center; | |
| margin: 0px auto; | |
| padding: 0px 10px 0px 10px; | |
| font-size: 10px; | |
| line-height: 28px; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| color: $bkgChat; | |
| background: $greyLight; | |
| border-radius: 8px; | |
| } | |
| } | |
| div { | |
| display: block; | |
| width: auto; | |
| max-width: 240px; | |
| height: auto; | |
| padding: 10px 20px 10px 20px; | |
| overflow-wrap: break-word; | |
| } | |
| time { | |
| display: block; | |
| position: absolute; | |
| top: calc(50% - 16px); | |
| width: auto; | |
| height: 32px; | |
| font-size: 10px; | |
| line-height: 32px; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| color: $greyLight; | |
| } | |
| } | |
| } | |
| } | |
| // first view | |
| .chat.firstView { | |
| background: $topColor01; | |
| .Contact { | |
| .contactInfo { | |
| .Avatar { | |
| img.first { | |
| display: none; | |
| } | |
| &:after { | |
| border: 2px solid $topColor01; | |
| } | |
| } | |
| .Name { | |
| span.first{ | |
| display: none; | |
| } | |
| } | |
| } | |
| } | |
| .input { | |
| box-shadow: 0px 8px 20px rgba($greyLight, 0.4); | |
| button { | |
| background: $send01; | |
| } | |
| input { | |
| color: $text; | |
| } | |
| } | |
| .msgSpace{ | |
| background: $bkgChat; | |
| &:before{ | |
| background: linear-gradient(180deg, rgba($bkgChat,0.6) 0%, rgba($bkgChat,0) 100%); | |
| } | |
| &:after{ | |
| background: linear-gradient(180deg, rgba($bkgChat,0) 0%, rgba($bkgChat,1) 100%); | |
| } | |
| } | |
| .msg { | |
| li { | |
| &.first div { | |
| float: right; | |
| border-radius: 22px 22px 8px 22px; | |
| color: $white; | |
| background: $me01; | |
| } | |
| &.first ~ li.first + li.first, &.first + li.first { | |
| margin: 6px 0px 0px 0px; | |
| } | |
| &.first ~ li.first + li.first div, &.first + li.first div{ | |
| border-radius: 22px 8px 8px 22px; | |
| } | |
| &.second div { | |
| float: left; | |
| border-radius: 22px 22px 22px 8px; | |
| background: $white; | |
| } | |
| &.second ~ li.second + li.second, &.second + li.second { | |
| margin: 6px 0px 0px 0px; | |
| } | |
| &.second ~ li.second + li.second div, &.second + li.second div { | |
| border-radius: 8px 22px 22px 8px; | |
| } | |
| &.img div { | |
| padding: 6px 6px 0px 6px; | |
| } | |
| &.first.img .caption { | |
| float: left; | |
| padding: 0px 6px 10px 14px; | |
| color: $white; | |
| } | |
| &.second.img .caption { | |
| float: left; | |
| padding: 0px 14px 10px 6px; | |
| color: $text; | |
| } | |
| &.first img { | |
| border-radius: 16px 16px 4px 16px; | |
| } | |
| &.first ~ li.first + li.first img, &.first + li.first img { | |
| border-radius: 16px 4px 4px 16px; | |
| } | |
| &.second img { | |
| border-radius: 16px 16px 16px 4px; | |
| } | |
| &.second ~ li.second + li.second img, &.second + li.second img { | |
| border-radius: 4px 16px 16px 4px; | |
| } | |
| time { | |
| color: $greyLight; | |
| } | |
| &.first time { | |
| left: 0px; | |
| } | |
| &.second time { | |
| right: 0px; | |
| } | |
| } | |
| } | |
| } | |
| // second view | |
| .chat.secondView { | |
| background: $topColor02; | |
| .Contact { | |
| .contactInfo { | |
| .Avatar { | |
| img.second { | |
| display: none; | |
| } | |
| &:after { | |
| border: 2px solid $topColor02; | |
| } | |
| } | |
| .Name { | |
| span.second{ | |
| display: none; | |
| } | |
| } | |
| } | |
| } | |
| .input { | |
| box-shadow: 0px 8px 20px rgba($greyLight, 0.4); | |
| button { | |
| background: $send02; | |
| } | |
| input { | |
| color: $text; | |
| } | |
| } | |
| .msgSpace{ | |
| background: $bkgChat; | |
| &:before{ | |
| background: linear-gradient(180deg, rgba($bkgChat,0.6) 0%, rgba($bkgChat,0) 100%); | |
| } | |
| &:after{ | |
| background: linear-gradient(180deg, rgba($bkgChat,0) 0%, rgba($bkgChat,1) 100%); | |
| } | |
| } | |
| .msg { | |
| li { | |
| &.first div { | |
| float: left; | |
| border-radius: 22px 22px 22px 8px; | |
| background: $white; | |
| } | |
| &.first ~ li.first + li.first, &.first + li.first { | |
| margin: 6px 0px 0px 0px; | |
| } | |
| &.first ~ li.first + li.first div, &.first + li.first div{ | |
| border-radius: 8px 22px 22px 8px; | |
| } | |
| &.second div { | |
| float: right; | |
| border-radius: 22px 22px 8px 22px; | |
| color: $white; | |
| background: $me02; | |
| } | |
| &.second ~ li.second + li.second, &.second + li.second { | |
| margin: 6px 0px 0px 0px; | |
| } | |
| &.second ~ li.second + li.second div, &.second + li.second div { | |
| border-radius: 22px 8px 8px 22px; | |
| } | |
| &.img div { | |
| padding: 6px 6px 0px 6px; | |
| } | |
| &.first.img .caption { | |
| float: left; | |
| padding: 0px 14px 10px 6px; | |
| color: $text; | |
| } | |
| &.second.img .caption { | |
| float: left; | |
| padding: 0px 6px 10px 14px; | |
| color: $white; | |
| } | |
| &.first img { | |
| border-radius: 16px 16px 16px 4px; | |
| } | |
| &.first ~ li.first + li.first img, &.first + li.first img { | |
| border-radius: 4px 16px 16px 4px; | |
| } | |
| &.second img { | |
| border-radius: 16px 16px 4px 16px; | |
| } | |
| &.second ~ li.second + li.second img, &.second + li.second img { | |
| border-radius: 16px 4px 4px 16px; | |
| } | |
| time { | |
| color: $greyLight; | |
| } | |
| &.first time { | |
| right: 0px; | |
| } | |
| &.second time { | |
| left: 0px; | |
| } | |
| } | |
| } | |
| } | |
| //attachment | |
| .chat.attachment { | |
| .Contact { | |
| .btnBack { | |
| svg { | |
| stroke: rgba($white, 1); | |
| } | |
| } | |
| .btnOptions { | |
| opacity: 0; | |
| } | |
| .contactInfo { | |
| .Avatar { | |
| &:after { | |
| border: 2px solid $bkgDark; | |
| } | |
| } | |
| .Name { | |
| span{ | |
| line-height: 38px; | |
| } | |
| .Status{ | |
| display: none; | |
| opacity: 0; | |
| } | |
| } | |
| } | |
| } | |
| .modalAttachment { | |
| visibility: visible; | |
| opacity: 1; | |
| } | |
| .input { | |
| box-shadow: 0px 8px 20px #1f2127; | |
| background: #485061; | |
| input { | |
| display: block; | |
| width: 220px; | |
| margin: 0px 0px 0px 20px; | |
| color: $white; | |
| } | |
| .btnAttach { | |
| display: none; | |
| } | |
| } | |
| } | |
| .send, .input, .modalAttachment{ | |
| transition: .5s ease-out all; | |
| -moz-transition: .5s ease-out all; | |
| -webkit-transition: .5s ease-out all; | |
| } | |
| .chat.changeScreen{ | |
| animation-name: changeScreen; | |
| animation-duration: 1s; | |
| animation-iteration-count: 1; | |
| animation-delay: 0s; | |
| } | |
| @keyframes changeScreen { | |
| 0% {transform: scale(1); opacity: 1;} | |
| 50% {transform: scale(0.8); opacity: 0;} | |
| 100% {transform: scale(1); opacity: 1;} | |
| } | |
| .change.changeScreen{ | |
| animation-name: switch; | |
| animation-duration: 1s; | |
| animation-iteration-count: 1; | |
| animation-delay: 0s; | |
| } | |
| @keyframes switch { | |
| 50% {opacity: 0;} | |
| } | |
| /* | |
| @media screen and (max-height: 800px) { | |
| .chat, .change {transform: scale(0.8)} | |
| @keyframes changeScreen { | |
| 0% {transform: scale(0.8); opacity: 1;} | |
| 50% {transform: scale(0.6); opacity: 0;} | |
| 100% {transform: scale(0.8); opacity: 1;} | |
| } | |
| } | |
| @media screen and (max-height: 650px) { | |
| .chat, .change {transform: scale(0.6)} | |
| @keyframes changeScreen { | |
| 0% {transform: scale(0.6); opacity: 1;} | |
| 50% {transform: scale(0.4); opacity: 0;} | |
| 100% {transform: scale(0.6); opacity: 1;} | |
| } | |
| } | |
| @media screen and (max-width: 800px) { | |
| .chat, .change {transform: scale(0.8)} | |
| @keyframes changeScreen { | |
| 0% {transform: scale(0.8); opacity: 1;} | |
| 50% {transform: scale(0.6); opacity: 0;} | |
| 100% {transform: scale(0.8); opacity: 1;} | |
| } | |
| } | |
| @media screen and (max-width: 650px) { | |
| .chat, .change {transform: scale(0.6)} | |
| @keyframes changeScreen { | |
| 0% {transform: scale(0.6); opacity: 1;} | |
| 50% {transform: scale(0.4); opacity: 0;} | |
| 100% {transform: scale(0.6); opacity: 1;} | |
| } | |
| } | |
| */ |