# Zoom Meeting Custom Ui

**URL:** <https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281>\
**Category:** Web\
**Created:** [July 31, 2019, 10:04am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281 "2019-07-31T10:04:11Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![khanh.nguyen](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/khanh.nguyen/32/1428_2.png) [@khanh.nguyen](https://devforum.zoom.us/u/khanh.nguyen)\
**Post date:** [July 31, 2019, 10:04am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/1 "2019-07-31T10:04:11Z")

</div>

When I integrated the Zoom in ReactJS, it attached to body. Is there anyway to set zoom into a div.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [July 31, 2019, 6:30pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/2 "2019-07-31T18:30:31Z")

</div>

Hey @khanh.nguyen,

Yes there is a way to put the Meeting UI into a div.

The Zoom Meeting UI is not atcually attached to the body. The css makes it seem that way because of the following styles:

```css
#zmmtg-root {
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0;
    left: 0;
    background-color: black;
}

```

The Zoom Meeting UI will be rendered in the tag with the `zmmtg-root` id. You can place this anywhere in your project. You can also customize the css classes that are generated as well.

```auto
<div id="zmmtg-root"></div>

```

Let me know if this helps!

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![ninhkhong](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/ninhkhong/32/1430_2.png) [@ninhkhong](https://devforum.zoom.us/u/ninhkhong)\
**Post date:** [August 1, 2019, 6:42am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/3 "2019-08-01T06:42:17Z")

</div>

Hey Tommy,

Thanks for you answer,  
We already apply your suggest, it worked but I still have some concerns:

1. I develop our application by React. When I integrated zoom, it had 3 cameras when I opened zoom (1 my big camera, 1 my small camera and 1 my partner camera). Can you please to guide me how to disable my big camera?  
Here is my capture  
 ![51%20PM](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/5/58abd256058a09222532a5d1addce6397ea4242f.jpeg)
2. I would like to know how to customize camera size based on their parent html element (div size…)

Thank a lot,  
Ninh

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 1, 2019, 4:58pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/4 "2019-08-01T16:58:38Z")

</div>

Hey @ninhkhong,

Happy to help!

1. Can you clarify? You have 2 external cameras plugged into your computer? What do you mean by big camera, small camera, and partner camera? I am guessing partner camera is video of participant who joined meeting?

To re position the floating self view camera screen you can use this css,

```css
.suspension-window {
   transform: translate(-444px, 10px) !important;
}

```

1. To customize the size of the video / Zoom Web UI use the following css (feel free to customize width / height sizing)

```css
#zmmtg-root, .meeting-client, .meeting-client-inner {
  width: 1000px;
  height: 500px;
  position: relative;
}

#wc-footer {
  bottom: auto !important;
  width: 1000px !important;
}

#dialog-join {
  width: 1000px !important;
}

#sv-active-video, .active-main, #sv-active-speaker-view, .main-layout {
  height: 500px !important;
  width: 1000px !important;
}

.suspension-window {
  transform: translate(-444px, 10px) !important;
}

#dialog-invite {
  display: none;
}

```

Here is what that sizing looks like

 ![42%20AM](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/e/e7de7315f8d43284b205abbe3eaaf81b2c69fd14.jpeg)

Let me know if this helps!

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![khanh.nguyen](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/khanh.nguyen/32/1428_2.png) [@khanh.nguyen](https://devforum.zoom.us/u/khanh.nguyen)\
**Post date:** [August 2, 2019, 7:13am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/5 "2019-08-02T07:13:57Z")

</div>

Thanks for your help @tommy

Khanh

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 2, 2019, 3:55pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/6 "2019-08-02T15:55:11Z")

</div>

You are welcome! Let us know if you have any other questions!

-Tommy

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 2, 2019, 9:03pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/7 "2019-08-02T21:03:07Z")

</div>

This may also help, using the iFrame method.

> **[4. Join Appointment Online - Build your first Zoom Web SDK App - Web SDK -...](https://marketplace.zoom.us/docs/sdk/native-sdks/Web-Client-SDK/build-your-first-app/join-appointment-online)**
>
> Join Appointment online
> 
> 
> 
> The overall goal of MyDoc is to show you how to use your own web application to easily meet with your clients as soon as they...

-Tommy

---

<div class="post-metadata">

**Author:** ![osulzhenko](https://avatars.discourse-cdn.com/v4/letter/o/dc4da7/32.png) [@osulzhenko](https://devforum.zoom.us/u/osulzhenko)\
**Post date:** [August 6, 2019, 4:03pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/8 "2019-08-06T16:03:01Z")

</div>

Hi everyone, i facing the same issue - i have Reactjs app, and i want to integrate zoom meeting to one of my pages (React component), but SDK put `<div id="zmmtg-root"></div>` into `<body>` tag and i can’t figure out how to get it work inside my component. I have already try to put `<div id="zmmtg-root"></div>` in my React Component but it does’t work.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 6, 2019, 4:06pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/9 "2019-08-06T16:06:15Z")

</div>

Hey @osulzhenko,

Can you provide steps to reproduce, or a Github repo?

What is not working? Is there an error message?

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![osulzhenko](https://avatars.discourse-cdn.com/v4/letter/o/dc4da7/32.png) [@osulzhenko](https://devforum.zoom.us/u/osulzhenko)\
**Post date:** [August 7, 2019, 9:14am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/11 "2019-08-07T09:14:30Z")

</div>

Hi @tommy , thank you for quick response

i find out the source of my issue, i was initialising  
ZoomMtg.preLoadWasm();  
ZoomMtg.prepareJssdk();  
in js code, but instead i need to put this in componentDidMount() hook of my React component.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 7, 2019, 2:58pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/12 "2019-08-07T14:58:00Z")

</div>

Hey @osulzhenko,

I am glad you found the issue, thanks for posting the solution!

-Tommy

---

<div class="post-metadata">

**Author:** ![xander.dumaine](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/xander.dumaine/32/1705_2.png) [@xander.dumaine](https://devforum.zoom.us/u/xander.dumaine)\
**Post date:** [August 30, 2019, 1:15pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/13 "2019-08-30T13:15:41Z")

</div>

This should be added to the documentation. I had to hunt through forums to find this.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [August 30, 2019, 3:32pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/14 "2019-08-30T15:32:49Z")

</div>

Thanks for the feedback @xander.dumaine, we are in the process of re-writing our SDK docs and we will be sure to include this.

-Tommy

---

<div class="post-metadata">

**Author:** ![sdenardi](https://avatars.discourse-cdn.com/v4/letter/s/58f4c7/32.png) [@sdenardi](https://devforum.zoom.us/u/sdenardi)\
**Post date:** [September 17, 2019, 9:58pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/15 "2019-09-17T21:58:46Z")

</div>

Hi @tommy, the previous suggestion to call the `ZoomMtg.*()` calls _after_ the DOM has been loaded, `componentDidMount()`, didn’t solve the issue for us. We’re seeing the element `<div id="zmmtg-root"></div>` getting created as soon as the `zoomus-jssdk` library is imported (as is `<div id="aria-notify-area"></div>`). Here’s our code using hooks (`useEffect` here has same effect as `componentDidMount`):

```auto
import React, { useEffect } from 'react';
import { ZoomMtg } from 'zoomus-jssdk';

console.log('A #zmmtg-root element has already been appended in the body');

const ZoomContainer = function() {
  useEffect(() => {
    ZoomMtg.preLoadWasm();
    ZoomMtg.prepareJssdk();
    console.log('document now has two #zmmtg-root elements, SDK has attached itself to one created by React');
  }, []);

  return (
    <div id="zmmtg-root">
    
    </div>
  );
};

```

---

<div class="post-metadata">

**Author:** ![edward](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/edward/32/1829_2.png) [@edward](https://devforum.zoom.us/u/edward)\
**Post date:** [September 17, 2019, 10:23pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/16 "2019-09-17T22:23:14Z")

</div>

@sdenardi

I believe it is currently unavoidable to have `<div #zmmtg-root>` appended to `body` with the use of this sdk. As you’ve mentioned, the sdk will at least be properly attached to another div with the id. I suspect this is due to the depth first nature of `querySelector` or `getElementById`.

You can visually “clean up” the other `div` with

```auto
body > #zmmtg-root {
  display: none;
}

```

---

<div class="post-metadata">

**Author:** ![sdenardi](https://avatars.discourse-cdn.com/v4/letter/s/58f4c7/32.png) [@sdenardi](https://devforum.zoom.us/u/sdenardi)\
**Post date:** [September 17, 2019, 10:54pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/17 "2019-09-17T22:54:23Z")

</div>

@edward That’s my current workaround, and yeah the fact that it does attach to the `div` we create is just a fortunate side-effect of the library.

---

<div class="post-metadata">

**Author:** ![michael.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/michael.zoom/32/37213_2.png) [@michael.zoom](https://devforum.zoom.us/u/michael.zoom)\
**Post date:** [September 18, 2019, 3:22pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/18 "2019-09-18T15:22:35Z")

</div>

@edward & @sdenardi - yes, this is currently correct. #zmmtg-root appends into the body on import, and needs to be hidden on load. Hiding it in this way should not influence .init() or .join() from overlaying the page when the meeting starts.

Considerations for future readers: If you’re loading another root element (like in React), you’ll need to manage/manipulate the DOM outside of the app. And make sure to include required css files in index.html, not within the app.

We’re working on improving support/usage for module importing and SPAs.

---

<div class="post-metadata">

**Author:** ![New\_Theory](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/new_theory/32/2642_2.png) [@New\_Theory](https://devforum.zoom.us/u/New_Theory)\
**Post date:** [December 19, 2019, 12:35pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/20 "2019-12-19T12:35:51Z")

</div>

This seems to be working for React:

`const zoomMeeting = document.getElementById("zmmtg-root")`

`// onClick handlers:`

```
 const turnItOn = (e) => {
    e.preventDefault()
    zoomMeeting.style.display = 'flex'
    zoomMeeting.style.height = '100%'
    zoomMeeting.style.width = '100%'
    zoomMeeting.style.position = 'fixed'
    zoomMeeting.style.zIndex = '1'
    zoomMeeting.style.backgroundColor = 'black'
  }

  const turnItOff = (e) => {
    e.preventDefault()
    zoomMeeting.style.display = 'none'
    zoomMeeting.style.height = '0px'
    zoomMeeting.style.width = '0px'
    zoomMeeting.style.position = 'relative'
    zoomMeeting.style.backgroundColor = 'black'
    zoomMeeting.style.zIndex = '1'
  }

```

And when the app loads, I set #zmmtg-root “flex: none”, so it doesn’t show on load.

One strange behavior I encountered was that in React/Create-React-App, when importing { ZoomMtg } from ‘@zoomus/websdk’ the Zoom inline styles knocked out vertical scrolling everywhere in my app. Fix was to explicitly set global scrolling:

```
 html {
  overflow: scroll;
}
```

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [December 19, 2019, 8:55pm UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/21 "2019-12-19T20:55:26Z")

</div>

Hey @New_Theory, thanks for sharing this!

Just letting you know we are working on a fully customizable Web SDK that will not override styles on your app. We are releasing it sometime next year so keep an eye on our [changelog](https://marketplace.zoom.us/docs/changelog).

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![New\_Theory](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/new_theory/32/2642_2.png) [@New\_Theory](https://devforum.zoom.us/u/New_Theory)\
**Post date:** [December 20, 2019, 8:56am UTC](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281/22 "2019-12-20T08:56:57Z")

</div>

Great, thx @tommy! I’ll keep an eye on the changelog.

[Next page](https://devforum.zoom.us/t/zoom-meeting-custom-ui/5281.md?page=2)
